diff --git a/.gitignore b/.gitignore index 3c09304887..7b46b863d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +.meghanada/ +bazel-* +bazel-*/ +target/ + layers/ addresses.csv diff --git a/BUILD b/BUILD new file mode 100644 index 0000000000..17a6c2c822 --- /dev/null +++ b/BUILD @@ -0,0 +1,129 @@ +MAIN_BASE_PATH = "src/main/java/coo/%s" + +java_import( + name = "jota", + jars = ["libs/jota-0.9.11-SNAPSHOT.jar"], + runtime_deps = [ + "@com_google_code_gson_gson//jar", + "@com_squareup_okhttp3_okhttp//jar", + "@com_squareup_okio_okio//jar", + "@com_squareup_retrofit2_converter_gson//jar", + "@com_squareup_retrofit2_retrofit//jar", + "@org_bouncycastle_bcprov_jdk15on//jar", + ], +) + +java_library( + name = "common", + srcs = [ + (MAIN_BASE_PATH % (x)) + for x in [ + "crypto/Hasher.java", + "crypto/ISS.java", + "crypto/ISSInPlace.java", + "MilestoneSource.java", + "MilestoneDatabase.java", + "KerlPoW.java", + ] + ], + deps = [ + ":jota", + "@com_google_guava_guava//jar", + "@org_bouncycastle_bcprov_jdk15on//jar", + "@org_slf4j_slf4j_api//jar", + ], +) + +java_library( + name = "conf", + srcs = [ + (MAIN_BASE_PATH % x) + for x in [ + "conf/BaseConfiguration.java", + "conf/Configuration.java", + "conf/ShadowingConfiguration.java", + "conf/POWModeValidator.java", + ] + ], + deps = [ + ":common", + ":jota", + "@com_beust_jcommander//jar", + ], +) + +java_binary( + name = "address_generator", + srcs = [MAIN_BASE_PATH % "util/AddressGenerator.java"], + main_class = "coo.util.AddressGenerator", + visibility = ["//visibility:public"], + runtime_deps = ["@org_slf4j_slf4j_simple//jar"], + deps = [ + ":common", + ":jota", + "@org_slf4j_slf4j_api//jar", + ], +) + +java_binary( + name = "merkle_tree_calculator", + srcs = [MAIN_BASE_PATH % "util/MerkleTreeCalculator.java"], + main_class = "coo.util.MerkleTreeCalculator", + visibility = ["//visibility:public"], + runtime_deps = ["@org_slf4j_slf4j_simple//jar"], + deps = [ + ":common", + ":jota", + "@com_google_guava_guava//jar", + "@org_slf4j_slf4j_api//jar", + ], +) + +COORDINATOR_RUNTIME_DEPS = [ + "@org_slf4j_slf4j_simple//jar", +] + +java_binary( + name = "shadowing_coordinator", + srcs = [MAIN_BASE_PATH % "shadow/ShadowingCoordinator.java"], + main_class = "coo.shadow.ShadowingCoordinator", + visibility = ["//visibility:public"], + runtime_deps = COORDINATOR_RUNTIME_DEPS, + deps = [ + ":common", + ":conf", + ":jota", + "@com_beust_jcommander//jar", + "@org_apache_commons_commons_lang3//jar", + "@org_slf4j_slf4j_api//jar", + ], +) + +java_binary( + name = "coordinator", + srcs = [MAIN_BASE_PATH % "Coordinator.java"], + main_class = "coo.Coordinator", + visibility = ["//visibility:public"], + runtime_deps = COORDINATOR_RUNTIME_DEPS, + deps = [ + ":common", + ":conf", + ":jota", + "@com_beust_jcommander//jar", + "@org_slf4j_slf4j_api//jar", + ], +) + +java_test( + name = "test_milestone", + srcs = glob(["src/test/java/**/*.java"]), + test_class = "MilestoneTest", + deps = [ + ":address_generator", + ":common", + ":jota", + ":merkle_tree_calculator", + "@com_google_guava_guava//jar", + "@junit_junit//jar", + ], +) diff --git a/WORKSPACE b/WORKSPACE new file mode 100644 index 0000000000..361e78991f --- /dev/null +++ b/WORKSPACE @@ -0,0 +1,30 @@ +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "io_bazel_rules_docker", + sha256 = "29d109605e0d6f9c892584f07275b8c9260803bf0c6fcb7de2623b2bedc910bd", + strip_prefix = "rules_docker-0.5.1", + url = "https://github.com/bazelbuild/rules_docker/archive/v0.5.1.tar.gz", +) + +load( + "@io_bazel_rules_docker//container:container.bzl", + "container_pull", + container_repositories = "repositories", +) + +container_repositories() + +container_pull( + name = "java_base", + digest = + "sha256:bb1c9179c2263733f235291998cb849d52fb730743125420cf4f97a362d6a6dd", + registry = "gcr.io", + repository = "distroless/java", +) + +# Java dependencies + +load("//third-party:maven_deps.bzl", "maven_jars") + +maven_jars() diff --git a/build.gradle b/build.gradle index 887620b854..a0826086ee 100644 --- a/build.gradle +++ b/build.gradle @@ -1,26 +1,11 @@ -/* - * This build file was generated by the Gradle 'init' task. - * - * This generated file contains a sample Java project to get you started. - * For more details take a look at the Java Quickstart chapter in the Gradle - * user guide available at https://docs.gradle.org/4.2.1/userguide/tutorial_java_projects.html - */ - -// Apply the java plugin to add support for Java apply plugin: 'java' - -// Apply the application plugin to add support for building an application apply plugin: 'application' -// In this section you declare where to find the dependencies of your project repositories { - // Use jcenter for resolving your dependencies. - // You can declare any Maven/Ivy/file repository here. jcenter() } dependencies { - // This dependency is found on compile classpath of this component and consumers. compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.google.guava:guava:23.5-jre' @@ -33,7 +18,6 @@ dependencies { compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.squareup.okhttp3:okhttp:3.9.1' - // Use JUnit test framework testCompile 'junit:junit:4.12' } diff --git a/docker/BUILD b/docker/BUILD new file mode 100644 index 0000000000..29584a334b --- /dev/null +++ b/docker/BUILD @@ -0,0 +1,33 @@ +load("@io_bazel_rules_docker//container:container.bzl", "container_image") + +container_image( + name = "address_generator", + base = "@java_base//image", + cmd = ["address_generator_deploy.jar"], + files = ["//:address_generator_deploy.jar"], + repository = "iota/compass", +) + +container_image( + name = "merkle_tree_calculator", + base = "@java_base//image", + cmd = ["merkle_tree_calculator_deploy.jar"], + files = ["//:merkle_tree_calculator_deploy.jar"], + repository = "iota/compass", +) + +container_image( + name = "coordinator", + base = "@java_base//image", + cmd = ["coordinator_deploy.jar"], + files = ["//:coordinator_deploy.jar"], + repository = "iota/compass", +) + +container_image( + name = "shadowing_coordinator", + base = "@java_base//image", + cmd = ["shadowing_coordinator_deploy.jar"], + files = ["//:shadowing_coordinator_deploy.jar"], + repository = "iota/compass", +) diff --git a/docs/private_tangle/.gitignore b/docs/private_tangle/.gitignore new file mode 100644 index 0000000000..6af10a7452 --- /dev/null +++ b/docs/private_tangle/.gitignore @@ -0,0 +1,3 @@ +config.json +data/ +.*.swp diff --git a/docs/private_tangle/01_generate_addresses.sh b/docs/private_tangle/01_generate_addresses.sh new file mode 100755 index 0000000000..73a0942c55 --- /dev/null +++ b/docs/private_tangle/01_generate_addresses.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +. lib.sh +load_config + +docker run -t --rm -v `pwd`/data:/data iota/compass/docker:address_generator address_generator_deploy.jar $sigMode $seed $security $depth /data/addresses.csv diff --git a/docs/private_tangle/02_calculate_merkle_tree.sh b/docs/private_tangle/02_calculate_merkle_tree.sh new file mode 100755 index 0000000000..18c0040820 --- /dev/null +++ b/docs/private_tangle/02_calculate_merkle_tree.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +. lib.sh +load_config + +docker run -t --rm -v `pwd`/data:/data iota/compass/docker:merkle_tree_calculator merkle_tree_calculator_deploy.jar $sigMode /data/addresses.csv /data/layers/ diff --git a/docs/private_tangle/03_run_coordinator.sh b/docs/private_tangle/03_run_coordinator.sh new file mode 100755 index 0000000000..4b98c67dd9 --- /dev/null +++ b/docs/private_tangle/03_run_coordinator.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +. lib.sh +load_config + +docker run -t --net host --rm -v `pwd`/data:/data iota/compass/docker:coordinator coordinator_deploy.jar \ + -layers /data/layers \ + -sigMode $sigMode \ + -powMode $powMode \ + -mwm $mwm \ + -security $security \ + -seed $seed \ + -tick $tick \ + -host $host \ + "$@" diff --git a/docs/private_tangle/config.example.json b/docs/private_tangle/config.example.json new file mode 100644 index 0000000000..f33f04a412 --- /dev/null +++ b/docs/private_tangle/config.example.json @@ -0,0 +1,10 @@ +{ + "seed": "MYSEEDHEREPLEASEREPLACEMEIMMEDIATELYWITHSOMETHINGSECURE99999999999999999999999999", + "powMode": "CURLP81", + "sigMode": "CURLP27", + "security": 2, + "depth": 5, + "mwm": 9, + "tick": 60000, + "host": "http://localhost:14265" +} diff --git a/docs/private_tangle/lib.sh b/docs/private_tangle/lib.sh new file mode 100644 index 0000000000..81375c40e0 --- /dev/null +++ b/docs/private_tangle/lib.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +function load_config { + if [ ! -f config.json ]; then + echo "Config file 'config.json' does not exist! Please look at config.example.json and create one!" + exit 1 + fi + + mkdir data &> /dev/null + + host=$(jq -r .host config.json) + sigMode=$(jq -r .sigMode config.json) + powMode=$(jq -r .powMode config.json) + seed=$(jq -r .seed config.json) + security=$(jq .security config.json) + depth=$(jq .depth config.json) + tick=$(jq .tick config.json) + mwm=$(jq .mwm config.json) + + + if [ ! -d data/ ]; then + mkdir data/ + echo "Depending on OS you might have to set SELinux permissions for data/" + fi +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 74bb77845e..e0b3fb8d70 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.2.1-bin.zip diff --git a/src/test/java/MilestoneTest.java b/src/test/java/MilestoneTest.java index 8c7f5fe666..6924e903e7 100644 --- a/src/test/java/MilestoneTest.java +++ b/src/test/java/MilestoneTest.java @@ -34,6 +34,8 @@ import jota.utils.Converter; import org.junit.Assert; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; import java.util.Arrays; import java.util.List; @@ -44,6 +46,7 @@ /** * Tests milestone generation & verifies the signatures */ +@RunWith(JUnit4.class) public class MilestoneTest { private void runForMode(SpongeFactory.Mode powMode, SpongeFactory.Mode sigMode, int security) { final String seed = TestUtil.nextSeed(); diff --git a/third-party/BUILD b/third-party/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/maven_deps.bzl b/third-party/maven_deps.bzl new file mode 100644 index 0000000000..a043288584 --- /dev/null +++ b/third-party/maven_deps.bzl @@ -0,0 +1,269 @@ +def maven_jars(): + # com.google.guava:guava:bundle:26.0-jre + native.maven_jar( + name = "com_google_code_findbugs_jsr305", + artifact = "com.google.code.findbugs:jsr305:3.0.2", + repository = "https://jcenter.bintray.com/", + sha1 = "25ea2e8b0c338a877313bd4672d3fe056ea78f0d", + ) + + # com.google.guava:guava:bundle:26.0-jre + native.maven_jar( + name = "org_codehaus_mojo_animal_sniffer_annotations", + artifact = "org.codehaus.mojo:animal-sniffer-annotations:1.14", + repository = "https://jcenter.bintray.com/", + sha1 = "775b7e22fb10026eed3f86e8dc556dfafe35f2d5", + ) + + # org.slf4j:slf4j-simple:jar:1.7.25 + native.maven_jar( + name = "org_slf4j_slf4j_api", + artifact = "org.slf4j:slf4j-api:1.7.25", + repository = "https://jcenter.bintray.com/", + sha1 = "da76ca59f6a57ee3102f8f9bd9cee742973efa8a", + ) + + # junit:junit:jar:4.12 + native.maven_jar( + name = "org_hamcrest_hamcrest_core", + artifact = "org.hamcrest:hamcrest-core:1.3", + repository = "https://jcenter.bintray.com/", + sha1 = "42a25dc3219429f0e5d060061f71acb49bf010a0", + ) + + native.maven_jar( + name = "com_squareup_retrofit2_converter_gson", + artifact = "com.squareup.retrofit2:converter-gson:2.4.0", + repository = "https://jcenter.bintray.com/", + sha1 = "15d7790ee311d961379c51b00aba12d5967cb7ea", + ) + + # com.squareup.retrofit2:converter-gson:jar:2.4.0 + native.maven_jar( + name = "com_google_code_gson_gson", + artifact = "com.google.code.gson:gson:2.8.2", + repository = "https://jcenter.bintray.com/", + sha1 = "3edcfe49d2c6053a70a2a47e4e1c2f94998a49cf", + ) + + native.maven_jar( + name = "com_squareup_retrofit2_retrofit", + artifact = "com.squareup.retrofit2:retrofit:2.4.0", + repository = "https://jcenter.bintray.com/", + sha1 = "fc4aa382632bfaa7be7b41579efba41d5a71ecf3", + ) + + # com.google.guava:guava:bundle:26.0-jre + native.maven_jar( + name = "org_checkerframework_checker_qual", + artifact = "org.checkerframework:checker-qual:2.5.2", + repository = "https://jcenter.bintray.com/", + sha1 = "cea74543d5904a30861a61b4643a5f2bb372efc4", + ) + + # com.squareup.retrofit2:retrofit:jar:2.4.0 + native.maven_jar( + name = "com_squareup_okhttp3_okhttp", + artifact = "com.squareup.okhttp3:okhttp:3.10.0", + repository = "https://jcenter.bintray.com/", + sha1 = "7ef0f1d95bf4c0b3ba30bbae25e0e562b05cf75e", + ) + + # com.google.guava:guava:bundle:26.0-jre + native.maven_jar( + name = "com_google_errorprone_error_prone_annotations", + artifact = "com.google.errorprone:error_prone_annotations:2.1.3", + repository = "https://jcenter.bintray.com/", + sha1 = "39b109f2cd352b2d71b52a3b5a1a9850e1dc304b", + ) + + native.maven_jar( + name = "org_apache_commons_commons_lang3", + artifact = "org.apache.commons:commons-lang3:3.8.1", + repository = "https://jcenter.bintray.com/", + sha1 = "6505a72a097d9270f7a9e7bf42c4238283247755", + ) + + # com.squareup.okhttp3:okhttp:jar:3.10.0 + native.maven_jar( + name = "com_squareup_okio_okio", + artifact = "com.squareup.okio:okio:1.14.0", + repository = "https://jcenter.bintray.com/", + sha1 = "102d7be47241d781ef95f1581d414b0943053130", + ) + + native.maven_jar( + name = "com_google_guava_guava", + artifact = "com.google.guava:guava:26.0-jre", + repository = "https://jcenter.bintray.com/", + sha1 = "6a806eff209f36f635f943e16d97491f00f6bfab", + ) + + native.maven_jar( + name = "org_bouncycastle_bcprov_jdk15on", + artifact = "org.bouncycastle:bcprov-jdk15on:1.60", + repository = "https://jcenter.bintray.com/", + sha1 = "bd47ad3bd14b8e82595c7adaa143501e60842a84", + ) + + native.maven_jar( + name = "com_beust_jcommander", + artifact = "com.beust:jcommander:1.72", + repository = "https://jcenter.bintray.com/", + sha1 = "6375e521c1e11d6563d4f25a07ce124ccf8cd171", + ) + + native.maven_jar( + name = "org_slf4j_slf4j_simple", + artifact = "org.slf4j:slf4j-simple:1.7.25", + repository = "https://jcenter.bintray.com/", + sha1 = "8dacf9514f0c707cbbcdd6fd699e8940d42fb54e", + ) + + native.maven_jar( + name = "junit_junit", + artifact = "junit:junit:4.12", + repository = "https://jcenter.bintray.com/", + sha1 = "2973d150c0dc1fefe998f834810d68f278ea58ec", + ) + + # com.google.guava:guava:bundle:26.0-jre + native.maven_jar( + name = "com_google_j2objc_j2objc_annotations", + artifact = "com.google.j2objc:j2objc-annotations:1.1", + repository = "https://jcenter.bintray.com/", + sha1 = "976d8d30bebc251db406f2bdb3eb01962b5685b3", + ) + +def maven_libraries(): + native.java_library( + name = "com_google_code_findbugs_jsr305", + visibility = ["//visibility:public"], + exports = ["@com_google_code_findbugs_jsr305//jar"], + ) + + native.java_library( + name = "org_codehaus_mojo_animal_sniffer_annotations", + visibility = ["//visibility:public"], + exports = ["@org_codehaus_mojo_animal_sniffer_annotations//jar"], + ) + + native.java_library( + name = "org_slf4j_slf4j_api", + visibility = ["//visibility:public"], + exports = ["@org_slf4j_slf4j_api//jar"], + ) + + native.java_library( + name = "org_hamcrest_hamcrest_core", + visibility = ["//visibility:public"], + exports = ["@org_hamcrest_hamcrest_core//jar"], + ) + + native.java_library( + name = "com_squareup_retrofit2_converter_gson", + visibility = ["//visibility:public"], + exports = ["@com_squareup_retrofit2_converter_gson//jar"], + runtime_deps = [ + ":com_google_code_gson_gson", + ":com_squareup_retrofit2_retrofit", + ], + ) + + native.java_library( + name = "com_google_code_gson_gson", + visibility = ["//visibility:public"], + exports = ["@com_google_code_gson_gson//jar"], + ) + + native.java_library( + name = "com_squareup_retrofit2_retrofit", + visibility = ["//visibility:public"], + exports = ["@com_squareup_retrofit2_retrofit//jar"], + runtime_deps = [ + ":com_squareup_okhttp3_okhttp", + ":com_squareup_okio_okio", + ], + ) + + native.java_library( + name = "org_checkerframework_checker_qual", + visibility = ["//visibility:public"], + exports = ["@org_checkerframework_checker_qual//jar"], + ) + + native.java_library( + name = "com_squareup_okhttp3_okhttp", + visibility = ["//visibility:public"], + exports = ["@com_squareup_okhttp3_okhttp//jar"], + runtime_deps = [ + ":com_squareup_okio_okio", + ], + ) + + native.java_library( + name = "com_google_errorprone_error_prone_annotations", + visibility = ["//visibility:public"], + exports = ["@com_google_errorprone_error_prone_annotations//jar"], + ) + + native.java_library( + name = "org_apache_commons_commons_lang3", + visibility = ["//visibility:public"], + exports = ["@org_apache_commons_commons_lang3//jar"], + ) + + native.java_library( + name = "com_squareup_okio_okio", + visibility = ["//visibility:public"], + exports = ["@com_squareup_okio_okio//jar"], + ) + + native.java_library( + name = "com_google_guava_guava", + visibility = ["//visibility:public"], + exports = ["@com_google_guava_guava//jar"], + runtime_deps = [ + ":com_google_code_findbugs_jsr305", + ":com_google_errorprone_error_prone_annotations", + ":com_google_j2objc_j2objc_annotations", + ":org_checkerframework_checker_qual", + ":org_codehaus_mojo_animal_sniffer_annotations", + ], + ) + + native.java_library( + name = "org_bouncycastle_bcprov_jdk15on", + visibility = ["//visibility:public"], + exports = ["@org_bouncycastle_bcprov_jdk15on//jar"], + ) + + native.java_library( + name = "com_beust_jcommander", + visibility = ["//visibility:public"], + exports = ["@com_beust_jcommander//jar"], + ) + + native.java_library( + name = "org_slf4j_slf4j_simple", + visibility = ["//visibility:public"], + exports = ["@org_slf4j_slf4j_simple//jar"], + runtime_deps = [ + ":org_slf4j_slf4j_api", + ], + ) + + native.java_library( + name = "junit_junit", + visibility = ["//visibility:public"], + exports = ["@junit_junit//jar"], + runtime_deps = [ + ":org_hamcrest_hamcrest_core", + ], + ) + + native.java_library( + name = "com_google_j2objc_j2objc_annotations", + visibility = ["//visibility:public"], + exports = ["@com_google_j2objc_j2objc_annotations//jar"], + )