diff --git a/Makefile b/Makefile index 3c23ad69123c..7789c8594a04 100755 --- a/Makefile +++ b/Makefile @@ -178,30 +178,6 @@ build-logproc: ocaml_checks reformat-diff libp2p_helper ## Build the logproc exe --profile=$(DUNE_PROFILE) \ && echo "✅ Build complete" -.PHONY: build-mainnet-sigs -build-mainnet-sigs: ocaml_checks reformat-diff libp2p_helper build ## Build mainnet signature variants of the daemon - $(info 🏗️ Building mainnet signature variants with profile $(DUNE_PROFILE) and commit $(GITLONGHASH)) - @(ulimit -s 65532 || true) && (ulimit -n 10240 || true) && \ - env MINA_COMMIT_SHA1=$(GITLONGHASH) \ - dune build \ - src/app/cli/src/mina_mainnet_signatures.exe \ - src/app/rosetta/rosetta_mainnet_signatures.exe \ - src/app/rosetta/ocaml-signer/signer_mainnet_signatures.exe \ - --profile=mainnet \ - && echo "✅ Build complete" - -.PHONY: build-devnet-sigs -build-devnet-sigs: ocaml_checks reformat-diff libp2p_helper build ## Build devnet signature variants of the daemon - $(info 🏗️ Building devnet signature variants with profile $(DUNE_PROFILE) and commit $(GITLONGHASH)) - @(ulimit -s 65532 || true) && (ulimit -n 10240 || true) && \ - env MINA_COMMIT_SHA1=$(GITLONGHASH) \ - dune build \ - src/app/cli/src/mina_testnet_signatures.exe \ - src/app/rosetta/rosetta_testnet_signatures.exe \ - src/app/rosetta/ocaml-signer/signer_testnet_signatures.exe \ - --profile=devnet \ - && echo "✅ Build complete" - .PHONY: build-archive build-archive: ocaml_checks reformat-diff ## Build the archive node $(info 🏗️ Building archive with profile $(DUNE_PROFILE) and commit $(GITLONGHASH)) diff --git a/buildkite/scripts/bench/install.sh b/buildkite/scripts/bench/install.sh index ebb88d481c88..fd9723d9887b 100644 --- a/buildkite/scripts/bench/install.sh +++ b/buildkite/scripts/bench/install.sh @@ -5,13 +5,11 @@ set -eo pipefail # Don't prompt for answers during apt-get install export DEBIAN_FRONTEND=noninteractive -TESTNET_NAME="berkeley" - git config --global --add safe.directory /workdir source buildkite/scripts/export-git-env-vars.sh source buildkite/scripts/debian/update.sh --verbose -source buildkite/scripts/debian/install.sh "mina-test-suite,mina-$TESTNET_NAME" 1 +source buildkite/scripts/debian/install.sh "mina-test-suite-instrumented,mina-base-instrumented" 1 pip3 install -r scripts/benchmarks/requirements.txt \ No newline at end of file diff --git a/buildkite/scripts/build-artifact.sh b/buildkite/scripts/build-artifact.sh index 559b0629c33f..5e31d2872cb3 100755 --- a/buildkite/scripts/build-artifact.sh +++ b/buildkite/scripts/build-artifact.sh @@ -14,21 +14,20 @@ if [[ -v DUNE_INSTRUMENT_WITH ]]; then export DUNE_INSTRUMENT_WITH="$DUNE_INSTRUMENT_WITH" fi - echo "--- Build all major targets required for packaging" echo "Building from Commit SHA: ${MINA_COMMIT_SHA1}" echo "Rust Version: $(rustc --version)" make libp2p_helper -make build-logproc - -[[ ${MINA_BUILD_MAINNET} ]] && make build-mainnet-sigs +make build -make build-devnet-sigs +make build-logproc make build-daemon-utils make build-archive-utils +make build-rosetta + make build-test-utils \ No newline at end of file diff --git a/buildkite/scripts/build-release.sh b/buildkite/scripts/build-release.sh index ebafd4bb1366..03467de765c5 100755 --- a/buildkite/scripts/build-release.sh +++ b/buildkite/scripts/build-release.sh @@ -8,8 +8,6 @@ set -eo pipefail echo "--- Bundle all packages for Debian ${MINA_DEB_CODENAME}" echo " Includes mina daemon, archive-node, rosetta" -[[ ${MINA_BUILD_MAINNET} ]] && echo " MINA_BUILD_MAINNET is true so this includes the mainnet and devnet packages for mina-daemon as well" - echo "--- Prepare debian packages" BRANCH_NAME="$BUILDKITE_BRANCH" ./scripts/debian/build.sh "$@" diff --git a/buildkite/scripts/debian/install.sh b/buildkite/scripts/debian/install.sh index fe0949241867..75032093aa60 100755 --- a/buildkite/scripts/debian/install.sh +++ b/buildkite/scripts/debian/install.sh @@ -37,15 +37,16 @@ else debs=(${DEBS//,/ }) for i in "${debs[@]}"; do case $i in - mina-berkeley*|mina-devnet|mina-mainnet) - # Downaload mina-logproc too + mina-base*|mina-devnet|mina-mainnet) + # Download mina-logproc, mina-base too + ./buildkite/scripts/cache/manager.sh read "debians/$MINA_DEB_CODENAME/mina-base*" $LOCAL_DEB_FOLDER ./buildkite/scripts/cache/manager.sh read "debians/$MINA_DEB_CODENAME/mina-logproc*" $LOCAL_DEB_FOLDER ;; mina-devnet-legacy|mina-mainnet-legacy) # Download mina-logproc legacy too ./buildkite/scripts/cache/manager.sh read --root "legacy" "debians/$MINA_DEB_CODENAME/${i}*" $LOCAL_DEB_FOLDER esac - ./buildkite/scripts/cache/manager.sh read "debians/$MINA_DEB_CODENAME/${i}_*" $LOCAL_DEB_FOLDER + ./buildkite/scripts/cache/manager.sh read "debians/$MINA_DEB_CODENAME/${i}*" $LOCAL_DEB_FOLDER done fi @@ -66,7 +67,5 @@ $SUDO apt-get update --yes -o Dir::Etc::sourcelist="sources.list.d/mina.list" -o $SUDO apt-get remove --yes "${debs[@]}" $SUDO apt-get install --yes --allow-downgrades "${debs_with_version[@]}" - - # Cleaning up source ./scripts/debian/aptly.sh stop --clean diff --git a/buildkite/scripts/dump-mina-type-shapes.sh b/buildkite/scripts/dump-mina-type-shapes.sh index 1f7628e48d74..94b2c178f131 100755 --- a/buildkite/scripts/dump-mina-type-shapes.sh +++ b/buildkite/scripts/dump-mina-type-shapes.sh @@ -4,12 +4,10 @@ set -eo pipefail buildkite/scripts/debian/update.sh --verbose -TESTNET_NAME="berkeley" - git config --global --add safe.directory /workdir source buildkite/scripts/export-git-env-vars.sh -source buildkite/scripts/debian/install.sh "mina-${TESTNET_NAME}" 1 +source buildkite/scripts/debian/install.sh "mina-base" 1 MINA_COMMIT_SHA1=$(git log -n 1 --format=%h --abbrev=7) export TYPE_SHAPE_FILE=${MINA_COMMIT_SHA1}-type_shape.txt diff --git a/buildkite/scripts/run-test-executive-local.sh b/buildkite/scripts/run-test-executive-local.sh index 2fbc7ebdd0f0..2122945f55cd 100755 --- a/buildkite/scripts/run-test-executive-local.sh +++ b/buildkite/scripts/run-test-executive-local.sh @@ -26,8 +26,8 @@ cleanup TEST_NAME="$1" -MINA_IMAGE="gcr.io/o1labs-192920/mina-daemon:$MINA_DOCKER_TAG-berkeley" -ARCHIVE_IMAGE="gcr.io/o1labs-192920/mina-archive:$MINA_DOCKER_TAG-berkeley" +MINA_IMAGE="gcr.io/o1labs-192920/mina-daemon:$MINA_DOCKER_TAG" +ARCHIVE_IMAGE="gcr.io/o1labs-192920/mina-archive:$MINA_DOCKER_TAG" if [[ "${TEST_NAME:0:15}" == "block-prod-prio" ]] && [[ "$RUN_OPT_TESTS" == "" ]]; then echo "Skipping $TEST_NAME" diff --git a/buildkite/scripts/single-node-tests.sh b/buildkite/scripts/single-node-tests.sh index 1244fce97e6c..8d002e4f7815 100755 --- a/buildkite/scripts/single-node-tests.sh +++ b/buildkite/scripts/single-node-tests.sh @@ -11,9 +11,10 @@ source buildkite/scripts/export-git-env-vars.sh source buildkite/scripts/debian/update.sh --verbose -source buildkite/scripts/debian/install.sh "mina-test-suite,mina-berkeley-lightnet" 1 +source buildkite/scripts/debian/install.sh "mina-test-suite-instrumented,mina-base-instrumented" 1 export MINA_LIBP2P_PASS="naughty blue worm" export MINA_PRIVKEY_PASS="naughty blue worm" +export MINA_SIGNATURE_KIND="testnet" mina-command-line-tests test -v \ No newline at end of file diff --git a/buildkite/scripts/test-nix.sh b/buildkite/scripts/test-nix.sh index 71ecec6ec0d4..019d4299f196 100755 --- a/buildkite/scripts/test-nix.sh +++ b/buildkite/scripts/test-nix.sh @@ -67,7 +67,8 @@ git reset --hard $BUILDKITE_COMMIT # Test developer terminal with lsp server nix "${NIX_OPTS[@]}" develop "$PWD?submodules=1#with-lsp" --command bash -c "echo tested" nix "${NIX_OPTS[@]}" develop "$PWD?submodules=1#with-lsp" --command bash -c "dune build src" & - nix "${NIX_OPTS[@]}" build "$PWD?submodules=1#devnet" --no-link +nix "${NIX_OPTS[@]}" build "$PWD?submodules=1" --no-link + wait if [[ "$NIX_CACHE_GCP_ID" != "" ]] && [[ "$NIX_CACHE_GCP_SECRET" != "" ]]; then diff --git a/buildkite/scripts/tests/ledger_test_apply.sh b/buildkite/scripts/tests/ledger_test_apply.sh index 261994c6d8f6..3cca5d6018ff 100755 --- a/buildkite/scripts/tests/ledger_test_apply.sh +++ b/buildkite/scripts/tests/ledger_test_apply.sh @@ -11,7 +11,7 @@ source buildkite/scripts/export-git-env-vars.sh source buildkite/scripts/debian/update.sh --verbose -source buildkite/scripts/debian/install.sh "mina-berkeley-instrumented" 1 +source buildkite/scripts/debian/install.sh "mina-base-instrumented" 1 echo "removing magic config files" sudo rm -f /var/lib/coda/config_* diff --git a/buildkite/scripts/version-linter.sh b/buildkite/scripts/version-linter.sh index 16a6a3e03615..b86dc97230fb 100755 --- a/buildkite/scripts/version-linter.sh +++ b/buildkite/scripts/version-linter.sh @@ -7,8 +7,6 @@ if [[ $# -ne 1 ]]; then exit 1 fi -TESTNET_NAME="${TESTNET_NAME:-berkeley}" - git config --global --add safe.directory /workdir source buildkite/scripts/debian/update.sh --verbose @@ -30,7 +28,7 @@ echo "--- Run Python version linter with branches: ${pr_branch} ${base_branch} $ echo "--- Install Mina" source buildkite/scripts/export-git-env-vars.sh -source buildkite/scripts/debian/install.sh "mina-${TESTNET_NAME}" 1 +source buildkite/scripts/debian/install.sh "mina-base" 1 echo "--- Audit type shapes" mina internal audit-type-shapes diff --git a/buildkite/src/Command/Base.dhall b/buildkite/src/Command/Base.dhall index 99330bbe367a..253ba1d2b2d0 100644 --- a/buildkite/src/Command/Base.dhall +++ b/buildkite/src/Command/Base.dhall @@ -102,7 +102,7 @@ let Config = , flake_retry_limit : Optional Natural , soft_fail : Optional B/SoftFail , skip : Optional B/Skip - , if : Optional B/If + , if_ : Optional B/If , timeout_in_minutes : Optional Integer } , default = @@ -116,7 +116,7 @@ let Config = , flake_retry_limit = Some 0 , soft_fail = None B/SoftFail , skip = None B/Skip - , if = None B/If + , if_ = None B/If , timeout_in_minutes = None Integer } } @@ -244,7 +244,7 @@ let build } , soft_fail = c.soft_fail , skip = c.skip - , if = c.if + , `if` = c.if_ , plugins = let dockerPart = Optional/toList diff --git a/buildkite/src/Command/Bench/Base.dhall b/buildkite/src/Command/Bench/Base.dhall index c32b6483e27f..852b3b2a7514 100644 --- a/buildkite/src/Command/Bench/Base.dhall +++ b/buildkite/src/Command/Bench/Base.dhall @@ -51,7 +51,6 @@ let Spec = DebianVersions.DepsSpec::{ , build_flag = BuildFlags.Type.Instrumented } - # DebianVersions.dependsOn DebianVersions.DepsSpec::{=} , additionalDirtyWhen = [] : List SelectFiles.Type , yellowThreshold = 0.1 , redThreshold = 0.2 diff --git a/buildkite/src/Command/DockerImage.dhall b/buildkite/src/Command/DockerImage.dhall index 6206c18939c9..2d9a7092742d 100644 --- a/buildkite/src/Command/DockerImage.dhall +++ b/buildkite/src/Command/DockerImage.dhall @@ -54,11 +54,11 @@ let ReleaseSpec = , step_key_suffix : Text , docker_publish : DockerPublish.Type , verify : Bool - , if : Optional B/If + , if_ : Optional B/If } , default = { deps = [] : List Command.TaggedKey.Type - , network = Network.Type.Berkeley + , network = Network.Type.Base , arch = Arch.Type.Amd64 , version = "\\\${MINA_DOCKER_TAG}" , service = Artifacts.Type.Daemon @@ -68,7 +68,7 @@ let ReleaseSpec = , deb_release = "unstable" , deb_version = "\\\${MINA_DEB_VERSION}" , deb_legacy_version = "3.1.1-alpha1-compatible-14a8b92" - , deb_profile = Profiles.Type.Devnet + , deb_profile = Profiles.Type.PublicNetwork , build_flags = BuildFlags.Type.None , deb_repo = DebianRepo.Type.Local , docker_publish = DockerPublish.Type.Essential @@ -77,7 +77,7 @@ let ReleaseSpec = , step_key_suffix = "-docker-image" , verify = False , deb_suffix = None Text - , if = None B/If + , if_ = None B/If } } @@ -124,8 +124,7 @@ let generateStep = Extensions.joinOptionals "-" [ merge - { Mainnet = None Text - , Devnet = None Text + { PublicNetwork = None Text , Dev = None Text , Lightnet = Some "${Profiles.toSuffixLowercase spec.deb_profile}" @@ -253,7 +252,7 @@ let generateStep = , target = Size.XLarge , docker_login = Some DockerLogin::{=} , depends_on = spec.deps - , if = spec.if + , if_ = spec.if_ } in { generateStep = generateStep diff --git a/buildkite/src/Command/MinaArtifact.dhall b/buildkite/src/Command/MinaArtifact.dhall index cf727a661ad2..773ecfe6daef 100644 --- a/buildkite/src/Command/MinaArtifact.dhall +++ b/buildkite/src/Command/MinaArtifact.dhall @@ -64,16 +64,16 @@ let MinaBuildSpec = , arch : Arch.Type , deb_legacy_version : Text , suffix : Optional Text - , if : Optional B/If + , if_ : Optional B/If } , default = { prefix = "MinaArtifact" , artifacts = Artifacts.AllButTests , buildScript = "./buildkite/scripts/build-release.sh" , debVersion = DebianVersions.DebVersion.Bullseye - , profile = Profiles.Type.Devnet + , profile = Profiles.Type.PublicNetwork , buildFlags = BuildFlags.Type.None - , network = Network.Type.Berkeley + , network = Network.Type.Base , toolchainSelectMode = Toolchain.SelectionMode.ByDebianAndArch , tags = [ PipelineTag.Type.Long, PipelineTag.Type.Release ] , scope = PipelineScope.Full @@ -83,16 +83,15 @@ let MinaBuildSpec = , suffix = None Text , deb_legacy_version = "3.1.1-alpha1-compatible-14a8b92" , arch = Arch.Type.Amd64 - , if = None B/If + , if_ = None B/If } } -let labelSuffix +let debLabelSuffix : MinaBuildSpec.Type -> Text = \(spec : MinaBuildSpec.Type) -> "${DebianVersions.capitalName - spec.debVersion} ${Network.capitalName - spec.network} ${Profiles.toSuffixUppercase + spec.debVersion} ${Profiles.toSuffixUppercase spec.profile} ${BuildFlags.toSuffixUppercase spec.buildFlags}${Arch.labelSuffix spec.arch}" @@ -102,12 +101,12 @@ let nameSuffix = \(spec : MinaBuildSpec.Type) -> "${DebianVersions.capitalName spec.debVersion}${Network.capitalName - spec.network}${Profiles.toSuffixUppercase + spec.network}${Profiles.toSuffixUppercase spec.profile}${BuildFlags.toSuffixUppercase spec.buildFlags}${Arch.nameSuffix spec.arch}" -let build_artifacts +let buildDebian : MinaBuildSpec.Type -> Command.Type = \(spec : MinaBuildSpec.Type) -> Command.build @@ -125,22 +124,22 @@ let build_artifacts , "MINA_DEB_CODENAME=${DebianVersions.lowerName spec.debVersion}" , "ARCHITECTURE=${Arch.lowerName spec.arch}" - , Network.buildMainnetEnv spec.network ] # BuildFlags.buildEnvs spec.buildFlags # spec.extraBuildEnvs ) "${spec.buildScript} ${Artifacts.toDebianNames spec.artifacts - spec.network}" + spec.network + spec.profile}" # [ Cmd.run "./buildkite/scripts/debian/write_to_cache.sh ${DebianVersions.lowerName spec.debVersion}" ] - , label = "Debian: Build ${labelSuffix spec}" + , label = "Debian: Build ${debLabelSuffix spec}" , key = "build-deb-pkg${Optional/default Text "" spec.suffix}" , target = Size.XLarge - , if = spec.if + , if_ = spec.if_ , retries = [ Command.Retry::{ , exit_status = Command.ExitStatus.Code +2 @@ -159,7 +158,6 @@ let docker_step DebianVersions.dependsOn DebianVersions.DepsSpec::{ , deb_version = spec.debVersion - , network = spec.network , profile = spec.profile , build_flag = spec.buildFlags , step = step_dep_name @@ -169,10 +167,28 @@ let docker_step let docker_publish = DockerPublish.Type.Essential + let base_dep = \(artifact_param: Artifacts.Type) -> + DockerVersion.dependsOn + DockerVersion.DepsSpec::{, + codename = DockerVersion.ofDebian spec.debVersion + , network = Network.Type.Base + , profile = spec.profile + , artifact = artifact_param + } + + let deps_or_base = \(artifact_param: Artifacts.Type) -> + merge + { Base = deps + , Devnet = base_dep artifact_param + , Mainnet = base_dep artifact_param + , Legacy = base_dep artifact_param + } + spec.network + in merge { Daemon = [ DockerImage.ReleaseSpec::{ - , deps = deps + , deps = deps_or_base Artifacts.Type.Daemon , service = Artifacts.Type.Daemon , network = spec.network , deb_codename = spec.debVersion @@ -183,9 +199,8 @@ let docker_step , deb_legacy_version = spec.deb_legacy_version , verify = True , arch = spec.arch - , if = spec.if - } - ] + , if_ = spec.if_ + } ] , DaemonAutoHardfork = [ DockerImage.ReleaseSpec::{ , deps = @@ -244,12 +259,12 @@ let docker_step , deb_repo = DebianRepo.Type.Local , deb_legacy_version = spec.deb_legacy_version , arch = spec.arch - , if = spec.if + , if_ = spec.if_ } ] , Archive = [ DockerImage.ReleaseSpec::{ - , deps = deps + , deps = deps_or_base Artifacts.Type.Archive , service = Artifacts.Type.Archive , network = spec.network , deb_codename = spec.debVersion @@ -260,12 +275,12 @@ let docker_step , deb_legacy_version = spec.deb_legacy_version , verify = True , arch = spec.arch - , if = spec.if + , if_ = spec.if_ } ] , Rosetta = [ DockerImage.ReleaseSpec::{ - , deps = deps + , deps = deps_or_base Artifacts.Type.Rosetta , service = Artifacts.Type.Rosetta , network = spec.network , deb_codename = spec.debVersion @@ -275,7 +290,7 @@ let docker_step , deb_legacy_version = spec.deb_legacy_version , verify = True , arch = spec.arch - , if = spec.if + , if_ = spec.if_ } ] , ZkappTestTransaction = @@ -289,14 +304,14 @@ let docker_step , deb_codename = spec.debVersion , deb_legacy_version = spec.deb_legacy_version , arch = spec.arch - , if = spec.if + , if_ = spec.if_ } ] , FunctionalTestSuite = [ DockerImage.ReleaseSpec::{ , deps = deps , service = Artifacts.Type.FunctionalTestSuite - , network = Network.Type.Berkeley + , network = Network.Type.Base , deb_codename = spec.debVersion , build_flags = spec.buildFlags , docker_publish = docker_publish @@ -304,7 +319,7 @@ let docker_step , deb_profile = spec.profile , deb_legacy_version = spec.deb_legacy_version , arch = spec.arch - , if = spec.if + , if_ = spec.if_ } ] , Toolchain = [] : List DockerImage.ReleaseSpec.Type @@ -355,19 +370,28 @@ let pipelineBuilder , steps = steps } +let buildDebians : MinaBuildSpec.Type -> List Command.Type + = \(spec : MinaBuildSpec.Type) + -> merge + { Base = [ buildDebian spec ] + , Devnet = [] : List Command.Type + , Mainnet = [] : List Command.Type + , Legacy = [] : List Command.Type + } + spec.network + let onlyDebianPipeline : MinaBuildSpec.Type -> Pipeline.Config.Type = \(spec : MinaBuildSpec.Type) - -> pipelineBuilder spec [ build_artifacts spec ] + -> pipelineBuilder spec (buildDebians spec) let pipeline : MinaBuildSpec.Type -> Pipeline.Config.Type = \(spec : MinaBuildSpec.Type) - -> pipelineBuilder spec ([ build_artifacts spec ] # docker_commands spec) + -> pipelineBuilder spec (buildDebians spec # docker_commands spec) in { pipeline = pipeline , onlyDebianPipeline = onlyDebianPipeline , MinaBuildSpec = MinaBuildSpec - , labelSuffix = labelSuffix - , buildArtifacts = build_artifacts + , buildDebian = buildDebian } diff --git a/buildkite/src/Command/Packages/Publish.dhall b/buildkite/src/Command/Packages/Publish.dhall index a02fb8745ccb..aca3c136a4fc 100644 --- a/buildkite/src/Command/Packages/Publish.dhall +++ b/buildkite/src/Command/Packages/Publish.dhall @@ -72,7 +72,7 @@ let Spec = , depends_on : List Command.TaggedKey.Type , branch : Text , architectures : List Architecture.Type - , if : Optional Text + , if_ : Optional Text } , default = { artifacts = [] : List Package.Type @@ -89,7 +89,7 @@ let Spec = , verify = True , branch = "" , architectures = [ Architecture.Type.Amd64, Architecture.Type.Arm64 ] - , if = None Text + , if_ = None Text } } @@ -224,7 +224,7 @@ let publish spec.channel}" , target = Size.Small , depends_on = spec.depends_on - , if = spec.if + , if_ = spec.if_ } ] # Prelude.List.map @@ -258,7 +258,7 @@ let publish r.index}" , target = Size.Small , depends_on = spec.depends_on - , if = spec.if + , if_ = spec.if_ } ) indexedAdditionalTags diff --git a/buildkite/src/Command/Rosetta/Connectivity.dhall b/buildkite/src/Command/Rosetta/Connectivity.dhall index 1609697663c6..086454f7e423 100644 --- a/buildkite/src/Command/Rosetta/Connectivity.dhall +++ b/buildkite/src/Command/Rosetta/Connectivity.dhall @@ -42,7 +42,7 @@ let Spec = , additionalDirtyWhen = [] : List S.Type , softFail = B/SoftFail.Boolean False , timeout = 1000 - , profile = Profiles.Type.Devnet + , profile = Profiles.Type.PublicNetwork , scope = PipelineScope.Full } } diff --git a/buildkite/src/Constants/Artifacts.dhall b/buildkite/src/Constants/Artifacts.dhall index 6a5c0e1f3ac9..157d5af8ba96 100644 --- a/buildkite/src/Constants/Artifacts.dhall +++ b/buildkite/src/Constants/Artifacts.dhall @@ -107,43 +107,38 @@ let dockerNames = (\(a : Artifact) -> dockerName a) artifacts -let toDebianName = - \(artifact : Artifact) - -> \(network : Network.Type) - -> merge - { Daemon = "daemon_${Network.lowerName network}" - , DaemonLegacyHardfork = - "daemon_${Network.lowerName network}_hardfork" - , DaemonAutoHardfork = "" - , LogProc = "logproc" - , Archive = "archive_${Network.lowerName network}" - , TestExecutive = "test_executive" - , BatchTxn = "batch_txn" - , Rosetta = "rosetta_${Network.lowerName network}" - , ZkappTestTransaction = "zkapp_test_transaction" - , FunctionalTestSuite = "functional_test_suite" - , Toolchain = "" - , CreateLegacyGenesis = "create_legacy_genesis" - } - artifact - let toDebianNames = \(artifacts : List Artifact) -> \(network : Network.Type) + -> \(profile : Profiles.Type) -> let list_of_list_of_debians = Prelude.List.map Artifact (List Text) ( \(a : Artifact) - -> merge - { Daemon = [ toDebianName a network ] - , DaemonLegacyHardfork = [ toDebianName a network ] - , DaemonAutoHardfork = [ toDebianName a network ] - , Archive = [ toDebianName a network ] + -> let pubnet_daemon_debs = [ "daemon_mainnet", "daemon_devnet", "daemon_base" ] in + merge + { Daemon = + merge + { Dev = [ "daemon_base" ] + , Lightnet = [ "daemon_base" ] + , PublicNetwork = pubnet_daemon_debs + } + profile + , DaemonLegacyHardfork = [ "daemon_${Network.lowerName network}" ] + , DaemonAutoHardfork = [ "" ] + , Archive = [ "archive" ] , LogProc = [ "logproc" ] , TestExecutive = [ "test_executive" ] , BatchTxn = [ "batch_txn" ] - , Rosetta = [ toDebianName a network ] + , Rosetta = + merge + { Base = [ "rosetta", "daemon_base" ] + , Devnet = [ "rosetta" ] # pubnet_daemon_debs + , Mainnet = [ "rosetta" ] # pubnet_daemon_debs + , Legacy = [ "rosetta" ] # pubnet_daemon_debs + } + network , ZkappTestTransaction = [ "zkapp_test_transaction" ] , FunctionalTestSuite = [ "functional_test_suite" ] , CreateLegacyGenesis = [ "create_legacy_genesis" ] @@ -170,28 +165,19 @@ let Tag = , profile : Profiles.Type , network : Network.Type , buildFlags : BuildFlags.Type - , remove_profile_from_name : Bool } , default = { artifact = Artifact.Daemon , version = "\\\${MINA_DOCKER_TAG}" - , profile = Profiles.Type.Devnet + , profile = Profiles.Type.PublicNetwork , buildFlags = BuildFlags.Type.None - , network = Network.Type.Berkeley - , remove_profile_from_name = False + , network = Network.Type.Base } } let dockerTag = \(spec : Tag.Type) - -> let profile_part = - if spec.remove_profile_from_name - - then "" - - else "${Profiles.toLabelSegment spec.profile}" - - let build_flags_part = + -> let build_flags_part = merge { None = "" , Instrumented = @@ -202,13 +188,13 @@ let dockerTag = in merge { Daemon = "${spec.version}-${Network.lowerName - spec.network}${profile_part}${build_flags_part}" + spec.network}${build_flags_part}" , DaemonLegacyHardfork = "${spec.version}-${Network.lowerName - spec.network}${profile_part}" + spec.network}" , DaemonAutoHardfork = "${spec.version}-${Network.lowerName - spec.network}${profile_part}" + spec.network}" , Archive = "${spec.version}${build_flags_part}" , LogProc = "${spec.version}" , TestExecutive = "${spec.version}" @@ -230,7 +216,6 @@ in { Type = Artifact , Tag = Tag , capitalName = capitalName , lowerName = lowerName - , toDebianName = toDebianName , toDebianNames = toDebianNames , dockerName = dockerName , dockerNames = dockerNames diff --git a/buildkite/src/Constants/DebianPackage.dhall b/buildkite/src/Constants/DebianPackage.dhall index ea28ded6be0d..41407ceb7c8e 100644 --- a/buildkite/src/Constants/DebianPackage.dhall +++ b/buildkite/src/Constants/DebianPackage.dhall @@ -52,30 +52,9 @@ let lowerName = } package -let debianName = - \(package : Package) - -> \(profile : Profile.Type) - -> \(network : Network.Type) - -> merge - { Daemon = - "mina-${Network.lowerName network}${Profile.toLabelSegment - profile}" - , Rosetta = - "mina--rosetta-${Network.lowerName - network}${Profile.toLabelSegment profile}" - , Archive = "mina-archive" - , TestExecutive = "mina-test-executive" - , BatchTxn = "mina-batch-txn" - , LogProc = "mina-logproc" - , ZkappTestTransaction = "mina-zkapp-test-transaction" - , FunctionalTestSuite = "mina-test-suite" - } - package - in { Type = Package , MainPackages = MainPackages , AuxiliaryPackages = AuxiliaryPackages , capitalName = capitalName , lowerName = lowerName - , debianName = debianName } diff --git a/buildkite/src/Constants/DebianVersions.dhall b/buildkite/src/Constants/DebianVersions.dhall index 39651f6d8924..c0d39f10f316 100644 --- a/buildkite/src/Constants/DebianVersions.dhall +++ b/buildkite/src/Constants/DebianVersions.dhall @@ -35,7 +35,6 @@ let lowerName = let DepsSpec = { Type = { deb_version : DebVersion - , network : Network.Type , profile : Profiles.Type , build_flag : BuildFlags.Type , step : Text @@ -44,8 +43,7 @@ let DepsSpec = } , default = { deb_version = DebVersion.Bullseye - , network = Network.Type.Berkeley - , profile = Profiles.Type.Devnet + , profile = Profiles.Type.PublicNetwork , build_flag = BuildFlags.Type.None , step = "build" , prefix = "MinaArtifact" @@ -59,8 +57,7 @@ let dependsOn = let name = "${spec.prefix}${capitalName - spec.deb_version}${Network.capitalName - spec.network}${profileSuffix}${BuildFlags.toSuffixUppercase + spec.deb_version}Base${profileSuffix}${BuildFlags.toSuffixUppercase spec.build_flag}${Arch.nameSuffix spec.arch}" diff --git a/buildkite/src/Constants/DockerVersions.dhall b/buildkite/src/Constants/DockerVersions.dhall index 5278d084800d..141406455011 100644 --- a/buildkite/src/Constants/DockerVersions.dhall +++ b/buildkite/src/Constants/DockerVersions.dhall @@ -47,8 +47,8 @@ let DepsSpec = , default = { codename = Docker.Bullseye , prefix = "MinaArtifact" - , network = Network.Type.Berkeley - , profile = Profiles.Type.Devnet + , network = Network.Type.Base + , profile = Profiles.Type.PublicNetwork , artifact = Artifacts.Type.Daemon , buildFlags = BuildFlags.Type.None , suffix = "docker-image" diff --git a/buildkite/src/Constants/Network.dhall b/buildkite/src/Constants/Network.dhall index 82b13b2a99ab..b47c35258602 100644 --- a/buildkite/src/Constants/Network.dhall +++ b/buildkite/src/Constants/Network.dhall @@ -4,16 +4,15 @@ let List/any = Prelude.List.any let Network : Type - = < Devnet | Mainnet | Berkeley | DevnetLegacy | MainnetLegacy > + = < Devnet | Mainnet | Base | Legacy > let capitalName = \(network : Network) -> merge { Devnet = "Devnet" , Mainnet = "Mainnet" - , Berkeley = "Berkeley" - , DevnetLegacy = "DevnetLegacy" - , MainnetLegacy = "MainnetLegacy" + , Base = "Base" + , Legacy = "Legacy" } network @@ -22,43 +21,12 @@ let lowerName = -> merge { Devnet = "devnet" , Mainnet = "mainnet" - , Berkeley = "berkeley" - , DevnetLegacy = "devnet_legacy" - , MainnetLegacy = "mainnet_legacy" + , Base = "base" + , Legacy = "legacy" } network -let requiresMainnetBuild = - \(network : Network) - -> merge - { Devnet = True - , Mainnet = True - , Berkeley = False - , DevnetLegacy = True - , MainnetLegacy = True - } - network - -let buildMainnetEnv = - \(network : Network) - -> if requiresMainnetBuild network - - then "MINA_BUILD_MAINNET=true" - - else "MINA_BUILD_MAINNET=false" - -let foldMinaBuildMainnetEnv = - \(networks : List Network) - -> if List/any Network requiresMainnetBuild networks - - then "MINA_BUILD_MAINNET=true" - - else "MINA_BUILD_MAINNET=false" - in { Type = Network , capitalName = capitalName , lowerName = lowerName - , requiresMainnetBuild = requiresMainnetBuild - , foldMinaBuildMainnetEnv = foldMinaBuildMainnetEnv - , buildMainnetEnv = buildMainnetEnv } diff --git a/buildkite/src/Constants/Profiles.dhall b/buildkite/src/Constants/Profiles.dhall index 489756c3316f..5557d7564d4c 100644 --- a/buildkite/src/Constants/Profiles.dhall +++ b/buildkite/src/Constants/Profiles.dhall @@ -2,13 +2,12 @@ let Network = ./Network.dhall let Profile : Type - = < Devnet | Mainnet | Lightnet | Dev > + = < PublicNetwork | Lightnet | Dev > let capitalName = \(profile : Profile) -> merge - { Devnet = "Devnet" - , Mainnet = "Mainnet" + { PublicNetwork = "PublicNetwork" , Lightnet = "Lightnet" , Dev = "Dev" } @@ -17,8 +16,7 @@ let capitalName = let lowerName = \(profile : Profile) -> merge - { Devnet = "devnet" - , Mainnet = "mainnet" + { PublicNetwork = "public_network" , Lightnet = "lightnet" , Dev = "dev" } @@ -27,29 +25,16 @@ let lowerName = let duneProfile = \(profile : Profile) -> merge - { Devnet = "devnet" - , Mainnet = "mainnet" + { PublicNetwork = "public_network" , Lightnet = "lightnet" , Dev = "dev" } profile -let fromNetwork = - \(network : Network.Type) - -> merge - { Devnet = Profile.Devnet - , Mainnet = Profile.Mainnet - , Berkeley = Profile.Devnet - , DevnetLegacy = Profile.Devnet - , MainnetLegacy = Profile.Mainnet - } - network - let toSuffixUppercase = \(profile : Profile) -> merge - { Devnet = "Devnet" - , Mainnet = "Mainnet" + { PublicNetwork = "" , Lightnet = "Lightnet" , Dev = "Dev" } @@ -58,8 +43,7 @@ let toSuffixUppercase = let toSuffixLowercase = \(profile : Profile) -> merge - { Devnet = "devnet" - , Mainnet = "mainnet" + { PublicNetwork = "" , Lightnet = "lightnet" , Dev = "dev" } @@ -68,10 +52,9 @@ let toSuffixLowercase = let toLabelSegment = \(profile : Profile) -> merge - { Devnet = "devnet" - , Mainnet = "-mainnet" - , Lightnet = "-lightnet" - , Dev = "-dev" + { PublicNetwork = "" + , Lightnet = "lightnet" + , Dev = "dev" } profile @@ -80,7 +63,6 @@ in { Type = Profile , lowerName = lowerName , duneProfile = duneProfile , toSuffixUppercase = toSuffixUppercase - , fromNetwork = fromNetwork , toSuffixLowercase = toSuffixLowercase , toLabelSegment = toLabelSegment } diff --git a/buildkite/src/Entrypoints/GenerateHardforkPackage.dhall b/buildkite/src/Entrypoints/GenerateHardforkPackage.dhall index b73f1f98a65f..690ab82e1b43 100644 --- a/buildkite/src/Entrypoints/GenerateHardforkPackage.dhall +++ b/buildkite/src/Entrypoints/GenerateHardforkPackage.dhall @@ -40,7 +40,7 @@ let Spec = } , default = { codenames = [ DebianVersions.DebVersion.Bullseye ] - , network = Network.Type.Berkeley + , network = Network.Type.Base , genesis_timestamp = Some "2024-04-07T11:45:00Z" , config_json_gz_url = "https://storage.googleapis.com/o1labs-gitops-infrastructure/devnet/devnet-state-dump-3NK4eDgbkCjKj9fFUXVkrJXsfpfXzJySoAvrFJVCropPW7LLF14F-676026c4d4d2c18a76b357d6422a06f932c3ef4667a8fd88717f68b53fd6b2d7.json.gz" @@ -57,7 +57,6 @@ let generateDockerForCodename = Artifacts.Tag::{ , version = "${spec.version}-${DebianVersions.lowerName codename}" - , remove_profile_from_name = True , network = spec.network } @@ -83,7 +82,7 @@ let generateDockerForCodename = let dependsOnTest = [ { name = pipelineName, key = dockerDaemonStep } ] - in [ MinaArtifact.buildArtifacts + in [ MinaArtifact.buildDebian MinaArtifact.MinaBuildSpec::{ , artifacts = [ Artifacts.Type.LogProc diff --git a/buildkite/src/Jobs/Promote/AutoPromoteNightly.dhall b/buildkite/src/Jobs/Promote/AutoPromoteNightly.dhall index b246bb7a8d9d..2460a1d555ed 100644 --- a/buildkite/src/Jobs/Promote/AutoPromoteNightly.dhall +++ b/buildkite/src/Jobs/Promote/AutoPromoteNightly.dhall @@ -61,7 +61,7 @@ let specs_for_branch = , Artifacts.Type.Archive , Artifacts.Type.Rosetta ] - , profile = Profiles.Type.Devnet + , profile = Profiles.Type.PublicNetwork , networks = [ Network.Type.Devnet ] , codenames = [ DebianVersions.DebVersion.Noble @@ -77,7 +77,7 @@ let specs_for_branch = , branch = "\\\${BUILDKITE_BRANCH}" , source_version = "\\\${MINA_DEB_VERSION}" , build_id = "\\\${BUILDKITE_BUILD_ID}" - , if = Some "build.branch == \"${branch}\"" + , if_ = Some "build.branch == \"${branch}\"" } in Pipeline.build diff --git a/buildkite/src/Jobs/Release/MinaArtifactBookwormBase.dhall b/buildkite/src/Jobs/Release/MinaArtifactBookwormBase.dhall new file mode 100644 index 000000000000..39cc4aded627 --- /dev/null +++ b/buildkite/src/Jobs/Release/MinaArtifactBookwormBase.dhall @@ -0,0 +1,35 @@ +let ArtifactPipelines = ../../Command/MinaArtifact.dhall + +let DebianVersions = ../../Constants/DebianVersions.dhall + +let Artifacts = ../../Constants/Artifacts.dhall + +let Pipeline = ../../Pipeline/Dsl.dhall + +let PipelineTag = ../../Pipeline/Tag.dhall + +let PipelineScope = ../../Pipeline/Scope.dhall + +let Network = ../../Constants/Network.dhall + +in Pipeline.build + ( ArtifactPipelines.pipeline + ArtifactPipelines.MinaBuildSpec::{ + , artifacts = + [ Artifacts.Type.Daemon + , Artifacts.Type.LogProc + , Artifacts.Type.Archive + , Artifacts.Type.Rosetta + , Artifacts.Type.ZkappTestTransaction + , Artifacts.Type.CreateLegacyGenesis + ] + , tags = + [ PipelineTag.Type.Long + , PipelineTag.Type.Release + , PipelineTag.Type.Docker + ] + , debVersion = DebianVersions.DebVersion.Bookworm + , scope = + [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] + } + ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactBookwormBaseArm64.dhall b/buildkite/src/Jobs/Release/MinaArtifactBookwormBaseArm64.dhall new file mode 100644 index 000000000000..5a7fc7785735 --- /dev/null +++ b/buildkite/src/Jobs/Release/MinaArtifactBookwormBaseArm64.dhall @@ -0,0 +1,38 @@ +let ArtifactPipelines = ../../Command/MinaArtifact.dhall + +let DebianVersions = ../../Constants/DebianVersions.dhall + +let Artifacts = ../../Constants/Artifacts.dhall + +let Pipeline = ../../Pipeline/Dsl.dhall + +let PipelineTag = ../../Pipeline/Tag.dhall + +let PipelineScope = ../../Pipeline/Scope.dhall + +let Network = ../../Constants/Network.dhall + +let Arch = ../../Constants/Arch.dhall + +in Pipeline.build + ( ArtifactPipelines.pipeline + ArtifactPipelines.MinaBuildSpec::{ + , artifacts = + [ Artifacts.Type.LogProc + , Artifacts.Type.Daemon + , Artifacts.Type.Archive + , Artifacts.Type.Rosetta + , Artifacts.Type.ZkappTestTransaction + , Artifacts.Type.CreateLegacyGenesis + ] + , arch = Arch.Type.Arm64 + , tags = + [ PipelineTag.Type.Long + , PipelineTag.Type.Release + , PipelineTag.Type.Docker + ] + , debVersion = DebianVersions.DebVersion.Bookworm + , scope = + [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] + } + ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactBookwormDevnetDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBookwormDevnet.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactBookwormDevnetDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBookwormDevnet.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactBookwormDevnetDevnetArm64.dhall b/buildkite/src/Jobs/Release/MinaArtifactBookwormDevnetArm64.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactBookwormDevnetDevnetArm64.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBookwormDevnetArm64.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactBookwormDevnetLegacyDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBookwormLegacy.dhall similarity index 94% rename from buildkite/src/Jobs/Release/MinaArtifactBookwormDevnetLegacyDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBookwormLegacy.dhall index 00298e186426..3b895accdd13 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactBookwormDevnetLegacyDevnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactBookwormLegacy.dhall @@ -21,7 +21,7 @@ in Pipeline.build , PipelineTag.Type.Release , PipelineTag.Type.Docker ] - , network = Network.Type.DevnetLegacy + , network = Network.Type.Legacy , debVersion = DebianVersions.DebVersion.Bookworm , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] diff --git a/buildkite/src/Jobs/Release/MinaArtifactBookwormMainnetMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBookwormMainnet.dhall similarity index 96% rename from buildkite/src/Jobs/Release/MinaArtifactBookwormMainnetMainnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBookwormMainnet.dhall index cab8f6bfc0fe..8f8e6bff5bb5 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactBookwormMainnetMainnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactBookwormMainnet.dhall @@ -32,7 +32,6 @@ in Pipeline.build , PipelineTag.Type.Release , PipelineTag.Type.Stable ] - , profile = Profiles.Type.Mainnet , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] } diff --git a/buildkite/src/Jobs/Release/MinaArtifactBookwormMainnetLegacyMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBookwormMainnetLegacyMainnet.dhall deleted file mode 100644 index c930bf6223b8..000000000000 --- a/buildkite/src/Jobs/Release/MinaArtifactBookwormMainnetLegacyMainnet.dhall +++ /dev/null @@ -1,32 +0,0 @@ -let ArtifactPipelines = ../../Command/MinaArtifact.dhall - -let Artifacts = ../../Constants/Artifacts.dhall - -let Pipeline = ../../Pipeline/Dsl.dhall - -let PipelineTag = ../../Pipeline/Tag.dhall - -let PipelineScope = ../../Pipeline/Scope.dhall - -let DebianVersions = ../../Constants/DebianVersions.dhall - -let Network = ../../Constants/Network.dhall - -let Profiles = ../../Constants/Profiles.dhall - -in Pipeline.build - ( ArtifactPipelines.onlyDebianPipeline - ArtifactPipelines.MinaBuildSpec::{ - , artifacts = [ Artifacts.Type.Daemon ] - , tags = - [ PipelineTag.Type.Long - , PipelineTag.Type.Release - , PipelineTag.Type.Docker - ] - , debVersion = DebianVersions.DebVersion.Bookworm - , network = Network.Type.MainnetLegacy - , profile = Profiles.Type.Mainnet - , scope = - [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] - } - ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactBullseyeBerkeleyDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBullseyeBase.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactBullseyeBerkeleyDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBullseyeBase.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactBullseyeBerkeleyDevnetInstrumented.dhall b/buildkite/src/Jobs/Release/MinaArtifactBullseyeBaseInstrumented.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactBullseyeBerkeleyDevnetInstrumented.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBullseyeBaseInstrumented.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactBullseyeBerkeleyLightnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBullseyeBaseLightnet.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactBullseyeBerkeleyLightnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBullseyeBaseLightnet.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactBullseyeDevnetDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBullseyeDevnet.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactBullseyeDevnetDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBullseyeDevnet.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactBullseyeDevnetLegacyDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBullseyeLegacy.dhall similarity index 93% rename from buildkite/src/Jobs/Release/MinaArtifactBullseyeDevnetLegacyDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBullseyeLegacy.dhall index ef5078d26db5..d87b920385b6 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactBullseyeDevnetLegacyDevnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactBullseyeLegacy.dhall @@ -19,7 +19,7 @@ in Pipeline.build , PipelineTag.Type.Release , PipelineTag.Type.Docker ] - , network = Network.Type.DevnetLegacy + , network = Network.Type.Legacy , debVersion = DebianVersions.DebVersion.Bullseye } ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactBullseyeMainnetMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBullseyeMainnet.dhall similarity index 96% rename from buildkite/src/Jobs/Release/MinaArtifactBullseyeMainnetMainnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactBullseyeMainnet.dhall index 415da4814e1e..31084404383e 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactBullseyeMainnetMainnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactBullseyeMainnet.dhall @@ -31,7 +31,6 @@ in Pipeline.build , PipelineTag.Type.Stable , PipelineTag.Type.Rosetta ] - , profile = Profiles.Type.Mainnet , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] } diff --git a/buildkite/src/Jobs/Release/MinaArtifactBullseyeMainnetLegacyMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactBullseyeMainnetLegacyMainnet.dhall deleted file mode 100644 index f832577aed87..000000000000 --- a/buildkite/src/Jobs/Release/MinaArtifactBullseyeMainnetLegacyMainnet.dhall +++ /dev/null @@ -1,32 +0,0 @@ -let ArtifactPipelines = ../../Command/MinaArtifact.dhall - -let Artifacts = ../../Constants/Artifacts.dhall - -let Pipeline = ../../Pipeline/Dsl.dhall - -let PipelineTag = ../../Pipeline/Tag.dhall - -let PipelineScope = ../../Pipeline/Scope.dhall - -let DebianVersions = ../../Constants/DebianVersions.dhall - -let Network = ../../Constants/Network.dhall - -let Profiles = ../../Constants/Profiles.dhall - -in Pipeline.build - ( ArtifactPipelines.onlyDebianPipeline - ArtifactPipelines.MinaBuildSpec::{ - , artifacts = [ Artifacts.Type.Daemon ] - , tags = - [ PipelineTag.Type.Long - , PipelineTag.Type.Release - , PipelineTag.Type.Docker - ] - , debVersion = DebianVersions.DebVersion.Bullseye - , network = Network.Type.MainnetLegacy - , profile = Profiles.Type.Mainnet - , scope = - [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] - } - ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactFocalBerkeleyDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactFocalBase.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactFocalBerkeleyDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactFocalBase.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactFocalDevnetDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactFocalDevnet.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactFocalDevnetDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactFocalDevnet.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactFocalDevnetLegacyDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactFocalLegacy.dhall similarity index 94% rename from buildkite/src/Jobs/Release/MinaArtifactFocalDevnetLegacyDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactFocalLegacy.dhall index 557301a05fdc..06905b3f1788 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactFocalDevnetLegacyDevnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactFocalLegacy.dhall @@ -8,10 +8,10 @@ let PipelineTag = ../../Pipeline/Tag.dhall let PipelineScope = ../../Pipeline/Scope.dhall -let Network = ../../Constants/Network.dhall - let DebianVersions = ../../Constants/DebianVersions.dhall +let Network = ../../Constants/Network.dhall + in Pipeline.build ( ArtifactPipelines.onlyDebianPipeline ArtifactPipelines.MinaBuildSpec::{ @@ -21,8 +21,8 @@ in Pipeline.build , PipelineTag.Type.Release , PipelineTag.Type.Docker ] - , network = Network.Type.DevnetLegacy , debVersion = DebianVersions.DebVersion.Focal + , network = Network.Type.Legacy , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] } diff --git a/buildkite/src/Jobs/Release/MinaArtifactFocalMainnetMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactFocalMainnet.dhall similarity index 96% rename from buildkite/src/Jobs/Release/MinaArtifactFocalMainnetMainnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactFocalMainnet.dhall index 4202addec7e2..f02990d1b29c 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactFocalMainnetMainnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactFocalMainnet.dhall @@ -33,7 +33,6 @@ in Pipeline.build , PipelineTag.Type.Release , PipelineTag.Type.Stable ] - , profile = Profiles.Type.Mainnet , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] } diff --git a/buildkite/src/Jobs/Release/MinaArtifactFocalMainnetLegacyMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactFocalMainnetLegacyMainnet.dhall deleted file mode 100644 index 7a5fb50b4c11..000000000000 --- a/buildkite/src/Jobs/Release/MinaArtifactFocalMainnetLegacyMainnet.dhall +++ /dev/null @@ -1,32 +0,0 @@ -let ArtifactPipelines = ../../Command/MinaArtifact.dhall - -let Artifacts = ../../Constants/Artifacts.dhall - -let Pipeline = ../../Pipeline/Dsl.dhall - -let PipelineTag = ../../Pipeline/Tag.dhall - -let PipelineScope = ../../Pipeline/Scope.dhall - -let DebianVersions = ../../Constants/DebianVersions.dhall - -let Profiles = ../../Constants/Profiles.dhall - -let Network = ../../Constants/Network.dhall - -in Pipeline.build - ( ArtifactPipelines.onlyDebianPipeline - ArtifactPipelines.MinaBuildSpec::{ - , artifacts = [ Artifacts.Type.Daemon ] - , tags = - [ PipelineTag.Type.Long - , PipelineTag.Type.Release - , PipelineTag.Type.Docker - ] - , debVersion = DebianVersions.DebVersion.Focal - , network = Network.Type.MainnetLegacy - , profile = Profiles.Type.Mainnet - , scope = - [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] - } - ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactJammyBase.dhall b/buildkite/src/Jobs/Release/MinaArtifactJammyBase.dhall new file mode 100644 index 000000000000..c97a77623be2 --- /dev/null +++ b/buildkite/src/Jobs/Release/MinaArtifactJammyBase.dhall @@ -0,0 +1,35 @@ +let ArtifactPipelines = ../../Command/MinaArtifact.dhall + +let DebianVersions = ../../Constants/DebianVersions.dhall + +let Artifacts = ../../Constants/Artifacts.dhall + +let Pipeline = ../../Pipeline/Dsl.dhall + +let PipelineTag = ../../Pipeline/Tag.dhall + +let PipelineScope = ../../Pipeline/Scope.dhall + +let Network = ../../Constants/Network.dhall + +in Pipeline.build + ( ArtifactPipelines.pipeline + ArtifactPipelines.MinaBuildSpec::{ + , artifacts = + [ Artifacts.Type.Daemon + , Artifacts.Type.LogProc + , Artifacts.Type.Archive + , Artifacts.Type.Rosetta + , Artifacts.Type.ZkappTestTransaction + , Artifacts.Type.CreateLegacyGenesis + ] + , tags = + [ PipelineTag.Type.Long + , PipelineTag.Type.Release + , PipelineTag.Type.Docker + ] + , debVersion = DebianVersions.DebVersion.Jammy + , scope = + [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] + } + ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactJammyDevnetDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactJammyDevnet.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactJammyDevnetDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactJammyDevnet.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactJammyDevnetLegacyDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactJammyLegacy.dhall similarity index 94% rename from buildkite/src/Jobs/Release/MinaArtifactJammyDevnetLegacyDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactJammyLegacy.dhall index aa9130e92983..12fda6731caa 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactJammyDevnetLegacyDevnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactJammyLegacy.dhall @@ -21,7 +21,7 @@ in Pipeline.build , PipelineTag.Type.Release , PipelineTag.Type.Docker ] - , network = Network.Type.DevnetLegacy + , network = Network.Type.Legacy , debVersion = DebianVersions.DebVersion.Jammy , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] diff --git a/buildkite/src/Jobs/Release/MinaArtifactJammyMainnetMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactJammyMainnet.dhall similarity index 96% rename from buildkite/src/Jobs/Release/MinaArtifactJammyMainnetMainnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactJammyMainnet.dhall index 9fa61949f23f..6e1c9d5aad6a 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactJammyMainnetMainnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactJammyMainnet.dhall @@ -32,7 +32,6 @@ in Pipeline.build , PipelineTag.Type.Release , PipelineTag.Type.Stable ] - , profile = Profiles.Type.Mainnet , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] } diff --git a/buildkite/src/Jobs/Release/MinaArtifactJammyMainnetLegacyMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactJammyMainnetLegacyMainnet.dhall deleted file mode 100644 index 6117f537776b..000000000000 --- a/buildkite/src/Jobs/Release/MinaArtifactJammyMainnetLegacyMainnet.dhall +++ /dev/null @@ -1,32 +0,0 @@ -let ArtifactPipelines = ../../Command/MinaArtifact.dhall - -let Artifacts = ../../Constants/Artifacts.dhall - -let Pipeline = ../../Pipeline/Dsl.dhall - -let PipelineTag = ../../Pipeline/Tag.dhall - -let PipelineScope = ../../Pipeline/Scope.dhall - -let DebianVersions = ../../Constants/DebianVersions.dhall - -let Network = ../../Constants/Network.dhall - -let Profiles = ../../Constants/Profiles.dhall - -in Pipeline.build - ( ArtifactPipelines.onlyDebianPipeline - ArtifactPipelines.MinaBuildSpec::{ - , artifacts = [ Artifacts.Type.Daemon ] - , tags = - [ PipelineTag.Type.Long - , PipelineTag.Type.Release - , PipelineTag.Type.Docker - ] - , debVersion = DebianVersions.DebVersion.Jammy - , network = Network.Type.MainnetLegacy - , profile = Profiles.Type.Mainnet - , scope = - [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] - } - ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactNobleBase.dhall b/buildkite/src/Jobs/Release/MinaArtifactNobleBase.dhall new file mode 100644 index 000000000000..9441372c0bd1 --- /dev/null +++ b/buildkite/src/Jobs/Release/MinaArtifactNobleBase.dhall @@ -0,0 +1,35 @@ +let ArtifactPipelines = ../../Command/MinaArtifact.dhall + +let DebianVersions = ../../Constants/DebianVersions.dhall + +let Artifacts = ../../Constants/Artifacts.dhall + +let Pipeline = ../../Pipeline/Dsl.dhall + +let PipelineTag = ../../Pipeline/Tag.dhall + +let PipelineScope = ../../Pipeline/Scope.dhall + +let Network = ../../Constants/Network.dhall + +in Pipeline.build + ( ArtifactPipelines.pipeline + ArtifactPipelines.MinaBuildSpec::{ + , artifacts = + [ Artifacts.Type.Daemon + , Artifacts.Type.LogProc + , Artifacts.Type.Archive + , Artifacts.Type.Rosetta + , Artifacts.Type.ZkappTestTransaction + , Artifacts.Type.CreateLegacyGenesis + ] + , tags = + [ PipelineTag.Type.Long + , PipelineTag.Type.Release + , PipelineTag.Type.Docker + ] + , debVersion = DebianVersions.DebVersion.Noble + , scope = + [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] + } + ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactNobleBaseArm64.dhall b/buildkite/src/Jobs/Release/MinaArtifactNobleBaseArm64.dhall new file mode 100644 index 000000000000..32aa66fc2c7f --- /dev/null +++ b/buildkite/src/Jobs/Release/MinaArtifactNobleBaseArm64.dhall @@ -0,0 +1,38 @@ +let ArtifactPipelines = ../../Command/MinaArtifact.dhall + +let DebianVersions = ../../Constants/DebianVersions.dhall + +let Artifacts = ../../Constants/Artifacts.dhall + +let Pipeline = ../../Pipeline/Dsl.dhall + +let PipelineTag = ../../Pipeline/Tag.dhall + +let PipelineScope = ../../Pipeline/Scope.dhall + +let Network = ../../Constants/Network.dhall + +let Arch = ../../Constants/Arch.dhall + +in Pipeline.build + ( ArtifactPipelines.pipeline + ArtifactPipelines.MinaBuildSpec::{ + , artifacts = + [ Artifacts.Type.LogProc + , Artifacts.Type.Daemon + , Artifacts.Type.Archive + , Artifacts.Type.Rosetta + , Artifacts.Type.ZkappTestTransaction + , Artifacts.Type.CreateLegacyGenesis + ] + , arch = Arch.Type.Arm64 + , tags = + [ PipelineTag.Type.Long + , PipelineTag.Type.Release + , PipelineTag.Type.Docker + ] + , debVersion = DebianVersions.DebVersion.Noble + , scope = + [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] + } + ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactNobleDevnetDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactNobleDevnet.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactNobleDevnetDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactNobleDevnet.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactNobleDevnetDevnetArm64.dhall b/buildkite/src/Jobs/Release/MinaArtifactNobleDevnetArm64.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactNobleDevnetDevnetArm64.dhall rename to buildkite/src/Jobs/Release/MinaArtifactNobleDevnetArm64.dhall diff --git a/buildkite/src/Jobs/Release/MinaArtifactNobleDevnetLegacyDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactNobleLegacy.dhall similarity index 94% rename from buildkite/src/Jobs/Release/MinaArtifactNobleDevnetLegacyDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactNobleLegacy.dhall index ee85d115faee..faf9cffda1c2 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactNobleDevnetLegacyDevnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactNobleLegacy.dhall @@ -21,7 +21,7 @@ in Pipeline.build , PipelineTag.Type.Release , PipelineTag.Type.Docker ] - , network = Network.Type.DevnetLegacy + , network = Network.Type.Legacy , debVersion = DebianVersions.DebVersion.Noble , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] diff --git a/buildkite/src/Jobs/Release/MinaArtifactNobleMainnetMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactNobleMainnet.dhall similarity index 96% rename from buildkite/src/Jobs/Release/MinaArtifactNobleMainnetMainnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactNobleMainnet.dhall index 74e269aad77b..9f91bffa0d6f 100644 --- a/buildkite/src/Jobs/Release/MinaArtifactNobleMainnetMainnet.dhall +++ b/buildkite/src/Jobs/Release/MinaArtifactNobleMainnet.dhall @@ -32,7 +32,6 @@ in Pipeline.build , PipelineTag.Type.Docker ] , debVersion = DebianVersions.DebVersion.Noble - , profile = Profiles.Type.Mainnet , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] } diff --git a/buildkite/src/Jobs/Release/MinaArtifactNobleMainnetLegacyMainnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactNobleMainnetLegacyMainnet.dhall deleted file mode 100644 index f6b165b44bac..000000000000 --- a/buildkite/src/Jobs/Release/MinaArtifactNobleMainnetLegacyMainnet.dhall +++ /dev/null @@ -1,32 +0,0 @@ -let ArtifactPipelines = ../../Command/MinaArtifact.dhall - -let Artifacts = ../../Constants/Artifacts.dhall - -let Pipeline = ../../Pipeline/Dsl.dhall - -let PipelineTag = ../../Pipeline/Tag.dhall - -let PipelineScope = ../../Pipeline/Scope.dhall - -let DebianVersions = ../../Constants/DebianVersions.dhall - -let Network = ../../Constants/Network.dhall - -let Profiles = ../../Constants/Profiles.dhall - -in Pipeline.build - ( ArtifactPipelines.onlyDebianPipeline - ArtifactPipelines.MinaBuildSpec::{ - , artifacts = [ Artifacts.Type.Daemon ] - , tags = - [ PipelineTag.Type.Long - , PipelineTag.Type.Release - , PipelineTag.Type.Docker - ] - , debVersion = DebianVersions.DebVersion.Noble - , network = Network.Type.MainnetLegacy - , profile = Profiles.Type.Mainnet - , scope = - [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] - } - ) diff --git a/buildkite/src/Jobs/Release/MinaArtifactOnlyDebianBullseyeBerkeleyDevnet.dhall b/buildkite/src/Jobs/Release/MinaArtifactOnlyDebianBullseyeBase.dhall similarity index 100% rename from buildkite/src/Jobs/Release/MinaArtifactOnlyDebianBullseyeBerkeleyDevnet.dhall rename to buildkite/src/Jobs/Release/MinaArtifactOnlyDebianBullseyeBase.dhall diff --git a/buildkite/src/Jobs/Test/ConnectToMainnet.dhall b/buildkite/src/Jobs/Test/ConnectToMainnet.dhall index 8bf4b68d6f37..7717f22fe630 100644 --- a/buildkite/src/Jobs/Test/ConnectToMainnet.dhall +++ b/buildkite/src/Jobs/Test/ConnectToMainnet.dhall @@ -24,7 +24,7 @@ let network = Network.Type.Mainnet let dependsOn = Dockers.dependsOn - Dockers.DepsSpec::{ network = network, profile = Profile.Type.Mainnet } + Dockers.DepsSpec::{ network = network, profile = Profile.Type.PublicNetwork } in Pipeline.build Pipeline.Config::{ diff --git a/buildkite/src/Jobs/Test/RosettaIntegrationTests.dhall b/buildkite/src/Jobs/Test/RosettaIntegrationTests.dhall index 9b5ee8a0842a..acab1bbfa687 100644 --- a/buildkite/src/Jobs/Test/RosettaIntegrationTests.dhall +++ b/buildkite/src/Jobs/Test/RosettaIntegrationTests.dhall @@ -20,7 +20,7 @@ let Network = ../../Constants/Network.dhall let RunWithPostgres = ../../Command/RunWithPostgres.dhall -let network = Network.Type.Berkeley +let network = Network.Type.Base let dirtyWhen = [ S.strictlyStart (S.contains "src") diff --git a/buildkite/src/Jobs/Test/RosettaMainnetConnect.dhall b/buildkite/src/Jobs/Test/RosettaMainnetConnect.dhall index 35e426b6bef7..917204f132fd 100644 --- a/buildkite/src/Jobs/Test/RosettaMainnetConnect.dhall +++ b/buildkite/src/Jobs/Test/RosettaMainnetConnect.dhall @@ -12,7 +12,6 @@ in Pipeline.build ( Connectivity.pipeline Connectivity.Spec::{ , network = Network.Type.Mainnet - , profile = Profile.Type.Mainnet , timeout = 2400 , scope = [ PipelineScope.Type.MainlineNightly, PipelineScope.Type.Release ] diff --git a/buildkite/src/Jobs/Test/SingleNodeTest.dhall b/buildkite/src/Jobs/Test/SingleNodeTest.dhall index 3e06b041e2ad..c29724679a23 100644 --- a/buildkite/src/Jobs/Test/SingleNodeTest.dhall +++ b/buildkite/src/Jobs/Test/SingleNodeTest.dhall @@ -22,8 +22,6 @@ let Size = ../../Command/Size.dhall let dependsOn = DebianVersions.dependsOn - DebianVersions.DepsSpec::{ profile = Profiles.Type.Lightnet } - # DebianVersions.dependsOn DebianVersions.DepsSpec::{ build_flag = BuildFlags.Type.Instrumented } let buildTestCmd diff --git a/dockerfiles/Dockerfile-delegation-stateless-verifier b/dockerfiles/Dockerfile-delegation-stateless-verifier index e591b590fda8..1d80f26f6a17 100644 --- a/dockerfiles/Dockerfile-delegation-stateless-verifier +++ b/dockerfiles/Dockerfile-delegation-stateless-verifier @@ -6,7 +6,7 @@ FROM gcr.io/o1labs-192920/mina-toolchain@sha256:c810338e2c3973f7c674d0607048725917ce2be23b949c4bc9760c01122f884b AS builder # Use --build-arg "DUNE_PROFILE=dev" to build a dev image or for CI -ARG DUNE_PROFILE=devnet +ARG DUNE_PROFILE=public_network # branch to checkout on first clone (this will be the only availible branch in the container) # can also be a tagged release diff --git a/dockerfiles/Dockerfile-mina-archive b/dockerfiles/Dockerfile-mina-archive index fd0bcba2c1a6..fdf2abf1207e 100644 --- a/dockerfiles/Dockerfile-mina-archive +++ b/dockerfiles/Dockerfile-mina-archive @@ -1,78 +1,14 @@ -ARG image=debian:bullseye-slim -FROM ${image} - # Run with `docker build --build-arg deb_version=` -ARG deb_version -ARG deb_codename=bullseye -ARG deb_release=unstable -ARG network=mainnet -ARG deb_repo="http://packages.o1test.net" -ARG deb_profile -ARG deb_suffix - -# if --build-arg deb_suffix is defined, add hypen at beginning. -ENV SUFFIX=${deb_suffix:+-${deb_suffix}} -# construct mina debian package name based on network and suffix. -# possible values: -# - mina-archive-mainnet -# - mina-archive-devnet-lightnet etc. -ENV MINA_DEB=mina-archive-${network}${SUFFIX} - -ENV DEBIAN_FRONTEND noninteractive -RUN echo "Building image with version $deb_codename $deb_release $deb_version" - -COPY scripts/archive-entrypoint.sh /entrypoint.sh -RUN chmod +x /entrypoint.sh - -# Install ca-certificates using HTTP -RUN apt-get update --quiet --yes \ - && apt-get install --quiet --yes --no-install-recommends ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -# Switch to HTTPS -RUN if [ -f /etc/apt/sources.list ]; then \ - sed -i 's/http:\/\//https:\/\//g' /etc/apt/sources.list; \ -else \ - sed -i 's/http:\/\//https:\/\//g' /etc/apt/sources.list.d/debian.sources; \ -fi - -# Dependencies -RUN apt-get update --quiet --yes \ - && apt-get upgrade --quiet --yes \ - && apt-get install --quiet --yes --no-install-recommends \ - procps \ - curl \ - jq \ - dumb-init \ - libgomp1 \ - libpq-dev \ - gnupg2 \ - apt-transport-https \ - dnsutils \ - tzdata \ - postgresql \ - postgresql-contrib \ - apt-utils \ - man \ - && rm -rf /var/lib/apt/lists/* - -RUN mkdir /healthcheck && curl https://raw.githubusercontent.com/MinaProtocol/mina/develop/dockerfiles/scripts/healthcheck-utilities.sh -o /healthcheck/utilities.sh - -# Install google-cloud-sdk for mina dumps handling -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list \ - && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - \ - && apt-get update --quiet --yes \ - && apt-get install --quiet --yes --no-install-recommends google-cloud-sdk kubectl google-cloud-sdk-gke-gcloud-auth-plugin \ - && rm -rf /var/lib/apt/lists/* - -ENV USE_GKE_GCLOUD_AUTH_PLUGIN=True +ARG deb_version=3.3.0-alpha1-georgeee-sigkind-mix-518b28c +# TODO: replace value above ^ with version of some release +# default version is needed to ensure Docker issues no warning +# InvalidDefaultArgInFrom +ARG deb_codename=bullseye +ARG docker_repo="gcr.io/o1labs-192920" +ARG deb_artifact=mina-archive -# archive-node package -RUN echo "deb [trusted=yes] ${deb_repo} $deb_codename $deb_release" > /etc/apt/sources.list.d/o1.list \ - && apt-get update --quiet --yes \ - && apt-get install --no-install-recommends --quiet --yes "${MINA_DEB}=$deb_version" \ - && rm -rf /var/lib/apt/lists/* +FROM ${docker_repo}/${deb_artifact}:${deb_version}-${deb_codename}-base -ENTRYPOINT ["/usr/bin/dumb-init", "/entrypoint.sh"] +ARG signature_kind=mainnet +ENV MINA_SIGNATURE_KIND=${signature_kind} \ No newline at end of file diff --git a/dockerfiles/Dockerfile-mina-archive-base b/dockerfiles/Dockerfile-mina-archive-base new file mode 100644 index 000000000000..58e3613b6bba --- /dev/null +++ b/dockerfiles/Dockerfile-mina-archive-base @@ -0,0 +1,80 @@ +ARG image=debian:bullseye-slim +FROM ${image} + +# Run with `docker build --build-arg deb_version=` +ARG deb_version +ARG deb_codename=bullseye +ARG deb_release=unstable +ARG network=mainnet +ARG signature_kind=mainnet +ARG deb_repo="http://packages.o1test.net" +ARG deb_profile +ARG deb_suffix + +# if --build-arg deb_suffix is defined, add hypen at beginning. +ENV SUFFIX=${deb_suffix:+-${deb_suffix}} +# construct mina debian package name based on network and suffix. +# possible values: +# - mina-archive +# - mina-archive-lightnet etc. +ENV MINA_DEB=mina-archive${SUFFIX} +ENV MINA_SIGNATURE_KIND=${signature_kind} + +ENV DEBIAN_FRONTEND noninteractive +RUN echo "Building image with version $deb_codename $deb_release $deb_version" + +COPY scripts/archive-entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +# Install ca-certificates using HTTP +RUN apt-get update --quiet --yes \ + && apt-get install --quiet --yes --no-install-recommends ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Switch to HTTPS +RUN if [ -f /etc/apt/sources.list ]; then \ + sed -i 's/http:\/\//https:\/\//g' /etc/apt/sources.list; \ +else \ + sed -i 's/http:\/\//https:\/\//g' /etc/apt/sources.list.d/debian.sources; \ +fi + +# Dependencies +RUN apt-get update --quiet --yes \ + && apt-get upgrade --quiet --yes \ + && apt-get install --quiet --yes --no-install-recommends \ + procps \ + curl \ + jq \ + dumb-init \ + libgomp1 \ + libpq-dev \ + gnupg2 \ + apt-transport-https \ + dnsutils \ + tzdata \ + postgresql \ + postgresql-contrib \ + apt-utils \ + man \ + && rm -rf /var/lib/apt/lists/* + +RUN mkdir /healthcheck && curl https://raw.githubusercontent.com/MinaProtocol/mina/develop/dockerfiles/scripts/healthcheck-utilities.sh -o /healthcheck/utilities.sh + +# Install google-cloud-sdk for mina dumps handling +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list \ + && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - \ + && apt-get update --quiet --yes \ + && apt-get install --quiet --yes --no-install-recommends google-cloud-sdk kubectl google-cloud-sdk-gke-gcloud-auth-plugin \ + && rm -rf /var/lib/apt/lists/* + +ENV USE_GKE_GCLOUD_AUTH_PLUGIN=True + + +# archive-node package +RUN echo "deb [trusted=yes] ${deb_repo} $deb_codename $deb_release" > /etc/apt/sources.list.d/o1.list \ + && apt-get update --quiet --yes \ + && apt-get install --no-install-recommends --quiet --yes "${MINA_DEB}=$deb_version" \ + && rm -rf /var/lib/apt/lists/* + +ENTRYPOINT ["/usr/bin/dumb-init", "/entrypoint.sh"] diff --git a/dockerfiles/Dockerfile-mina-daemon b/dockerfiles/Dockerfile-mina-daemon index d499fd03077b..9d15e025f2cd 100644 --- a/dockerfiles/Dockerfile-mina-daemon +++ b/dockerfiles/Dockerfile-mina-daemon @@ -1,13 +1,27 @@ -ARG image=debian:bullseye-slim -FROM ${image} # Run with `docker build --build-arg deb_version=` -ARG deb_version + +ARG deb_version=3.3.0-alpha1-georgeee-sigkind-mix-518b28c +# TODO: replace value above ^ with version of some release +# default version is needed to ensure Docker issues no warning +# InvalidDefaultArgInFrom +ARG deb_codename=bullseye +ARG docker_repo="gcr.io/o1labs-192920" +ARG deb_artifact=mina-daemon + +FROM ${docker_repo}/${deb_artifact}:${deb_version}-${deb_codename}-base + +# Run with `docker build --build-arg deb_version=` ARG deb_release=unstable ARG deb_codename=bullseye ARG network=mainnet +ARG signature_kind=mainnet ARG deb_repo="http://packages.o1test.net" ARG deb_profile ARG deb_suffix +ARG deb_version +ARG network +ARG signature_kind +ARG deb_suffix # if --build-arg deb_suffix is defined, add hypen at beginning. ENV SUFFIX=${deb_suffix:+-${deb_suffix}} @@ -16,58 +30,9 @@ ENV SUFFIX=${deb_suffix:+-${deb_suffix}} # - mina-devnet # - mina-devnet-lightnet etc. ENV MINA_DEB=mina-${network}${SUFFIX} +ENV MINA_SIGNATURE_KIND=${signature_kind} -ENV DEBIAN_FRONTEND noninteractive - -# We do not install the below platform-specific dependencies, -# and instead assume that apt will install the proper deps based on the package definition. -# The packages are noted here just for clarity/documentation. -# Bullseye/Focal-only Deps: -# libffi7 -# libprocps8 -# libjemalloc2 -# libssl - -# Install ca-certificates using HTTP -RUN apt-get update --quiet --yes \ - && apt-get install --quiet --yes --no-install-recommends ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -# Switch to HTTPS -RUN if [ -f /etc/apt/sources.list ]; then \ - sed -i 's/http:\/\//https:\/\//g' /etc/apt/sources.list; \ -else \ - sed -i 's/http:\/\//https:\/\//g' /etc/apt/sources.list.d/debian.sources; \ -fi - -# Dependencies -RUN apt-get update --quiet --yes \ - && apt-get upgrade --quiet --yes \ - && apt-get install --quiet --yes --no-install-recommends \ - apt-transport-https \ - curl \ - dnsutils \ - dumb-init \ - gettext \ - gnupg2 \ - jq \ - libgmp10 \ - libgomp1 \ - libpq-dev \ - procps \ - python3 \ - tzdata \ - && rm -rf /var/lib/apt/lists/* - -# Install google-cloud-sdk for GCLOUD_UPLOAD feature -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list \ - && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - \ - && apt-get update --quiet --yes \ - && apt-get install --quiet --yes --no-install-recommends google-cloud-sdk=462.0.1-0 kubectl=1:462.0.1-0 google-cloud-sdk-gke-gcloud-auth-plugin=462.0.1-0 \ - && rm -rf /var/lib/apt/lists/* - -ENV USE_GKE_GCLOUD_AUTH_PLUGIN=True +ENV DEBIAN_FRONTEND=noninteractive # Mina daemon package # jemalloc is also installed automatically here to match the package dependencies for this $deb_codename @@ -75,37 +40,4 @@ RUN echo "Building image with version $deb_version from repo $deb_release $deb_c && echo "deb [trusted=yes] ${deb_repo} $deb_codename $deb_release" > /etc/apt/sources.list.d/o1.list \ && apt-get update --quiet --yes \ && apt-get install --no-install-recommends --quiet --yes --allow-downgrades "${MINA_DEB}=$deb_version" \ - && apt-get install --no-install-recommends --quiet --yes --allow-downgrades "mina-create-legacy-genesis=3.2.0-f77c8c9" \ - && rm -rf /var/lib/apt/lists/* - - -# Move to a non-root UID in the future (specifically 50000, as it is memorable and safely within the bounds of most systems) -# for now stick to root for compatibility -ARG UID=0 - -# TODO: flesh out this feature + test -# Create a mina user to execute the daemon with -RUN mkdir /home/mina \ - && adduser --uid 50000 --disabled-password --gecos '' mina \ - && passwd -l mina \ - && chown -R mina:mina /home/mina - -WORKDIR /home/mina -USER mina - -## Reset workdir, USER, and ${UID} for root-owned version -WORKDIR /root/ -USER 0 - -COPY --chown=${UID} scripts/healthcheck-utilities.sh /healthcheck/utilities.sh -COPY --chown=${UID} scripts/cron_job_dump_ledger.sh /cron_job_dump_ledger.sh -COPY --chown=${UID} scripts/daemon-entrypoint.sh /entrypoint.sh -# Solve this by marking scripts executable in git -COPY --chown=${UID} ./auxiliary_entrypoints /entrypoint.d - -COPY --chown=${UID} puppeteer-context/* / -RUN chmod +x /mina_daemon_puppeteer.py /find_puppeteer.sh /start.sh /stop.sh - -ENV MINA_TIME_OFFSET 0 - -ENTRYPOINT ["/usr/bin/dumb-init", "/entrypoint.sh"] + && rm -rf /var/lib/apt/lists/* \ No newline at end of file diff --git a/dockerfiles/Dockerfile-mina-daemon-base b/dockerfiles/Dockerfile-mina-daemon-base new file mode 100644 index 000000000000..ee18d188a7ba --- /dev/null +++ b/dockerfiles/Dockerfile-mina-daemon-base @@ -0,0 +1,108 @@ +ARG image=debian:bullseye-slim +FROM ${image} +# Run with `docker build --build-arg deb_version=` +ARG deb_version +ARG deb_release=unstable +ARG deb_codename=bullseye +ARG deb_repo="http://packages.o1test.net" +ARG deb_profile +ARG deb_suffix + +# if --build-arg deb_suffix is defined, add hypen at beginning. +ENV SUFFIX=${deb_suffix:+-${deb_suffix}} +# construct mina debian package name based on network and suffix. +# possible values: +# - mina-devnet +# - mina-devnet-lightnet etc. +ENV MINA_DEB=mina-base${SUFFIX} + +ENV DEBIAN_FRONTEND noninteractive + +# We do not install the below platform-specific dependencies, +# and instead assume that apt will install the proper deps based on the package definition. +# The packages are noted here just for clarity/documentation. +# Bullseye/Focal-only Deps: +# libffi7 +# libprocps8 +# libjemalloc2 +# libssl + +# Install ca-certificates using HTTP +RUN apt-get update --quiet --yes \ + && apt-get install --quiet --yes --no-install-recommends ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Switch to HTTPS +RUN if [ -f /etc/apt/sources.list ]; then \ + sed -i 's/http:\/\//https:\/\//g' /etc/apt/sources.list; \ +else \ + sed -i 's/http:\/\//https:\/\//g' /etc/apt/sources.list.d/debian.sources; \ +fi + +# Dependencies +RUN apt-get update --quiet --yes \ + && apt-get upgrade --quiet --yes \ + && apt-get install --quiet --yes --no-install-recommends \ + apt-transport-https \ + curl \ + dnsutils \ + dumb-init \ + gettext \ + gnupg2 \ + jq \ + libgmp10 \ + libgomp1 \ + libpq-dev \ + procps \ + python3 \ + tzdata \ + && rm -rf /var/lib/apt/lists/* + +# Install google-cloud-sdk for GCLOUD_UPLOAD feature +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list \ + && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - \ + && apt-get update --quiet --yes \ + && apt-get install --quiet --yes --no-install-recommends google-cloud-sdk=462.0.1-0 kubectl=1:462.0.1-0 google-cloud-sdk-gke-gcloud-auth-plugin=462.0.1-0 \ + && rm -rf /var/lib/apt/lists/* + +ENV USE_GKE_GCLOUD_AUTH_PLUGIN=True + +# Mina daemon package +# jemalloc is also installed automatically here to match the package dependencies for this $deb_codename +RUN echo "Building image with version $deb_version from repo $deb_release $deb_codename" \ + && echo "deb [trusted=yes] ${deb_repo} $deb_codename $deb_release" > /etc/apt/sources.list.d/o1.list \ + && apt-get update --quiet --yes \ + && apt-get install --no-install-recommends --quiet --yes --allow-downgrades "${MINA_DEB}=$deb_version" \ + && rm -rf /var/lib/apt/lists/* + +# Move to a non-root UID in the future (specifically 50000, as it is memorable and safely within the bounds of most systems) +# for now stick to root for compatibility +ARG UID=0 + +# TODO: flesh out this feature + test +# Create a mina user to execute the daemon with +RUN mkdir /home/mina \ + && adduser --uid 50000 --disabled-password --gecos '' mina \ + && passwd -l mina \ + && chown -R mina:mina /home/mina + +WORKDIR /home/mina +USER mina + +## Reset workdir, USER, and ${UID} for root-owned version +WORKDIR /root/ +USER 0 + +COPY --chown=${UID} scripts/healthcheck-utilities.sh /healthcheck/utilities.sh +COPY --chown=${UID} scripts/cron_job_dump_ledger.sh /cron_job_dump_ledger.sh +COPY --chown=${UID} scripts/daemon-entrypoint.sh /entrypoint.sh +# Solve this by marking scripts executable in git +COPY --chown=${UID} ./auxiliary_entrypoints /entrypoint.d + +COPY --chown=${UID} puppeteer-context/* / +RUN chmod +x /mina_daemon_puppeteer.py /find_puppeteer.sh /start.sh /stop.sh + +ENV MINA_TIME_OFFSET 0 + +ENTRYPOINT ["/usr/bin/dumb-init", "/entrypoint.sh"] diff --git a/dockerfiles/Dockerfile-mina-daemon-hardfork b/dockerfiles/Dockerfile-mina-daemon-hardfork index dafc828d6be2..3cba5bc3f044 100644 --- a/dockerfiles/Dockerfile-mina-daemon-hardfork +++ b/dockerfiles/Dockerfile-mina-daemon-hardfork @@ -1,6 +1,7 @@ ARG deb_version=latest ARG deb_codename=bullseye ARG network=mainnet +ARG signature_kind=mainnet ARG docker_repo="gcr.io/o1labs-192920" ARG deb_release=unstable ARG deb_legacy_version @@ -23,7 +24,7 @@ RUN echo "Installing legacy package with version $deb_version from repo $deb_rel && echo "deb [trusted=yes] ${deb_repo} ${deb_codename} ${deb_release}" > /etc/apt/sources.list.d/o1.list \ && cat /etc/apt/sources.list.d/o1.list \ && apt-get update --quiet --yes \ - && apt-get install --quiet --yes --no-install-recommends --allow-downgrades "mina-${network}-legacy=$deb_legacy_version" \ + && apt-get install --quiet --yes --no-install-recommends --allow-downgrades "mina-legacy=$deb_legacy_version" \ && rm -rf /var/lib/apt/lists/* ## Reset workdir, USER, and ${UID} for root-owned version diff --git a/dockerfiles/Dockerfile-mina-rosetta b/dockerfiles/Dockerfile-mina-rosetta index 206ce671a494..cfa776f9fff1 100644 --- a/dockerfiles/Dockerfile-mina-rosetta +++ b/dockerfiles/Dockerfile-mina-rosetta @@ -4,6 +4,7 @@ ARG deb_codename=focal ARG deb_version ARG deb_release=unstable ARG network=mainnet +ARG signature_kind=mainnet ARG deb_repo="http://packages.o1test.net" ARG TARGETARCH @@ -29,9 +30,9 @@ ENV SUFFIX=${deb_suffix:+-${deb_suffix}} # - mina-devnet # - mina-devnet-lightnet etc. ENV MINA_DEB=mina-${network}${SUFFIX} -ENV MINA_ARCHIVE_DEB=mina-archive-${network} -ENV MINA_ROSETTA_DEB=mina-rosetta-${network} - +ENV MINA_ARCHIVE_DEB=mina-archive${SUFFIX} +ENV MINA_ROSETTA_DEB=mina-rosetta${SUFFIX} +ENV MINA_SIGNATURE_KIND=${signature_kind} # We do not install the below platform-specific dependencies, # and instead assume that apt will install the proper deps based on the package definition. diff --git a/dockerfiles/Dockerfile-mina-test-suite b/dockerfiles/Dockerfile-mina-test-suite index 5d999e81c1f9..708decbd378d 100644 --- a/dockerfiles/Dockerfile-mina-test-suite +++ b/dockerfiles/Dockerfile-mina-test-suite @@ -5,10 +5,12 @@ ARG deb_version ARG deb_release=unstable ARG deb_repo="http://packages.o1test.net" ARG network=mainnet +ARG signature_kind=mainnet ARG psql_version=13 ENV DEBIAN_FRONTEND noninteractive +ENV MINA_SIGNATURE_KIND=${signature_kind} # We do not install the below platform-specific dependencies, # and instead assume that apt will install the proper deps based on the package definition. @@ -80,7 +82,7 @@ RUN locale-gen en_US.UTF-8 RUN echo "Building image with version $deb_version from repo $deb_release $deb_codename " \ && echo "deb [trusted=yes] ${deb_repo} $deb_codename $deb_release" > /etc/apt/sources.list.d/o1.list \ && apt-get update --quiet --yes \ - && apt-get install --no-install-recommends --quiet --yes --allow-downgrades -o Dpkg::Options::="--force-overwrite" "mina-test-suite=$deb_version" "mina-$network-instrumented=$deb_version" "mina-archive-$network-instrumented=$deb_version" \ + && apt-get install --no-install-recommends --quiet --yes --allow-downgrades -o Dpkg::Options::="--force-overwrite" "mina-test-suite-instrumented=$deb_version" "mina-$network-instrumented=$deb_version" "mina-archive-instrumented=$deb_version" \ && rm -rf /var/lib/apt/lists/* ENTRYPOINT ["sleep","infinity"] \ No newline at end of file diff --git a/dockerfiles/Dockerfile-txn-burst b/dockerfiles/Dockerfile-txn-burst index 2af204d07302..c10bf206565a 100644 --- a/dockerfiles/Dockerfile-txn-burst +++ b/dockerfiles/Dockerfile-txn-burst @@ -11,9 +11,11 @@ ARG deb_version ARG deb_codename=bullseye ARG deb_release=unstable ARG network=mainnet +ARG signature_kind=mainnet ARG deb_repo="http://packages.o1test.net" ENV DEBIAN_FRONTEND noninteractive +ENV MINA_SIGNATURE_KIND=${signature_kind} RUN echo "Building image with version $deb_codename $deb_release $deb_version" # Install ca-certificates using HTTP diff --git a/dockerfiles/Dockerfile-zkapp-test-transaction b/dockerfiles/Dockerfile-zkapp-test-transaction index 3f45ceccd9bc..1e6b56f37986 100644 --- a/dockerfiles/Dockerfile-zkapp-test-transaction +++ b/dockerfiles/Dockerfile-zkapp-test-transaction @@ -44,3 +44,5 @@ RUN echo "deb [trusted=yes] ${deb_repo} $deb_codename $deb_release" > /etc/apt/s || sleep 10s && apt-get -y update \ && apt-get install -y --no-install-recommends "mina-zkapp-test-transaction=$deb_version" \ && rm -rf /var/lib/apt/lists/* + +ENV MINA_SIGNATURE_KIND=testnet \ No newline at end of file diff --git a/flake.nix b/flake.nix index 747cecc170d5..c0bd131657d0 100644 --- a/flake.nix +++ b/flake.nix @@ -335,7 +335,7 @@ # Main user-facing binaries. packages = (rec { inherit (ocamlPackages) - mina devnet mainnet mina_tests mina-ocaml-format mina_client_sdk + mina mina_tests mina-ocaml-format mina_client_sdk test_executive with-instrumentation; # Granular nix inherit (ocamlPackages) diff --git a/genesis_ledgers/berkeley.json b/genesis_ledgers/berkeley.json index 3f2bd6591498..a4c9f522e2f3 100644 --- a/genesis_ledgers/berkeley.json +++ b/genesis_ledgers/berkeley.json @@ -2,6 +2,9 @@ "genesis": { "genesis_state_timestamp": "2024-02-02T14:01:01Z" }, + "proof": { + "signature_kind": "testnet" + }, "ledger": { "name": "berkeley", "accounts": [ diff --git a/genesis_ledgers/daemon.json.template b/genesis_ledgers/daemon.json.template index 69c3b00180b8..0d99c2196c05 100644 --- a/genesis_ledgers/daemon.json.template +++ b/genesis_ledgers/daemon.json.template @@ -1 +1 @@ -{"genesis":{"genesis_state_timestamp":"${GENESIS_STATE_TIMESTAMP}"},"ledger":{"name": "rosetta-demo","accounts":[{"pk":"${PK}","balance":"66000","sk":null,"delegate":null}]}} +{"genesis":{"genesis_state_timestamp":"${GENESIS_STATE_TIMESTAMP}"},"proof":{"signature_kind":"testnet"},"ledger":{"name": "rosetta-demo","accounts":[{"pk":"${PK}","balance":"66000","sk":null,"delegate":null}]}} diff --git a/genesis_ledgers/devnet.json b/genesis_ledgers/devnet.json index 7585f586c802..5bca812dcf97 100644 --- a/genesis_ledgers/devnet.json +++ b/genesis_ledgers/devnet.json @@ -7,7 +7,8 @@ "state_hash": "3NKSvjaGSKiQuAt8BP1b1VCpLbJc9RcEFjYCaBYsJJFdrtd6tpaV", "blockchain_length": 296371, "global_slot_since_genesis": 445860 - } + }, + "signature_kind": "testnet" }, "ledger": { "add_genesis_winner": false, diff --git a/genesis_ledgers/devnet2.json b/genesis_ledgers/devnet2.json index a1dd4f5b7866..60758485ffb3 100644 --- a/genesis_ledgers/devnet2.json +++ b/genesis_ledgers/devnet2.json @@ -2,6 +2,9 @@ "genesis": { "genesis_state_timestamp": "2021-03-09T05:09:07Z" }, + "proof": { + "signature_kind": "testnet" + }, "ledger": { "name": "devnet", "accounts": [ diff --git a/genesis_ledgers/mainnet.json b/genesis_ledgers/mainnet.json index befbba6ed510..7f165fb974e9 100644 --- a/genesis_ledgers/mainnet.json +++ b/genesis_ledgers/mainnet.json @@ -7,7 +7,8 @@ "state_hash": "3NLRTfY4kZyJtvaP4dFenDcxfoMfT3uEpkWS913KkeXLtziyVd15", "blockchain_length": 359604, "global_slot_since_genesis": 564480 - } + }, + "signature_kind": "mainnet" }, "ledger": { "add_genesis_winner": false, diff --git a/genesis_ledgers/phase_three/config.json b/genesis_ledgers/phase_three/config.json index 1cebe0f22c8c..5726fc7723b7 100644 --- a/genesis_ledgers/phase_three/config.json +++ b/genesis_ledgers/phase_three/config.json @@ -2,6 +2,9 @@ "genesis": { "genesis_state_timestamp": "2020-12-16T12:00:00Z" }, + "proof": { + "signature_kind": "testnet" + }, "ledger": { "name": "testnet_postake" } diff --git a/genesis_ledgers/test-snapps.json b/genesis_ledgers/test-snapps.json index 902beab7666e..81b65dc3f807 100644 --- a/genesis_ledgers/test-snapps.json +++ b/genesis_ledgers/test-snapps.json @@ -2,6 +2,9 @@ "genesis": { "genesis_state_timestamp": "2022-02-18T00:33:07Z" }, + "proof": { + "signature_kind": "testnet" + }, "ledger": { "name": "test-snapps", "accounts": [ diff --git a/nix/ocaml.nix b/nix/ocaml.nix index af34b2a734ee..d3e1c80c75f4 100644 --- a/nix/ocaml.nix +++ b/nix/ocaml.nix @@ -325,7 +325,7 @@ let MINA_COMMIT_DATE = ""; MINA_BRANCH = ""; - DUNE_PROFILE = "dev"; + DUNE_PROFILE = "public_network"; NIX_LDFLAGS = optionalString (pkgs.stdenv.isDarwin && pkgs.stdenv.isAarch64) @@ -373,11 +373,7 @@ let src/app/logproc/logproc.exe \ src/app/cli/src/mina.exe \ src/app/batch_txn_tool/batch_txn_tool.exe \ - src/app/cli/src/mina_testnet_signatures.exe \ - src/app/cli/src/mina_mainnet_signatures.exe \ src/app/rosetta/rosetta.exe \ - src/app/rosetta/rosetta_testnet_signatures.exe \ - src/app/rosetta/rosetta_mainnet_signatures.exe \ src/app/generate_keypair/generate_keypair.exe \ src/app/archive/archive.exe \ src/app/archive_blocks/archive_blocks.exe \ @@ -395,15 +391,13 @@ let "out" "archive" "generate_keypair" - "mainnet" - "testnet" "genesis" "sample" "batch_txn_tool" ]; installPhase = '' - mkdir -p $out/bin $archive/bin $sample/share/mina $out/share/doc $generate_keypair/bin $mainnet/bin $testnet/bin $genesis/bin $genesis/var/lib/coda $batch_txn_tool/bin + mkdir -p $out/bin $archive/bin $sample/share/mina $out/share/doc $generate_keypair/bin $genesis/bin $genesis/var/lib/coda $batch_txn_tool/bin # TODO uncomment when genesis is generated above # mv _build/coda_cache_dir/genesis* $genesis/var/lib/coda pushd _build/default @@ -413,10 +407,6 @@ let cp src/app/batch_txn_tool/batch_txn_tool.exe $batch_txn_tool/bin/batch_txn_tool cp src/app/runtime_genesis_ledger/runtime_genesis_ledger.exe $genesis/bin/runtime_genesis_ledger cp src/app/runtime_genesis_ledger/runtime_genesis_ledger.exe $out/bin/runtime_genesis_ledger - cp src/app/cli/src/mina_mainnet_signatures.exe $mainnet/bin/mina_mainnet_signatures - cp src/app/rosetta/rosetta_mainnet_signatures.exe $mainnet/bin/rosetta_mainnet_signatures - cp src/app/cli/src/mina_testnet_signatures.exe $testnet/bin/mina_testnet_signatures - cp src/app/rosetta/rosetta_testnet_signatures.exe $testnet/bin/rosetta_testnet_signatures cp src/app/generate_keypair/generate_keypair.exe $generate_keypair/bin/generate_keypair cp src/app/archive/archive.exe $archive/bin/mina-archive cp src/app/archive_blocks/archive_blocks.exe $archive/bin/mina-archive-blocks @@ -425,7 +415,7 @@ let cp -R _doc/_html $out/share/doc/html # cp src/lib/mina_base/sample_keypairs.json $sample/share/mina popd - remove-references-to -t $(dirname $(dirname $(command -v ocaml))) {$out/bin/*,$mainnet/bin/*,$testnet/bin*,$genesis/bin/*,$generate_keypair/bin/*} + remove-references-to -t $(dirname $(dirname $(command -v ocaml))) {$out/bin/*,$genesis/bin/*,$generate_keypair/bin/*} ''; shellHook = "export MINA_LIBP2P_HELPER_PATH=${pkgs.libp2p_helper}/bin/mina-libp2p_helper"; @@ -452,24 +442,6 @@ let with-instrumentation = wrapMina self.with-instrumentation-dev { }; - mainnet-pkg = self.mina-dev.overrideAttrs (s: { - version = "mainnet"; - DUNE_PROFILE = "mainnet"; - # For compatibility with Docker build - MINA_ROCKSDB = "${pkgs.rocksdb-mina}/lib/librocksdb.a"; - }); - - mainnet = wrapMina self.mainnet-pkg { }; - - devnet-pkg = self.mina-dev.overrideAttrs (s: { - version = "devnet"; - DUNE_PROFILE = "devnet"; - # For compatibility with Docker build - MINA_ROCKSDB = "${pkgs.rocksdb-mina}/lib/librocksdb.a"; - }); - - devnet = wrapMina self.devnet-pkg { }; - # Unit tests mina_tests = runMinaCheck { name = "tests"; diff --git a/scripts/debian/build.sh b/scripts/debian/build.sh index dc84db42ca28..a795aecaca76 100755 --- a/scripts/debian/build.sh +++ b/scripts/debian/build.sh @@ -35,20 +35,15 @@ if [ $# -eq 0 ] then echo "No arguments supplied. Building all known debian packages" build_logproc_deb - build_archive_berkeley_deb - build_archive_devnet_deb - build_archive_mainnet_deb + build_archive_deb build_batch_txn_deb - build_daemon_berkeley_deb + build_daemon_base_deb build_daemon_mainnet_deb build_daemon_devnet_deb - build_rosetta_berkeley_deb - build_rosetta_mainnet_deb - build_rosetta_devnet_deb + build_rosetta_deb build_test_executive_deb build_functional_test_suite_deb build_zkapp_test_transaction_deb - else for i in "$@"; do if [[ $(type -t "build_${i}_deb") == function ]] diff --git a/scripts/debian/builder-helpers.sh b/scripts/debian/builder-helpers.sh index 3e26ac7549fa..758be8a62c2e 100755 --- a/scripts/debian/builder-helpers.sh +++ b/scripts/debian/builder-helpers.sh @@ -22,66 +22,55 @@ GITHASH_CONFIG=$(git rev-parse --short=8 --verify HEAD) SUGGESTED_DEPS="jq, curl, wget" -TEST_EXECUTIVE_DEPS=", mina-logproc, python3, docker-ce " +# Add suffix to debian to distinguish different profiles and instrumented packages +DEB_SUFFIX="" +if [[ "${DUNE_PROFILE}" != "public_network" ]] && [[ -n "${DUNE_PROFILE}" ]]; then + DEB_SUFFIX="-${DUNE_PROFILE}" +fi + +if [[ -v DUNE_INSTRUMENT_WITH ]]; then + DEB_SUFFIX="${DEB_SUFFIX}-instrumented" +fi + +TEST_EXECUTIVE_DEPS=", mina-logproc${DEB_SUFFIX}, python3, docker-ce " case "${MINA_DEB_CODENAME}" in noble) SHARED_DEPS="libssl3t64, libgmp10, libgomp1, tzdata, rocksdb-tools, liblmdb0" - DAEMON_DEPS=", libffi8, libjemalloc2, libpq-dev, libproc2-0, mina-logproc" + DAEMON_DEPS=", libffi8, libjemalloc2, libpq-dev, libproc2-0" ARCHIVE_DEPS="libssl3t64, libgomp1, libpq-dev, libjemalloc2" ;; jammy) SHARED_DEPS="libssl3, libgmp10, libgomp1, tzdata, rocksdb-tools, liblmdb0" - DAEMON_DEPS=", libffi8, libjemalloc2, libpq-dev, libprocps8, mina-logproc" + DAEMON_DEPS=", libffi8, libjemalloc2, libpq-dev, libprocps8" ARCHIVE_DEPS="libssl3, libgomp1, libpq-dev, libjemalloc2" ;; bookworm) SHARED_DEPS="libssl3, libgmp10, libgomp1, tzdata, rocksdb-tools, liblmdb0" - DAEMON_DEPS=", libffi8, libjemalloc2, libpq-dev, libproc2-0, mina-logproc" + DAEMON_DEPS=", libffi8, libjemalloc2, libpq-dev, libproc2-0" ARCHIVE_DEPS="libssl3, libgomp1, libpq-dev, libjemalloc2" ;; bullseye|focal) SHARED_DEPS="libssl1.1, libgmp10, libgomp1, tzdata, rocksdb-tools, liblmdb0" - DAEMON_DEPS=", libffi7, libjemalloc2, libpq-dev, libprocps8, mina-logproc" + DAEMON_DEPS=", libffi7, libjemalloc2, libpq-dev, libprocps8" ARCHIVE_DEPS="libssl1.1, libgomp1, libpq-dev, libjemalloc2" ;; *) echo "Unknown Debian codename provided: ${MINA_DEB_CODENAME}"; exit 1 ;; esac - -MINA_DEB_NAME="mina-berkeley" -DUNE_PROFILE="${DUNE_PROFILE}" -DEB_SUFFIX="" - -# Add suffix to debian to distinguish different profiles -# (mainnet/devnet/lightnet) -case "${DUNE_PROFILE}" in - lightnet) - # use dune profile as suffix but replace underscore to dashes so deb - # builder won't complain - _SUFFIX=${DUNE_PROFILE//_/-} - DEB_SUFFIX="${_SUFFIX}" - MINA_DEB_NAME="${MINA_DEB_NAME}-${DEB_SUFFIX}" - ;; -esac - - -#Add suffix to debian to distinguish instrumented packages -if [[ -v DUNE_INSTRUMENT_WITH ]]; then - INSTRUMENTED_SUFFIX=instrumented - MINA_DEB_NAME="${MINA_DEB_NAME}-${INSTRUMENTED_SUFFIX}" - DEB_SUFFIX="${DEB_SUFFIX}-${INSTRUMENTED_SUFFIX}" -fi +DAEMON_INTERNAL_DEPS=", mina-base${DEB_SUFFIX}, mina-logproc${DEB_SUFFIX}" BUILDDIR="deb_build" # Function to ease creation of Debian package control files create_control_file() { + local suffixed_name="${1}${DEB_SUFFIX}" + echo "------------------------------------------------------------" echo "create_control_file inputs:" - echo "Package Name: ${1}" + echo "Package Name: ${suffixed_name}" echo "Dependencies: ${2}" echo "Description: ${3}" @@ -94,7 +83,7 @@ create_control_file() { # Create the control file itself cat << EOF > "${BUILDDIR}/DEBIAN/control" -Package: ${1} +Package: ${suffixed_name} Version: ${MINA_DEB_VERSION} License: Apache-2.0 Origin: MinaProtocol @@ -122,10 +111,11 @@ EOF # Function to ease package build build_deb() { + local suffixed_name="${1}${DEB_SUFFIX}" echo "------------------------------------------------------------" echo "build_deb inputs:" - echo "Package Name: ${1}" + echo "Package Name: ${suffixed_name}" # echo contents of deb echo "------------------------------------------------------------" @@ -139,66 +129,36 @@ build_deb() { # Docker image, we're examining those packages in buildkite's agent, where # `zstd` might not be available. fakeroot dpkg-deb -Zgzip --build "${BUILDDIR}" \ - "${1}"_"${MINA_DEB_VERSION}"_"${ARCHITECTURE}".deb + "${suffixed_name}"_"${MINA_DEB_VERSION}"_"${ARCHITECTURE}".deb echo "build_deb outputs:" - ls -lh "${1}"_*.deb + ls -lh "${suffixed_name}"_*.deb echo "deleting BUILDDIR ${BUILDDIR}" rm -rf "${BUILDDIR}" - echo "--- Built ${1}_${MINA_DEB_VERSION}_${ARCHITECTURE}.deb" + echo "--- Built ${suffixed_name}_${MINA_DEB_VERSION}_${ARCHITECTURE}.deb" } # Function to DRY copying config files into daemon packages -copy_common_daemon_configs() { +copy_daemon_configs() { echo "------------------------------------------------------------" - echo "copy_common_daemon_configs inputs:" + echo "copy_daemon_configs inputs:" echo "Network Name: ${1} (like mainnet, devnet, berkeley)" - echo "Signature Type: ${2} (mainnet or testnet)" - echo "Seed List URL path: ${3} (like seed-lists/berkeley_seeds.txt)" - - # Copy shared binaries - cp ../src/app/libp2p_helper/result/bin/libp2p_helper \ - "${BUILDDIR}/usr/local/bin/coda-libp2p_helper" - cp ./default/src/app/runtime_genesis_ledger/runtime_genesis_ledger.exe \ - "${BUILDDIR}/usr/local/bin/mina-create-genesis" - cp ./default/src/app/generate_keypair/generate_keypair.exe \ - "${BUILDDIR}/usr/local/bin/mina-generate-keypair" - cp ./default/src/app/validate_keypair/validate_keypair.exe \ - "${BUILDDIR}/usr/local/bin/mina-validate-keypair" - cp ./default/src/lib/snark_worker/standalone/run_snark_worker.exe \ - "${BUILDDIR}/usr/local/bin/mina-standalone-snark-worker" - # Copy signature-based Binaries (based on signature type $2 passed into the \ - # function) - cp ./default/src/app/cli/src/mina_"${2}"_signatures.exe \ - "${BUILDDIR}/usr/local/bin/mina" - - # Copy over Build Configs (based on $2) - mkdir -p "${BUILDDIR}/etc/coda/build_config" - # Use parameter expansion to either return "mainnet.mlh" or "devnet.mlh" - cp "../src/config/${2//test/dev}.mlh" \ - "${BUILDDIR}/etc/coda/build_config/BUILD.mlh" - rsync -Huav ../src/config/* "${BUILDDIR}/etc/coda/build_config/." + echo "Seed List URL path: ${2} (like seed-lists/berkeley_seeds.txt)" mkdir -p "${BUILDDIR}/var/lib/coda" - # Include all useful genesis ledgers - cp ../genesis_ledgers/mainnet.json "${BUILDDIR}/var/lib/coda/mainnet.json" - cp ../genesis_ledgers/devnet.json "${BUILDDIR}/var/lib/coda/devnet.json" - cp ../genesis_ledgers/berkeley.json "${BUILDDIR}/var/lib/coda/berkeley.json" # Set the default configuration based on Network name ($1) cp ../genesis_ledgers/"${1}".json \ "${BUILDDIR}/var/lib/coda/config_${GITHASH_CONFIG}.json" - cp ../scripts/hardfork/create_runtime_config.sh \ - "${BUILDDIR}/usr/local/bin/mina-hf-create-runtime-config" - cp ../scripts/hardfork/mina-verify-packaged-fork-config \ - "${BUILDDIR}/usr/local/bin/mina-verify-packaged-fork-config" # Update the mina.service with a new default PEERS_URL based on Seed List \ - # URL $3 + # URL $2 mkdir -p "${BUILDDIR}/usr/lib/systemd/user/" - sed "s%PEERS_LIST_URL_PLACEHOLDER%https://storage.googleapis.com/${3}%" \ + sed "s%PEERS_LIST_URL_PLACEHOLDER%https://storage.googleapis.com/${2}%" \ ../scripts/mina.service > "${BUILDDIR}/usr/lib/systemd/user/mina.service" + # TODO I think the code below isn't working for normal packages + # Maybe for hardfork package? # Copy the genesis ledgers and proofs as these are fairly small and very \ # valuable to have # Genesis Ledger/proof/epoch ledger Copy @@ -207,13 +167,6 @@ copy_common_daemon_configs() { mv /tmp/coda_cache_dir/genesis* "${BUILDDIR}/var/lib/coda/." fi done - - # Support bash completion - # NOTE: We do not list bash-completion as a required package, - # but it needs to be present for this to be effective - mkdir -p "${BUILDDIR}/etc/bash_completion.d" - env COMMAND_OUTPUT_INSTALLATION_BASH=1 "${BUILDDIR}/usr/local/bin/mina" > \ - "${BUILDDIR}/etc/bash_completion.d/mina" } ## LOGPROC PACKAGE ## @@ -293,12 +246,19 @@ build_functional_test_suite_deb() { } ## END TEST SUITE PACKAGE ## -function copy_common_rosetta_configs () { +## ROSETTA PACKAGE ## +build_rosetta_deb() { + + echo "------------------------------------------------------------" + echo "--- Building rosetta deb" + + create_control_file mina-rosetta "${SHARED_DEPS}" \ + 'Mina Protocol Rosetta Client' "${SUGGESTED_DEPS}" # Copy rosetta-based Binaries - cp ./default/src/app/rosetta/rosetta_"${1}"_signatures.exe \ + cp ./default/src/app/rosetta/rosetta.exe \ "${BUILDDIR}/usr/local/bin/mina-rosetta" - cp ./default/src/app/rosetta/ocaml-signer/signer_"${1}"_signatures.exe \ + cp ./default/src/app/rosetta/ocaml-signer/signer.exe \ "${BUILDDIR}/usr/local/bin/mina-ocaml-signer" mkdir -p "${BUILDDIR}/etc/mina/rosetta" @@ -314,52 +274,61 @@ function copy_common_rosetta_configs () { cp ./default/src/app/rosetta/indexer_test/indexer_test.exe \ "${BUILDDIR}/usr/local/bin/mina-rosetta-indexer-test" + build_deb mina-rosetta } +## END ROSETTA PACKAGE ## -## ROSETTA MAINNET PACKAGE ## -build_rosetta_mainnet_deb() { +## MAINNET BASE PACKAGE ## +build_daemon_base_deb() { echo "------------------------------------------------------------" - echo "--- Building mainnet rosetta deb" + echo "--- Building daemon base deb without keys:" - create_control_file mina-rosetta-mainnet "${SHARED_DEPS}" \ - 'Mina Protocol Rosetta Client' "${SUGGESTED_DEPS}" - - copy_common_rosetta_configs "mainnet" - - build_deb mina-rosetta-mainnet -} -## END ROSETTA MAINNET PACKAGE ## - -## ROSETTA DEVNET PACKAGE ## -build_rosetta_devnet_deb() { - - echo "------------------------------------------------------------" - echo "--- Building devnet rosetta deb" - - create_control_file mina-rosetta-devnet "${SHARED_DEPS}" \ - 'Mina Protocol Rosetta Client' "${SUGGESTED_DEPS}" + create_control_file mina-base "${SHARED_DEPS}${DAEMON_DEPS}" \ + 'Mina Protocol Client and Daemon' "${SUGGESTED_DEPS}" - copy_common_rosetta_configs "testnet" + # Copy shared binaries + cp ../src/app/libp2p_helper/result/bin/libp2p_helper \ + "${BUILDDIR}/usr/local/bin/coda-libp2p_helper" + cp ./default/src/app/runtime_genesis_ledger/runtime_genesis_ledger.exe \ + "${BUILDDIR}/usr/local/bin/mina-create-genesis" + cp ./default/src/app/generate_keypair/generate_keypair.exe \ + "${BUILDDIR}/usr/local/bin/mina-generate-keypair" + cp ./default/src/app/validate_keypair/validate_keypair.exe \ + "${BUILDDIR}/usr/local/bin/mina-validate-keypair" + cp ./default/src/lib/snark_worker/standalone/run_snark_worker.exe \ + "${BUILDDIR}/usr/local/bin/mina-standalone-snark-worker" + cp ./default/src/app/cli/src/mina.exe "${BUILDDIR}/usr/local/bin/mina" - build_deb mina-rosetta-devnet -} -## END ROSETTA DEVNET PACKAGE ## + # Copy over Build Configs + mkdir -p "${BUILDDIR}/etc/coda/build_config" + # Use parameter expansion to either return "mainnet.mlh" or "devnet.mlh" + cp "../src/config/public_network.mlh" \ + "${BUILDDIR}/etc/coda/build_config/BUILD.mlh" + rsync -Huav ../src/config/* "${BUILDDIR}/etc/coda/build_config/." -## ROSETTA BERKELEY PACKAGE ## -build_rosetta_berkeley_deb() { + cp ../scripts/hardfork/create_runtime_config.sh \ + "${BUILDDIR}/usr/local/bin/mina-hf-create-runtime-config" + cp ../scripts/hardfork/mina-verify-packaged-fork-config \ + "${BUILDDIR}/usr/local/bin/mina-verify-packaged-fork-config" - echo "------------------------------------------------------------" - echo "--- Building berkeley rosetta deb" + # Support bash completion + # NOTE: We do not list bash-completion as a required package, + # but it needs to be present for this to be effective + mkdir -p "${BUILDDIR}/etc/bash_completion.d" + env COMMAND_OUTPUT_INSTALLATION_BASH=1 "${BUILDDIR}/usr/local/bin/mina" > \ + "${BUILDDIR}/etc/bash_completion.d/mina" - create_control_file mina-rosetta-berkeley "${SHARED_DEPS}" \ - 'Mina Protocol Rosetta Client' "${SUGGESTED_DEPS}" + mkdir -p "${BUILDDIR}/var/lib/coda" - copy_common_rosetta_configs "testnet" + # Include all useful genesis ledgers + cp ../genesis_ledgers/mainnet.json "${BUILDDIR}/var/lib/coda/mainnet.json" + cp ../genesis_ledgers/devnet.json "${BUILDDIR}/var/lib/coda/devnet.json" + cp ../genesis_ledgers/berkeley.json "${BUILDDIR}/var/lib/coda/berkeley.json" - build_deb mina-rosetta-berkeley + build_deb mina-base } -## END BERKELEY PACKAGE ## +## END MAINNET BASE PACKAGE ## ## MAINNET PACKAGE ## build_daemon_mainnet_deb() { @@ -367,10 +336,10 @@ build_daemon_mainnet_deb() { echo "------------------------------------------------------------" echo "--- Building mainnet deb without keys:" - create_control_file mina-mainnet "${SHARED_DEPS}${DAEMON_DEPS}" \ + create_control_file mina-mainnet "${SHARED_DEPS}${DAEMON_DEPS}${DAEMON_INTERNAL_DEPS}" \ 'Mina Protocol Client and Daemon' "${SUGGESTED_DEPS}" - copy_common_daemon_configs mainnet mainnet 'mina-seed-lists/mainnet_seeds.txt' + copy_daemon_configs mainnet 'mina-seed-lists/mainnet_seeds.txt' build_deb mina-mainnet } @@ -382,65 +351,31 @@ build_daemon_devnet_deb() { echo "------------------------------------------------------------" echo "--- Building testnet signatures deb without keys:" - create_control_file mina-devnet "${SHARED_DEPS}${DAEMON_DEPS}" \ + create_control_file mina-devnet "${SHARED_DEPS}${DAEMON_DEPS}${DAEMON_INTERNAL_DEPS}" \ 'Mina Protocol Client and Daemon for the Devnet Network' "${SUGGESTED_DEPS}" - copy_common_daemon_configs devnet testnet 'seed-lists/devnet_seeds.txt' + copy_daemon_configs devnet 'seed-lists/devnet_seeds.txt' build_deb mina-devnet } ## END DEVNET PACKAGE ## -## MAINNET LEGACY PACKAGE ## -build_daemon_mainnet_legacy_deb() { +## LEGACY PACKAGE ## +build_daemon_legacy_deb() { echo "------------------------------------------------------------" - echo "--- Building mainnet legacy deb without keys:" + echo "--- Building legacy deb without keys:" - create_control_file mina-mainnet-legacy "${SHARED_DEPS}${DAEMON_DEPS}" \ + create_control_file mina-legacy "${SHARED_DEPS}${DAEMON_DEPS}${DAEMON_INTERNAL_DEPS}" \ 'Mina Protocol Client and Daemon' "${SUGGESTED_DEPS}" # Copy legacy binary - cp ./default/src/app/cli/src/mina_mainnet_signatures.exe \ - "${BUILDDIR}/usr/local/bin/mina-legacy" - - build_deb mina-mainnet-legacy -} -## END MAINNET LEGACY PACKAGE ## - -## DEVNET LEGACY PACKAGE ## -build_daemon_devnet_legacy_deb() { - - echo "------------------------------------------------------------" - echo "--- Building testnet signatures legacy deb without keys:" - - create_control_file mina-devnet-legacy "${SHARED_DEPS}${DAEMON_DEPS}" \ - 'Mina Protocol Client and Daemon for the Devnet Network' "${SUGGESTED_DEPS}" - - # Copy legacy binary - cp ./default/src/app/cli/src/mina_testnet_signatures.exe \ + cp ./default/src/app/cli/src/mina.exe \ "${BUILDDIR}/usr/local/bin/mina-legacy" - build_deb mina-devnet-legacy -} -## END DEVNET LEGACY PACKAGE ## - -## BERKELEY PACKAGE ## -build_daemon_berkeley_deb() { - - echo "------------------------------------------------------------" - echo "--- Building Mina Berkeley testnet signatures deb without keys:" - - create_control_file "${MINA_DEB_NAME}" "${SHARED_DEPS}${DAEMON_DEPS}" \ - 'Mina Protocol Client and Daemon for the Berkeley Network' \ - "${SUGGESTED_DEPS}" - - copy_common_daemon_configs berkeley testnet 'seed-lists/berkeley_seeds.txt' - - build_deb "${MINA_DEB_NAME}" - + build_deb mina-legacy } -## END BERKELEY PACKAGE ## +## END LEGACY PACKAGE ## replace_runtime_config_and_ledgers_with_hardforked_ones() { local NETWORK_NAME="${1}" @@ -464,6 +399,7 @@ replace_runtime_config_and_ledgers_with_hardforked_ones() { cp "${RUNTIME_CONFIG_JSON}" "${BUILDDIR}/var/lib/coda/${NETWORK_NAME}.json" } +# TODO: do hardfork packages need an update to use mina-base debian? ## DEVNET HARDFORK PACKAGE ## build_daemon_devnet_hardfork_deb() { @@ -475,7 +411,7 @@ build_daemon_devnet_hardfork_deb() { create_control_file "${__deb_name}" "${SHARED_DEPS}${DAEMON_DEPS}" \ 'Mina Protocol Client and Daemon for the Devnet Network' "${SUGGESTED_DEPS}" - copy_common_daemon_configs devnet testnet 'seed-lists/devnet_seeds.txt' + copy_daemon_configs devnet 'seed-lists/devnet_seeds.txt' replace_runtime_config_and_ledgers_with_hardforked_ones devnet @@ -485,26 +421,6 @@ build_daemon_devnet_hardfork_deb() { ## END DEVNET HARDFORK PACKAGE ## -## BERKELEY HARDFORK PACKAGE ## -build_daemon_berkeley_hardfork_deb() { - local __deb_name=mina-berkeley-hardfork - - echo "------------------------------------------------------------" - echo "--- Building hardfork berkeley signatures deb without keys:" - - create_control_file "${__deb_name}" "${SHARED_DEPS}${DAEMON_DEPS}" \ - 'Mina Protocol Client and Daemon for the Berkeley Network' "${SUGGESTED_DEPS}" - - copy_common_daemon_configs berkeley testnet 'seed-lists/berkeley_seeds.txt' - - replace_runtime_config_and_ledgers_with_hardforked_ones berkeley - - build_deb "${__deb_name}" - -} - -## END BERKELEY HARDFORK PACKAGE ## - ## MAINNET HARDFORK PACKAGE ## build_daemon_mainnet_hardfork_deb() { local __deb_name=mina-mainnet-hardfork @@ -515,7 +431,7 @@ build_daemon_mainnet_hardfork_deb() { create_control_file "${__deb_name}" "${SHARED_DEPS}${DAEMON_DEPS}" \ 'Mina Protocol Client and Daemon for the Mainnet Network' "${SUGGESTED_DEPS}" - copy_common_daemon_configs mainnet testnet 'seed-lists/mainnet_seeds.txt' + copy_daemon_configs mainnet 'seed-lists/mainnet_seeds.txt' replace_runtime_config_and_ledgers_with_hardforked_ones mainnet @@ -526,8 +442,6 @@ build_daemon_mainnet_hardfork_deb() { ## END MAINNET HARDFORK PACKAGE ## copy_common_archive_configs() { - local ARCHIVE_DEB="${1}" - cp ./default/src/app/archive/archive.exe \ "${BUILDDIR}/usr/local/bin/mina-archive" cp ./default/src/app/archive_blocks/archive_blocks.exe \ @@ -545,56 +459,24 @@ copy_common_archive_configs() { "${BUILDDIR}/usr/local/bin/mina-replayer" rsync -Huav ../src/app/archive/*.sql "${BUILDDIR}/etc/mina/archive" - - build_deb "$ARCHIVE_DEB" } -## ARCHIVE DEVNET PACKAGE ## -build_archive_devnet_deb () { - ARCHIVE_DEB=mina-archive-devnet +## ARCHIVE PACKAGE ## +build_archive_deb () { + ARCHIVE_DEB=mina-archive echo "------------------------------------------------------------" - echo "--- Building archive devnet deb" + echo "--- Building archive deb" create_control_file "$ARCHIVE_DEB" "${ARCHIVE_DEPS}" 'Mina Archive Process Compatible with Mina Daemon' - copy_common_archive_configs "$ARCHIVE_DEB" - -} -## END ARCHIVE DEVNET PACKAGE ## - -## ARCHIVE BERKELEY PACKAGE ## -build_archive_berkeley_deb () { - ARCHIVE_DEB=mina-archive-berkeley${DEB_SUFFIX} - - echo "------------------------------------------------------------" - echo "--- Building archive berkeley deb" - - - create_control_file "$ARCHIVE_DEB" "${ARCHIVE_DEPS}" 'Mina Archive Process - Compatible with Mina Daemon' - - copy_common_archive_configs "$ARCHIVE_DEB" + copy_common_archive_configs + build_deb "$ARCHIVE_DEB" } ## END ARCHIVE PACKAGE ## -## ARCHIVE MAINNET PACKAGE ## -build_archive_mainnet_deb () { - ARCHIVE_DEB=mina-archive-mainnet - - echo "------------------------------------------------------------" - echo "--- Building archive mainnet deb" - - create_control_file "$ARCHIVE_DEB" "${ARCHIVE_DEPS}" 'Mina Archive Process - Compatible with Mina Daemon' - - copy_common_archive_configs "$ARCHIVE_DEB" - -} -## END ARCHIVE MAINNET PACKAGE ## - ## ZKAPP TEST TXN ## build_zkapp_test_transaction_deb () { echo "------------------------------------------------------------" diff --git a/scripts/docker/build.sh b/scripts/docker/build.sh index 2df0adc5497f..41f6a4a12765 100755 --- a/scripts/docker/build.sh +++ b/scripts/docker/build.sh @@ -74,6 +74,12 @@ if [[ -z "$INPUT_NETWORK" ]]; then NETWORK="--build-arg network=devnet" fi +if [[ "$INPUT_NETWORK" == "mainnet" ]]; then + SIGKIND="--build-arg signature_kind=mainnet" +else + SIGKIND="--build-arg signature_kind=testnet" +fi + LEGACY_VERSION="--build-arg deb_legacy_version=$INPUT_LEGACY_VERSION" if [[ -z "$INPUT_LEGACY_VERSION" ]]; then @@ -170,11 +176,19 @@ export_base_image case "${SERVICE}" in mina-archive) - DOCKERFILE_PATH="dockerfiles/Dockerfile-mina-archive" + if [[ "$INPUT_NETWORK" == "base" ]]; then + DOCKERFILE_PATH="dockerfiles/Dockerfile-mina-archive-base" + else + DOCKERFILE_PATH="dockerfiles/Dockerfile-mina-archive" + fi DOCKER_CONTEXT="dockerfiles/" ;; mina-daemon) - DOCKERFILE_PATH="dockerfiles/Dockerfile-mina-daemon" + if [[ "$INPUT_NETWORK" == "base" ]]; then + DOCKERFILE_PATH="dockerfiles/Dockerfile-mina-daemon-base" + else + DOCKERFILE_PATH="dockerfiles/Dockerfile-mina-daemon" + fi DOCKER_CONTEXT="dockerfiles/" ;; mina-daemon-legacy-hardfork) @@ -221,7 +235,11 @@ case "${SERVICE}" in DOCKER_CONTEXT="dockerfiles/" ;; mina-rosetta) - DOCKERFILE_PATH="dockerfiles/Dockerfile-mina-rosetta" + if [[ "$INPUT_NETWORK" == "base" ]]; then + DOCKERFILE_PATH="dockerfiles/Dockerfile-mina-rosetta" + else + DOCKERFILE_PATH="dockerfiles/Dockerfile-mina-daemon" + fi ;; mina-zkapp-test-transaction) DOCKERFILE_PATH="dockerfiles/Dockerfile-zkapp-test-transaction" @@ -252,9 +270,13 @@ BUILD_NETWORK="--allow=network.host" # If DOCKER_CONTEXT is not specified, assume none and just pipe the dockerfile into docker build if [[ -z "${DOCKER_CONTEXT}" ]]; then cat $DOCKERFILE_PATH | docker buildx build --network=host \ - --load --progress=plain $PLATFORM $DEBIAN_ARCH_ARG $CANONICAL_ARCH_ARG $NO_CACHE $BUILD_NETWORK $CACHE $NETWORK $IMAGE $DEB_CODENAME $DEB_RELEASE $DEB_VERSION $DOCKER_DEB_SUFFIX $DEB_REPO $BRANCH $REPO $LEGACY_VERSION -t "$TAG" - + --load --progress=plain $PLATFORM $DEBIAN_ARCH_ARG \ + --build-arg deb_artifact=$SERVICE \ + $CANONICAL_ARCH_ARG $NO_CACHE $BUILD_NETWORK $CACHE $NETWORK $SIGKIND $IMAGE $DEB_CODENAME $DEB_RELEASE $DEB_VERSION $DOCKER_DEB_SUFFIX $DEB_REPO $BRANCH $REPO $LEGACY_VERSION -t "$TAG" - else - docker buildx build --load --network=host --progress=plain $PLATFORM $DEBIAN_ARCH_ARG $CANONICAL_ARCH_ARG $NO_CACHE $BUILD_NETWORK $CACHE $NETWORK $IMAGE $DEB_CODENAME $DEB_RELEASE $DEB_VERSION $DOCKER_DEB_SUFFIX $DEB_REPO $BRANCH $REPO $LEGACY_VERSION "$DOCKER_CONTEXT" -t "$TAG" -f $DOCKERFILE_PATH + docker buildx build --load --network=host --progress=plain \ + --build-arg deb_artifact=$SERVICE \ + $PLATFORM $DEBIAN_ARCH_ARG $CANONICAL_ARCH_ARG $NO_CACHE $BUILD_NETWORK $CACHE $NETWORK $SIGKIND $IMAGE $DEB_CODENAME $DEB_RELEASE $DEB_VERSION $DOCKER_DEB_SUFFIX $DEB_REPO $BRANCH $REPO $LEGACY_VERSION "$DOCKER_CONTEXT" -t "$TAG" -f $DOCKERFILE_PATH fi echo "✅ Docker image for service ${SERVICE} built successfully." diff --git a/scripts/docker/helper.sh b/scripts/docker/helper.sh index da6121d1d5b6..55ab4cf43456 100644 --- a/scripts/docker/helper.sh +++ b/scripts/docker/helper.sh @@ -35,44 +35,27 @@ function export_suffixes () { # - hardfork # - lightnet # - hardfork-instrumented - case "${DEB_PROFILE}" in - devnet|mainnet) - case "${DEB_BUILD_FLAGS}" in - *instrumented) - export DOCKER_DEB_SUFFIX="--build-arg deb_suffix=instrumented" - export BUILD_FLAG_SUFFIX="-instrumented" - ;; - *) - export DOCKER_DEB_SUFFIX="${DOCKER_DEB_SUFFIX:-}" - export BUILD_FLAG_SUFFIX="" - ;; - esac - ;; - lightnet) - case "${DEB_BUILD_FLAGS}" in - *instrumented) - export DOCKER_DEB_SUFFIX="--build-arg deb_suffix=lightnet-instrumented" - export BUILD_FLAG_SUFFIX="lightnet-instrumented" - ;; - *) - export DOCKER_DEB_SUFFIX="--build-arg deb_suffix=lightnet" - export BUILD_FLAG_SUFFIX="-lightnet" - ;; - esac - ;; - *) - case "${DEB_BUILD_FLAGS}" in - *instrumented) - export DOCKER_DEB_SUFFIX="--build-arg deb_suffix=${DEB_PROFILE}-instrumented" - export BUILD_FLAG_SUFFIX="-instrumented" - ;; - *) - export DOCKER_DEB_SUFFIX="--build-arg deb_suffix=${DEB_PROFILE}" - export BUILD_FLAG_SUFFIX="" - ;; - esac - ;; - esac + local suffix="" + + if [[ "${DEB_PROFILE}" != "public_network" ]] && [[ -n "${DEB_PROFILE}" ]]; then + suffix="${DEB_PROFILE}" + fi + + if [[ "${DEB_BUILD_FLAGS}" == *instrumented* ]]; then + if [[ -n "${suffix}" ]]; then + suffix="${suffix}-instrumented" + else + suffix="instrumented" + fi + fi + + if [[ -n "${suffix}" ]]; then + export DOCKER_DEB_SUFFIX="--build-arg deb_suffix=${suffix}" + export BUILD_FLAG_SUFFIX="-${suffix}" + else + export DOCKER_DEB_SUFFIX="" + export BUILD_FLAG_SUFFIX="" + fi } function get_platform_suffix() { diff --git a/scripts/hardfork/build-and-test.sh b/scripts/hardfork/build-and-test.sh index 5b063b2d1f3b..33042a35e51c 100755 --- a/scripts/hardfork/build-and-test.sh +++ b/scripts/hardfork/build-and-test.sh @@ -77,8 +77,8 @@ if [[ ! -L compatible-devnet ]]; then fi git submodule sync --recursive git submodule update --init --recursive - nix "${NIX_OPTS[@]}" build "$compatible_build?submodules=1#devnet" --out-link "$INIT_DIR/compatible-devnet" - nix "${NIX_OPTS[@]}" build "$compatible_build?submodules=1#devnet.genesis" --out-link "$INIT_DIR/compatible-devnet" + nix "${NIX_OPTS[@]}" build "$compatible_build?submodules=1#mina" --out-link "$INIT_DIR/compatible-devnet" + nix "${NIX_OPTS[@]}" build "$compatible_build?submodules=1#mina.genesis" --out-link "$INIT_DIR/compatible-devnet" if [[ $# == 0 ]]; then cd - rm -Rf "$compatible_build" @@ -91,8 +91,8 @@ if [[ $# -gt 0 ]]; then git submodule sync --recursive git submodule update --init --recursive fi -nix "${NIX_OPTS[@]}" build "$INIT_DIR?submodules=1#devnet" --out-link "$INIT_DIR/fork-devnet" -nix "${NIX_OPTS[@]}" build "$INIT_DIR?submodules=1#devnet.genesis" --out-link "$INIT_DIR/fork-devnet" +nix "${NIX_OPTS[@]}" build "$INIT_DIR?submodules=1#mina" --out-link "$INIT_DIR/fork-devnet" +nix "${NIX_OPTS[@]}" build "$INIT_DIR?submodules=1#mina.genesis" --out-link "$INIT_DIR/fork-devnet" if [[ "$NIX_CACHE_GCP_ID" != "" ]] && [[ "$NIX_CACHE_GCP_SECRET" != "" ]]; then mkdir -p $HOME/.aws diff --git a/scripts/hardfork/build-packages.sh b/scripts/hardfork/build-packages.sh index 6dfcd1af9807..a01b1e647ed2 100755 --- a/scripts/hardfork/build-packages.sh +++ b/scripts/hardfork/build-packages.sh @@ -34,7 +34,7 @@ fi echo "✅ AWS CLI is available" export BYPASS_OPAM_SWITCH_UPDATE=1 -export DUNE_PROFILE=${NETWORK_NAME} +export DUNE_PROFILE=public_network make build make build-daemon-utils diff --git a/scripts/mina-local-network/README.md b/scripts/mina-local-network/README.md index 2ba60704b844..cc945464637d 100644 --- a/scripts/mina-local-network/README.md +++ b/scripts/mina-local-network/README.md @@ -30,7 +30,7 @@ ```shell MINA_COMMIT_SHA1=$(git rev-parse HEAD) \ - DUNE_PROFILE="devnet" \ + DUNE_PROFILE="public_network" \ dune build \ src/app/cli/src/mina.exe \ src/app/archive/archive.exe \ diff --git a/scripts/regenerate-archive.sh b/scripts/regenerate-archive.sh index 8a519c4cb3b1..9997d9b94c17 100755 --- a/scripts/regenerate-archive.sh +++ b/scripts/regenerate-archive.sh @@ -9,7 +9,7 @@ cd "$(dirname -- "${BASH_SOURCE[0]}")"/.. # Prepare the database sudo -u postgres dropdb archive || true # fails when db doesn't exist which is fine psql -U postgres -c 'CREATE DATABASE archive' -export DUNE_PROFILE=devnet +export DUNE_PROFILE=public_network dune build src/app/cli/src/mina.exe src/app/archive/archive.exe src/app/zkapp_test_transaction/zkapp_test_transaction.exe src/app/logproc/logproc.exe psql -U postgres archive < ./src/app/archive/create_schema.sql psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'postgres';" diff --git a/scripts/tests/ledger_test_apply.sh b/scripts/tests/ledger_test_apply.sh index 679cb20ccacd..530c24efe9e4 100755 --- a/scripts/tests/ledger_test_apply.sh +++ b/scripts/tests/ledger_test_apply.sh @@ -10,6 +10,7 @@ set -exo pipefail export MINA_PRIVKEY_PASS='naughty blue worm' +export MINA_SIGNATURE_KIND='testnet' MINA_APP=_build/default/src/app/cli/src/mina.exe RUNTIME_LEDGER_APP=_build/default/src/app/runtime_genesis_ledger/runtime_genesis_ledger.exe diff --git a/src/app/archive/cli/archive_cli.ml b/src/app/archive/cli/archive_cli.ml index fab9ebbe6e9d..275fb5c665e1 100644 --- a/src/app/archive/cli/archive_cli.ml +++ b/src/app/archive/cli/archive_cli.ml @@ -45,7 +45,7 @@ let command_run = Postgres Out of Memory errors when handling very big genesis file. \ Default is 100." (optional_with_default 100 int) - in + and cli_signature_kind = Cli_lib.Flag.signature_kind_opt in let runtime_config_opt = Option.map runtime_config_file ~f:(fun file -> Yojson.Safe.from_file file |> Runtime_config.of_yojson @@ -67,7 +67,7 @@ let command_run = ~server_port: (Option.value server_port.value ~default:server_port.default) ~delete_older_than ~runtime_config_opt ~missing_blocks_width - ~signature_kind:Mina_signature_kind.t_DEPRECATED ) + ~cli_signature_kind ) let time_arg = (* Same timezone as Genesis_constants.genesis_state_timestamp. *) diff --git a/src/app/archive/lib/processor.ml b/src/app/archive/lib/processor.ml index 109b97b6da3a..23da7d2cb7cf 100644 --- a/src/app/archive/lib/processor.ml +++ b/src/app/archive/lib/processor.ml @@ -3244,11 +3244,13 @@ module Block = struct ~hash ~v1_transaction_hash:false let add_from_precomputed conn ~proof_cache_db ~constraint_constants - (t : Precomputed.t) = - let signature_kind = Mina_signature_kind.t_DEPRECATED in + ~signature_kind (t : Precomputed.t) = let staged_ledger_diff = - Staged_ledger_diff.write_all_proofs_to_disk ~signature_kind - ~proof_cache_db t.staged_ledger_diff + (* We purposefully ignore some hashes that are already stored in legacy format *) + Mina_block.Legacy_format.Staged_ledger_diff.to_stable_staged_ledger_diff + t.staged_ledger_diff + |> Staged_ledger_diff.write_all_proofs_to_disk ~signature_kind + ~proof_cache_db in add_parts_if_doesn't_exist conn ~constraint_constants ~protocol_state:t.protocol_state ~staged_ledger_diff @@ -4617,10 +4619,11 @@ let add_block_aux ?(retries = 3) ~logger ~genesis_constants ~pool ~add_block (* used by `archive_blocks` app *) let add_block_aux_precomputed ~proof_cache_db ~constraint_constants ~logger - ?retries ~pool ~delete_older_than block = + ~signature_kind ?retries ~pool ~delete_older_than block = add_block_aux ~logger ?retries ~pool ~delete_older_than ~add_block: - (Block.add_from_precomputed ~logger ~proof_cache_db ~constraint_constants) + (Block.add_from_precomputed ~logger ~proof_cache_db ~constraint_constants + ~signature_kind ) ~hash:(fun block -> (block.Precomputed.protocol_state |> Protocol_state.hashes).state_hash ) ~accounts_accessed:block.Precomputed.accounts_accessed @@ -4641,7 +4644,7 @@ let add_block_aux_extensional ~proof_cache_db ~logger ~signature_kind ?retries (* receive blocks from a daemon, write them to the database *) let run pool reader ~proof_cache_db ~genesis_constants ~constraint_constants - ~logger ~delete_older_than : unit Deferred.t = + ~logger ~signature_kind ~delete_older_than : unit Deferred.t = Strict_pipe.Reader.iter reader ~f:(function | Diff.Transition_frontier (Breadcrumb_added @@ -4650,7 +4653,6 @@ let run pool reader ~proof_cache_db ~genesis_constants ~constraint_constants Block.add_if_doesn't_exist ~logger ~constraint_constants in let hash = State_hash.With_state_hashes.state_hash in - let signature_kind = Mina_signature_kind.t_DEPRECATED in let block = With_hash.map ~f: @@ -4680,20 +4682,25 @@ let run pool reader ~proof_cache_db ~genesis_constants ~constraint_constants (* [add_genesis_accounts] is called when starting the archive process *) let add_genesis_accounts ~logger ~(runtime_config_opt : Runtime_config.t option) ~(genesis_constants : Genesis_constants.t) ~chunks_length - ~(constraint_constants : Genesis_constants.Constraint_constants.t) pool = - match runtime_config_opt with - | None -> - Deferred.unit - | Some runtime_config -> ( - let%bind precomputed_values = + ~(constraint_constants : Genesis_constants.Constraint_constants.t) + ~cli_signature_kind pool : Mina_signature_kind.t Deferred.t = + match (runtime_config_opt, cli_signature_kind) with + | None, None -> + [%log warn] "signature kind not specified" ; + failwith "signature kind not specified" + | None, Some signature_kind -> + return signature_kind + | Some runtime_config, _ -> ( + let%bind precomputed_values, signature_kind = match%map Genesis_ledger_helper.init_from_config_file ~logger ~proof_level:Genesis_constants.Compiled.proof_level ~genesis_constants ~constraint_constants runtime_config ~cli_proof_level:None ~genesis_backing_type:Stable_db + ~cli_signature_kind with - | Ok (precomputed_values, _) -> - precomputed_values + | Ok (precomputed_values, _, signature_kind) -> + (precomputed_values, signature_kind) | Error err -> failwithf "Could not get precomputed values, error: %s" (Error.to_string_hum err) () @@ -4806,7 +4813,7 @@ let add_genesis_accounts ~logger ~(runtime_config_opt : Runtime_config.t option) ~metadata:[ ("error", `String (Caqti_error.show e)) ] ; failwith "Failed to add genesis accounts" | Ok () -> - () ) + signature_kind ) let serve_metrics_server ~logger ~metrics_server_port ~missing_blocks_width ~block_window_duration_ms pool = @@ -4836,8 +4843,8 @@ let serve_metrics_server ~logger ~metrics_server_port ~missing_blocks_width let setup_server ~proof_cache_db ~(genesis_constants : Genesis_constants.t) ~(constraint_constants : Genesis_constants.Constraint_constants.t) ~metrics_server_port ~logger ~postgres_address ~server_port ~chunks_length - ~delete_older_than ~runtime_config_opt ~missing_blocks_width ~signature_kind - = + ~delete_older_than ~runtime_config_opt ~missing_blocks_width + ~cli_signature_kind = let where_to_listen = Async.Tcp.Where_to_listen.bind_to All_addresses (On_port server_port) in @@ -4866,19 +4873,20 @@ let setup_server ~proof_cache_db ~(genesis_constants : Genesis_constants.t) ~metadata:[ ("error", `String (Caqti_error.show e)) ] ; Deferred.unit | Ok pool -> - let%bind () = + let%bind signature_kind = add_genesis_accounts pool ~logger ~genesis_constants ~constraint_constants ~runtime_config_opt ~chunks_length + ~cli_signature_kind in run ~proof_cache_db ~constraint_constants ~genesis_constants pool reader - ~logger ~delete_older_than + ~logger ~signature_kind ~delete_older_than |> don't_wait_for ; Strict_pipe.Reader.iter precomputed_block_reader ~f:(fun precomputed_block -> match%map add_block_aux_precomputed ~proof_cache_db ~logger ~pool - ~genesis_constants ~constraint_constants ~delete_older_than - precomputed_block + ~genesis_constants ~constraint_constants ~signature_kind + ~delete_older_than precomputed_block with | Error e -> [%log warn] diff --git a/src/app/archive/lib/test.ml b/src/app/archive/lib/test.ml index b30f1edbad9b..288106e414fe 100644 --- a/src/app/archive/lib/test.ml +++ b/src/app/archive/lib/test.ml @@ -315,7 +315,7 @@ let%test_module "Archive node unit tests" = Processor.run ~proof_cache_db ~genesis_constants:precomputed_values.genesis_constants ~constraint_constants:precomputed_values.constraint_constants pool - reader ~logger ~delete_older_than:None + reader ~logger ~signature_kind:Testnet ~delete_older_than:None in match%map Mina_caqti.deferred_result_list_fold breadcrumbs ~init:() diff --git a/src/app/archive_blocks/archive_blocks.ml b/src/app/archive_blocks/archive_blocks.ml index 103dc255fbf7..117af07a8e20 100644 --- a/src/app/archive_blocks/archive_blocks.ml +++ b/src/app/archive_blocks/archive_blocks.ml @@ -5,7 +5,8 @@ open Async open Archive_lib let main ~genesis_constants ~constraint_constants ~archive_uri ~precomputed - ~extensional ~success_file ~failure_file ~log_successes ~files () = + ~extensional ~success_file ~failure_file ~log_successes ~signature_kind + ~files () = let proof_cache_db = Proof_cache_tag.create_identity_db () in let output_file_line path = match path with @@ -60,7 +61,7 @@ let main ~genesis_constants ~constraint_constants ~archive_uri ~precomputed in make_add_block of_yojson (Processor.add_block_aux_precomputed ~proof_cache_db - ~genesis_constants ~constraint_constants ~pool + ~genesis_constants ~constraint_constants ~signature_kind ~pool ~delete_older_than:None ~logger ) in let add_extensional_block = @@ -77,7 +78,7 @@ let main ~genesis_constants ~constraint_constants ~archive_uri ~precomputed make_add_block of_yojson (Processor.add_block_aux_extensional ~proof_cache_db ~genesis_constants ~logger ~pool ~delete_older_than:None - ~signature_kind:Mina_signature_kind.t_DEPRECATED ) + ~signature_kind ) in Deferred.List.iter files ~f:(fun file -> In_channel.with_file file ~f:(fun in_channel -> @@ -136,6 +137,8 @@ let () = "true/false Whether to log messages for files that were \ processed successfully" (Flag.optional_with_default true Param.bool) + and signature_kind = Cli_lib.Flag.signature_kind and files = Param.anon Anons.(sequence ("FILES" %: Param.string)) in main ~genesis_constants ~constraint_constants ~archive_uri ~precomputed - ~extensional ~success_file ~failure_file ~log_successes ~files ))) + ~extensional ~success_file ~failure_file ~log_successes + ~signature_kind ~files ))) diff --git a/src/app/archive_blocks/dune b/src/app/archive_blocks/dune index df22ebd8fd24..9a61b4aed008 100644 --- a/src/app/archive_blocks/dune +++ b/src/app/archive_blocks/dune @@ -20,6 +20,7 @@ uri ;; local libraries archive_lib + cli_lib mina_stdlib genesis_constants logger diff --git a/src/app/batch_txn_tool/batch_txn_tool.ml b/src/app/batch_txn_tool/batch_txn_tool.ml index 755963feafac..7bde97345886 100644 --- a/src/app/batch_txn_tool/batch_txn_tool.ml +++ b/src/app/batch_txn_tool/batch_txn_tool.ml @@ -401,13 +401,12 @@ let output_there_and_back_cmds = Cli_lib.Flag.fee_common ~minimum_user_command_fee:genesis_constants.minimum_user_command_fee ~default_transaction_fee:default - in + and signature_kind = Cli_lib.Flag.signature_kind in there_and_back_again ~num_txn_per_acct ~txns_per_block ~txn_fee_option ~slot_time ~fill_rate ~rate_limit ~rate_limit_level ~rate_limit_interval ~origin_sender_secret_key_path ~origin_sender_secret_key_pw_option ~returner_secret_key_path ~returner_secret_key_pw_option - ~graphql_target_node_option ~minimum_user_command_fee - ~signature_kind:Mina_signature_kind.t_DEPRECATED ) + ~graphql_target_node_option ~minimum_user_command_fee ~signature_kind ) let () = Command.run diff --git a/src/app/cli/src/cli_entrypoint/mina_cli_entrypoint.ml b/src/app/cli/src/cli_entrypoint/mina_cli_entrypoint.ml index 8d9cd1bd07ee..c90b8a57de74 100644 --- a/src/app/cli/src/cli_entrypoint/mina_cli_entrypoint.ml +++ b/src/app/cli/src/cli_entrypoint/mina_cli_entrypoint.ml @@ -51,7 +51,7 @@ let plugin_flag = let load_config_files ~logger ~genesis_constants ~constraint_constants ~conf_dir ~genesis_dir ~cli_proof_level ~proof_level ~genesis_backing_type - config_files = + ~cli_signature_kind config_files = let%bind config_jsons = let config_files_paths = List.map config_files ~f:(fun (config_file, _) -> `String config_file) @@ -103,10 +103,10 @@ let load_config_files ~logger ~genesis_constants ~constraint_constants ~conf_dir match%map Genesis_ledger_helper.init_from_config_file ~cli_proof_level ~genesis_dir ~logger ~genesis_constants ~constraint_constants ~proof_level - ~genesis_backing_type config + ~genesis_backing_type ~cli_signature_kind config with - | Ok (precomputed_values, _) -> - precomputed_values + | Ok (precomputed_values, _, signature_kind) -> + (precomputed_values, signature_kind) | Error err -> let ( json_config , `Accounts_omitted @@ -582,7 +582,7 @@ let setup_daemon logger ~itn_features ~default_snark_worker_fee = legacy mode, all databased backed ledgers are backed by one database. \ THIS FLAG IS INTERNAL USE ONLY AND WOULD BE REMOVED WITHOUT NOTICE" (optional_with_default Hardfork_mode.Legacy Hardfork_mode.arg) - in + and cli_signature_kind = Cli_lib.Flag.signature_kind_opt in let to_pubsub_topic_mode_option = let open Gossip_net.Libp2p in function @@ -793,11 +793,11 @@ let setup_daemon logger ~itn_features ~default_snark_worker_fee = let ledger_backing_type = Mina_lib.Config.ledger_backing ~hardfork_mode in - let%bind precomputed_values, config_jsons, config = + let%bind (precomputed_values, signature_kind), config_jsons, config = load_config_files ~logger ~conf_dir ~genesis_dir ~proof_level:Genesis_constants.Compiled.proof_level config_files ~genesis_constants ~constraint_constants ~cli_proof_level - ~genesis_backing_type:ledger_backing_type + ~genesis_backing_type:ledger_backing_type ~cli_signature_kind in constraint_constants.block_window_duration_ms |> Float.of_int @@ -1393,7 +1393,8 @@ Pass one of -peer, -peer-list-file, -seed, -peer-list-url.|} ; Option.iter itn_max_logs ~f:Itn_logger.set_queue_bound ; let start_time = Time.now () in let%map mina = - Mina_lib.create ~commit_id:Mina_version.commit_id ~wallets + Mina_lib.create ~signature_kind ~commit_id:Mina_version.commit_id + ~wallets (Mina_lib.Config.make ~logger ~pids ~trust_system ~conf_dir ~file_log_level ~log_level ~log_json ~chain_id ~is_seed ~disable_node_status ~demo_mode ~coinbase_receiver ~net_config @@ -1704,34 +1705,34 @@ let snark_hashes = fun () -> if json then Core.printf "[]\n%!"] let internal_commands logger ~itn_features = - let signature_kind = Mina_signature_kind.t_DEPRECATED in [ ( Snark_worker.Intf.command_name , Snark_worker.command ~proof_level:Genesis_constants.Compiled.proof_level ~constraint_constants:Genesis_constants.Compiled.constraint_constants - ~commit_id:Mina_version.commit_id ~signature_kind ) + ~commit_id:Mina_version.commit_id ) ; ("snark-hashes", snark_hashes) ; ( "run-prover" , Command.async ~summary:"Run prover on a sexp provided on a single line of stdin" - (Command.Param.return (fun () -> - let logger = Logger.create () in - let constraint_constants = - Genesis_constants.Compiled.constraint_constants - in - let proof_level = Genesis_constants.Compiled.proof_level in - Parallel.init_master () ; - match%bind Reader.read_sexp (Lazy.force Reader.stdin) with - | `Ok sexp -> - let%bind conf_dir = Unix.mkdtemp "/tmp/mina-prover" in - [%log info] "Prover state being logged to %s" conf_dir ; - let%bind prover = - Prover.create ~commit_id:Mina_version.commit_id ~logger - ~proof_level ~constraint_constants - ~pids:(Pid.Table.create ()) ~conf_dir ~signature_kind () - in - Prover.prove_from_input_sexp prover sexp >>| ignore - | `Eof -> - failwith "early EOF while reading sexp" ) ) ) + (let%map_open.Command signature_kind = Cli_lib.Flag.signature_kind in + fun () -> + let logger = Logger.create () in + let constraint_constants = + Genesis_constants.Compiled.constraint_constants + in + let proof_level = Genesis_constants.Compiled.proof_level in + Parallel.init_master () ; + match%bind Reader.read_sexp (Lazy.force Reader.stdin) with + | `Ok sexp -> + let%bind conf_dir = Unix.mkdtemp "/tmp/mina-prover" in + [%log info] "Prover state being logged to %s" conf_dir ; + let%bind prover = + Prover.create ~commit_id:Mina_version.commit_id ~logger + ~proof_level ~constraint_constants + ~pids:(Pid.Table.create ()) ~conf_dir ~signature_kind () + in + Prover.prove_from_input_sexp prover sexp >>| ignore + | `Eof -> + failwith "early EOF while reading sexp" ) ) ; ( "run-snark-worker-single" , Command.async ~summary:"Run snark-worker on a sexp provided on a single line of stdin" @@ -1739,7 +1740,7 @@ let internal_commands logger ~itn_features = let%map_open filename = flag "--file" (required string) ~doc:"File containing the s-expression of the snark work to execute" - in + and signature_kind = Cli_lib.Flag.signature_kind in fun () -> let open Deferred.Let_syntax in let logger = Logger.create () in @@ -1756,7 +1757,7 @@ let internal_commands logger ~itn_features = | `Ok sexp -> ( let%bind worker_state = Snark_worker.Inputs.Worker_state.create ~proof_level - ~constraint_constants ~signature_kind () + ~constraint_constants () in let sok_message = { Mina_base.Sok_message.fee = Currency.Fee.of_mina_int_exn 0 @@ -1771,7 +1772,7 @@ let internal_commands logger ~itn_features = in match%map Snark_worker.Inputs.perform_single worker_state - ~message:sok_message spec + ~message:sok_message spec ~signature_kind with | Ok _ -> [%log info] "Successfully worked" @@ -1956,7 +1957,7 @@ let internal_commands logger ~itn_features = "DIR Directory that contains the genesis ledger and the genesis \ blockchain proof (default: )" (optional string) - in + and cli_signature_kind = Cli_lib.Flag.signature_kind_opt in fun () -> let open Deferred.Let_syntax in Parallel.init_master () ; @@ -1973,10 +1974,11 @@ let internal_commands logger ~itn_features = List.map config_files ~f:(fun config_file -> (config_file, `Must_exist) ) in - let%bind precomputed_values, _config_jsons, _config = + let%bind (precomputed_values, signature_kind), _config_jsons, _config + = load_config_files ~logger ~conf_dir ~genesis_dir ~genesis_constants ~constraint_constants ~proof_level ~cli_proof_level:None - ~genesis_backing_type:Stable_db config_files + ~genesis_backing_type:Stable_db ~cli_signature_kind config_files in let pids = Child_processes.Termination.create_pid_table () in let%bind prover = diff --git a/src/app/cli/src/dune b/src/app/cli/src/dune index 5c7c9a89edef..2d253793c526 100644 --- a/src/app/cli/src/dune +++ b/src/app/cli/src/dune @@ -12,32 +12,4 @@ (instrumentation (backend bisect_ppx)) (preprocess - (pps ppx_version))) - -(executable - (package cli) - (name mina_testnet_signatures) - (public_name mina-testnet) - (modules mina_testnet_signatures) - (modes native) - (flags - (:standard -warn-error +a)) - (libraries mina_cli_entrypoint mina_signature_kind.testnet disk_cache.lmdb) - (instrumentation - (backend bisect_ppx)) - (preprocess - (pps ppx_version))) - -(executable - (package cli) - (name mina_mainnet_signatures) - (public_name mina-mainnet) - (modules mina_mainnet_signatures) - (modes native) - (flags - (:standard -warn-error +a)) - (libraries mina_cli_entrypoint mina_signature_kind.mainnet disk_cache.lmdb) - (instrumentation - (backend bisect_ppx)) - (preprocess - (pps ppx_version))) + (pps ppx_version))) \ No newline at end of file diff --git a/src/app/cli/src/init/client.ml b/src/app/cli/src/init/client.ml index 7512262e4445..a641e66796fc 100644 --- a/src/app/cli/src/init/client.ml +++ b/src/app/cli/src/init/client.ml @@ -328,14 +328,21 @@ let verify_receipt = let of_payment_json = if use_legacy_json then Fn.compose - (Result.map ~f:User_command.read_all_proofs_from_disk) + (Result.map + ~f: + Mina_block.Legacy_format.User_command + .to_stable_user_command ) Mina_block.Legacy_format.User_command.of_yojson else User_command.Stable.Latest.of_yojson in let of_proof_json = let unwrap_proof = Tuple2.map_snd - ~f:(List.map ~f:User_command.read_all_proofs_from_disk) + ~f: + (List.map + ~f: + Mina_block.Legacy_format.User_command + .to_stable_user_command ) in if use_legacy_json then Fn.compose @@ -950,23 +957,24 @@ let currency_in_ledger = let constraint_system_digests = Command.async ~summary:"Print MD5 digest of each SNARK constraint" - (Command.Param.return (fun () -> - let signature_kind = Mina_signature_kind.t_DEPRECATED in - let constraint_constants = - Genesis_constants.Compiled.constraint_constants - in - let proof_level = Genesis_constants.Compiled.proof_level in - let all = - Transaction_snark.constraint_system_digests ~signature_kind - ~constraint_constants () - @ Blockchain_snark.Blockchain_snark_state.constraint_system_digests - ~proof_level ~constraint_constants () - in - let all = - List.sort ~compare:(fun (k1, _) (k2, _) -> String.compare k1 k2) all - in - List.iter all ~f:(fun (k, v) -> printf "%s\t%s\n" k (Md5.to_hex v)) ; - Deferred.unit ) ) + (let open Command.Let_syntax in + let%map signature_kind = Cli_lib.Flag.signature_kind in + fun () -> + let constraint_constants = + Genesis_constants.Compiled.constraint_constants + in + let proof_level = Genesis_constants.Compiled.proof_level in + let all = + Transaction_snark.constraint_system_digests ~signature_kind + ~constraint_constants () + @ Blockchain_snark.Blockchain_snark_state.constraint_system_digests + ~proof_level ~constraint_constants () + in + let all = + List.sort ~compare:(fun (k1, _) (k2, _) -> String.compare k1 k2) all + in + List.iter all ~f:(fun (k, v) -> printf "%s\t%s\n" k (Md5.to_hex v)) ; + Deferred.unit) let snark_job_list = let open Deferred.Let_syntax in @@ -1844,7 +1852,11 @@ let compile_time_constants = conf_dir ^/ "daemon.json" in let open Async in - let%map ({ consensus_constants; _ } as precomputed_values), _ = + let%map { consensus_constants; constraint_constants; _ }, _, _ = + (* Signature kind Testnet is used here as a stub + Neither constraint_constants nor consensus_constants are dependent + on signature kind. + *) config_file |> Genesis_ledger_helper.load_config_json >>| Or_error.ok >>| Option.value ~default: @@ -1855,6 +1867,7 @@ let compile_time_constants = ~constraint_constants ~logger:(Logger.null ()) ~proof_level ~cli_proof_level:None ~genesis_dir ~genesis_backing_type:Stable_db + ~cli_signature_kind:(Some Testnet) >>| Or_error.ok_exn in let all_constants = @@ -1869,12 +1882,9 @@ let compile_time_constants = ; ( "coinbase" , `String (Currency.Amount.to_mina_string - precomputed_values.constraint_constants.coinbase_amount ) - ) + constraint_constants.coinbase_amount ) ) ; ( "block_window_duration_ms" - , `Int - precomputed_values.constraint_constants - .block_window_duration_ms ) + , `Int constraint_constants.block_window_duration_ms ) ; ("delta", `Int (Unsigned.UInt32.to_int consensus_constants.delta)) ; ( "sub_windows_per_window" , `Int @@ -2146,8 +2156,7 @@ let receipt_chain_hash = ~doc: "NN For a zkApp, 0 for fee payer or 1-based index of account update" (optional string) - in - let signature_kind = Mina_signature_kind.t_DEPRECATED in + and signature_kind = Cli_lib.Flag.signature_kind in fun () -> let previous_hash = Receipt.Chain_hash.of_base58_check_exn previous_hash @@ -2290,21 +2299,21 @@ let thread_graph = exit 1 ) ) let signature_kind = - Command.basic - ~summary:"Print the signature kind that this binary is compiled with" + Command.async + ~summary:"Print the signature kind that this executable is configured with" (let%map.Command () = Command.Param.return () in fun () -> - let signature_kind_string = - match Mina_signature_kind.t_DEPRECATED with - | Mainnet -> - "mainnet" - | Testnet -> - "testnet" - | Other_network s -> - (* Prefix string to disambiguate *) - "other network: " ^ s + let env_val = + Option.map ~f:Mina_signature_kind.of_string + @@ Sys.getenv "MINA_SIGNATURE_KIND" in - Core.print_endline signature_kind_string ) + match env_val with + | Some v -> + Core.print_endline @@ Mina_signature_kind.to_string v ; + Deferred.unit + | None -> + Format.eprintf "Signature kind not specified\n" ; + exit 1 ) let test_genesis_creation = Command.async ~summary:"Test genesis creation" diff --git a/src/app/cli/src/init/mina_run.ml b/src/app/cli/src/init/mina_run.ml index 453c9491c29d..68680b53329d 100644 --- a/src/app/cli/src/init/mina_run.ml +++ b/src/app/cli/src/init/mina_run.ml @@ -393,7 +393,7 @@ let setup_local_server ?(client_trustlist = []) ?rest_server_port ] ; Mina_metrics.(Counter.inc_one Snark_work.snark_work_assigned_rpc) ; - Deferred.return (Some spec) + Deferred.return @@ Some (spec, Mina_lib.signature_kind mina) | Some (Error (`Failed_to_generate_inputs (zkapp_cmd, e))) -> let open Mina_base.Zkapp_command in [%log error] diff --git a/src/app/cli/src/init/test_ledger_application.ml b/src/app/cli/src/init/test_ledger_application.ml index c052f7eadf2a..89acd5a80cf1 100644 --- a/src/app/cli/src/init/test_ledger_application.ml +++ b/src/app/cli/src/init/test_ledger_application.ml @@ -158,8 +158,8 @@ let apply_txs ~transfer_parties_get_actions_events ~action_elements Staged_ledger.Test_helpers.update_coinbase_stack_and_get_data_impl ~first_partition_slots ~is_new_stack:(not no_new_stack) ~no_second_partition:(not has_second_partition) ~constraint_constants - ~logger ~global_slot ~signature_kind:Mina_signature_kind.Testnet ledger - pending_coinbase zkapps' prev_state_view + ~logger ~global_slot ~signature_kind:Testnet ledger pending_coinbase + zkapps' prev_state_view (prev_protocol_state_hash, prev_protocol_state_body_hash) with | Ok (b, _, _, _, _) -> diff --git a/src/app/cli/src/init/transaction_snark_profiler.ml b/src/app/cli/src/init/transaction_snark_profiler.ml index 618eb16d6975..38711da60c07 100644 --- a/src/app/cli/src/init/transaction_snark_profiler.ml +++ b/src/app/cli/src/init/transaction_snark_profiler.ml @@ -91,7 +91,7 @@ let main ~proof_cache_db ~(genesis_constants : Genesis_constants.t) num_transactions repeats preeval use_zkapps () = Test_util.with_randomness 123456789 (fun () -> let module T = Transaction_snark.Make (struct - let signature_kind = Mina_signature_kind.t_DEPRECATED + let signature_kind = Mina_signature_kind.Testnet let constraint_constants = constraint_constants diff --git a/src/app/cli/src/mina_mainnet_signatures.ml b/src/app/cli/src/mina_mainnet_signatures.ml deleted file mode 100644 index d6e6624c9ad9..000000000000 --- a/src/app/cli/src/mina_mainnet_signatures.ml +++ /dev/null @@ -1 +0,0 @@ -let () = Mina_cli_entrypoint.linkme diff --git a/src/app/cli/src/mina_testnet_signatures.ml b/src/app/cli/src/mina_testnet_signatures.ml deleted file mode 100644 index d6e6624c9ad9..000000000000 --- a/src/app/cli/src/mina_testnet_signatures.ml +++ /dev/null @@ -1 +0,0 @@ -let () = Mina_cli_entrypoint.linkme diff --git a/src/app/delegation_verify/delegation_verify.ml b/src/app/delegation_verify/delegation_verify.ml index f3a7d96e889f..24751ca8a623 100644 --- a/src/app/delegation_verify/delegation_verify.ml +++ b/src/app/delegation_verify/delegation_verify.ml @@ -45,12 +45,19 @@ let timestamp = anon ("timestamp" %: string) let instantiate_verify_functions ~logger ~genesis_constants - ~constraint_constants ~proof_level ~cli_proof_level ~signature_kind = + ~constraint_constants ~proof_level ~cli_proof_level ~cli_signature_kind = function | None -> - Deferred.return - (Verifier.verify_functions ~constraint_constants ~proof_level - ~signature_kind () ) + let%map signature_kind = + match cli_signature_kind with + | None -> + Output.display_error "signature kind not defined" ; + exit 4 + | Some signature_kind -> + return signature_kind + in + Verifier.verify_functions ~constraint_constants ~proof_level + ~signature_kind () | Some config_file -> let%bind.Deferred precomputed_values = let%bind.Deferred.Or_error config_json = @@ -63,12 +70,12 @@ let instantiate_verify_functions ~logger ~genesis_constants in Genesis_ledger_helper.init_from_config_file ~logger ~proof_level ~constraint_constants ~genesis_constants ~cli_proof_level - ~genesis_backing_type:Stable_db config + ~genesis_backing_type:Stable_db ~cli_signature_kind config in - let%map.Deferred precomputed_values = + let%map.Deferred precomputed_values, signature_kind = match precomputed_values with - | Ok (precomputed_values, _) -> - Deferred.return precomputed_values + | Ok (precomputed_values, _, signature_kind) -> + Deferred.return (precomputed_values, signature_kind) | Error _ -> Output.display_error "fail to read config file" ; exit 4 @@ -154,7 +161,8 @@ let filesystem_command = let%map_open block_dir = block_dir_flag and inputs = anon (sequence ("filename" %: Filename.arg_type)) and no_checks = no_checks_flag - and config_file = config_flag in + and config_file = config_flag + and cli_signature_kind = Cli_lib.Flag.signature_kind_opt in fun () -> let logger = Logger.create () in let genesis_constants = Genesis_constants.Compiled.genesis_constants in @@ -162,11 +170,10 @@ let filesystem_command = Genesis_constants.Compiled.constraint_constants in let proof_level = Genesis_constants.Compiled.proof_level in - let signature_kind = Mina_signature_kind.t_DEPRECATED in let%bind.Deferred verify_blockchain_snarks, verify_transaction_snarks = instantiate_verify_functions ~logger config_file ~genesis_constants ~constraint_constants ~proof_level ~cli_proof_level:None - ~signature_kind + ~cli_signature_kind in let submission_paths = get_filenames inputs in let module V = Make_verifier (struct @@ -194,7 +201,8 @@ let cassandra_command = and config_file = config_flag and keyspace = keyspace_flag and period_start = timestamp - and period_end = timestamp in + and period_end = timestamp + and cli_signature_kind = Cli_lib.Flag.signature_kind_opt in fun () -> let open Deferred.Let_syntax in let logger = Logger.create () in @@ -203,12 +211,10 @@ let cassandra_command = Genesis_constants.Compiled.constraint_constants in let proof_level = Genesis_constants.Compiled.proof_level in - - let signature_kind = Mina_signature_kind.t_DEPRECATED in let%bind.Deferred verify_blockchain_snarks, verify_transaction_snarks = instantiate_verify_functions ~logger config_file ~genesis_constants ~constraint_constants ~proof_level ~cli_proof_level:None - ~signature_kind + ~cli_signature_kind in let module V = Make_verifier (struct include Submission.Cassandra @@ -235,7 +241,9 @@ let stdin_command = Command.async ~summary:"Verify submissions and blocks read from standard input" Command.Let_syntax.( - let%map_open config_file = config_flag and no_checks = no_checks_flag in + let%map_open config_file = config_flag + and no_checks = no_checks_flag + and cli_signature_kind = Cli_lib.Flag.signature_kind_opt in fun () -> let open Deferred.Let_syntax in let logger = Logger.create () in @@ -244,11 +252,10 @@ let stdin_command = Genesis_constants.Compiled.constraint_constants in let proof_level = Genesis_constants.Compiled.proof_level in - let signature_kind = Mina_signature_kind.t_DEPRECATED in let%bind.Deferred verify_blockchain_snarks, verify_transaction_snarks = instantiate_verify_functions ~logger config_file ~genesis_constants ~constraint_constants ~proof_level ~cli_proof_level:None - ~signature_kind + ~cli_signature_kind in let module V = Make_verifier (struct include Submission.Stdin diff --git a/src/app/dump_blocks/encoding.ml b/src/app/dump_blocks/encoding.ml index c4b0924e6cb6..1d067ea52d0f 100644 --- a/src/app/dump_blocks/encoding.ml +++ b/src/app/dump_blocks/encoding.ml @@ -99,7 +99,7 @@ module Sexp_precomputed : S with type t = Mina_block.Precomputed.t = struct let name = "sexp" - let of_breadcrumb = precomputed_of_breadcrumb + let of_breadcrumb = precomputed_of_breadcrumb ~signature_kind:Testnet let to_string b = Mina_block.Precomputed.sexp_of_t b |> Sexp.to_string |> append_newline @@ -112,7 +112,7 @@ module Json_precomputed : S with type t = Mina_block.Precomputed.t = struct let name = "json" - let of_breadcrumb = precomputed_of_breadcrumb + let of_breadcrumb = precomputed_of_breadcrumb ~signature_kind:Testnet let to_string b = Mina_block.Precomputed.to_yojson b @@ -128,7 +128,7 @@ module Binary_precomputed : S with type t = Mina_block.Precomputed.t = struct let name = "binary" - let of_breadcrumb = precomputed_of_breadcrumb + let of_breadcrumb = precomputed_of_breadcrumb ~signature_kind:Testnet let to_string = Binable.to_string (module Mina_block.Precomputed.Stable.Latest) diff --git a/src/app/print_blockchain_snark_vk/print_blockchain_snark_vk.ml b/src/app/print_blockchain_snark_vk/print_blockchain_snark_vk.ml index 2a8cbc4d908d..2d56c1228412 100644 --- a/src/app/print_blockchain_snark_vk/print_blockchain_snark_vk.ml +++ b/src/app/print_blockchain_snark_vk/print_blockchain_snark_vk.ml @@ -4,7 +4,8 @@ let () = Async.Thread_safe.block_on_async_exn (fun () -> let () = Format.eprintf "Generating transaction snark circuit..@." in let module Transaction_snark_instance = Transaction_snark.Make (struct - let signature_kind = Mina_signature_kind.t_DEPRECATED + (* This app is only used as a test *) + let signature_kind = Mina_signature_kind.Testnet let constraint_constants = Genesis_constants.Compiled.constraint_constants diff --git a/src/app/replayer/replayer.ml b/src/app/replayer/replayer.ml index 83999ee780a5..69833382ee13 100644 --- a/src/app/replayer/replayer.ml +++ b/src/app/replayer/replayer.ml @@ -514,9 +514,8 @@ let get_parent_state_view ~pool block_id = in return state_view -let zkapp_command_to_transaction ~proof_cache_db ~logger ~pool +let zkapp_command_to_transaction ~proof_cache_db ~logger ~signature_kind ~pool (cmd : Sql.Zkapp_command.t) : Mina_transaction.Transaction.t Deferred.t = - let signature_kind = Mina_signature_kind.t_DEPRECATED in let query_db = Mina_caqti.query pool in (* use dummy authorizations *) let%bind (fee_payer : Account_update.Fee_payer.t) = @@ -633,7 +632,7 @@ let write_replayer_checkpoint ~logger ~ledger ~last_global_slot_since_genesis let main ~input_file ~output_file_opt ~archive_uri ~continue_on_error ~checkpoint_interval ~checkpoint_output_folder_opt ~checkpoint_file_prefix ~genesis_dir_opt ~log_json ~log_level ~log_filename ~file_log_level - ~constraint_constants ~proof_level () = + ~constraint_constants ~proof_level ~signature_kind () = Cli_lib.Stdout_log.setup log_json log_level ; Option.iter log_filename ~f:(fun log_filename -> Logger.Consumer_registry.register ~id:"default" @@ -641,7 +640,6 @@ let main ~input_file ~output_file_opt ~archive_uri ~continue_on_error ~transport:(Logger_file_system.evergrowing ~log_filename) () ) ; let proof_cache_db = Proof_cache_tag.create_identity_db () in - let signature_kind = Mina_signature_kind.t_DEPRECATED in let logger = Logger.create () in let json = Yojson.Safe.from_file input_file in let input = @@ -1485,7 +1483,8 @@ let main ~input_file ~output_file_opt ~archive_uri ~continue_on_error ~cmd_global_slot_since_genesis:zkc.global_slot_since_genesis in let%bind txn = - zkapp_command_to_transaction ~proof_cache_db ~logger ~pool zkc + zkapp_command_to_transaction ~proof_cache_db ~logger + ~signature_kind ~pool zkc in apply_commands ~block_txns:(txn :: block_txns) ~last_global_slot_since_genesis:zkc.global_slot_since_genesis @@ -1511,7 +1510,8 @@ let main ~input_file ~output_file_opt ~archive_uri ~continue_on_error ~cmd_global_slot_since_genesis:zkc.global_slot_since_genesis in let%bind txn = - zkapp_command_to_transaction ~proof_cache_db ~logger ~pool zkc + zkapp_command_to_transaction ~proof_cache_db ~logger + ~signature_kind ~pool zkc in apply_commands ~block_txns:(txn :: block_txns) ~last_global_slot_since_genesis:zkc.global_slot_since_genesis @@ -1544,7 +1544,8 @@ let main ~input_file ~output_file_opt ~archive_uri ~continue_on_error ~cmd_global_slot_since_genesis:zkc.global_slot_since_genesis in let%bind txn = - zkapp_command_to_transaction ~proof_cache_db ~logger ~pool zkc + zkapp_command_to_transaction ~proof_cache_db ~logger + ~signature_kind ~pool zkc in apply_commands ~block_txns:(txn :: block_txns) ~last_global_slot_since_genesis:zkc.global_slot_since_genesis @@ -1620,7 +1621,8 @@ let main ~input_file ~output_file_opt ~archive_uri ~continue_on_error ~cmd_global_slot_since_genesis:zkc.global_slot_since_genesis in let%bind txn = - zkapp_command_to_transaction ~proof_cache_db ~logger ~pool zkc + zkapp_command_to_transaction ~proof_cache_db ~logger + ~signature_kind ~pool zkc in apply_commands ~block_txns:(txn :: block_txns) ~last_global_slot_since_genesis:zkc.global_slot_since_genesis @@ -1738,8 +1740,10 @@ let () = and log_json = Cli_lib.Flag.Log.json and log_level = Cli_lib.Flag.Log.level and file_log_level = Cli_lib.Flag.Log.file_log_level - and log_filename = Cli_lib.Flag.Log.file in + and log_filename = Cli_lib.Flag.Log.file + and signature_kind = Cli_lib.Flag.signature_kind in main ~input_file ~output_file_opt ~archive_uri ~checkpoint_interval ~continue_on_error ~checkpoint_output_folder_opt ~checkpoint_file_prefix ~genesis_dir_opt ~log_json ~log_level - ~file_log_level ~log_filename ~constraint_constants ~proof_level ))) + ~file_log_level ~log_filename ~constraint_constants ~proof_level + ~signature_kind ))) diff --git a/src/app/rosetta/dune b/src/app/rosetta/dune index d1120e13d020..d07a5206540d 100644 --- a/src/app/rosetta/dune +++ b/src/app/rosetta/dune @@ -16,46 +16,4 @@ (instrumentation (backend bisect_ppx)) (preprocess - (pps ppx_version))) - -(executable - (package rosetta) - (name rosetta_testnet_signatures) - (public_name rosetta-testnet) - (modules rosetta_testnet_signatures) - (modes native) - (libraries - lib - mina_signature_kind.testnet - async - core_kernel - base - async.async_command - core - async_kernel - genesis_constants) - (instrumentation - (backend bisect_ppx)) - (preprocess - (pps ppx_version))) - -(executable - (package rosetta) - (name rosetta_mainnet_signatures) - (public_name rosetta-mainnet) - (modules rosetta_mainnet_signatures) - (modes native) - (libraries - lib - mina_signature_kind.mainnet - async - core_kernel - base - async.async_command - core - async_kernel - genesis_constants) - (instrumentation - (backend bisect_ppx)) - (preprocess - (pps ppx_version))) + (pps ppx_version))) \ No newline at end of file diff --git a/src/app/rosetta/lib/construction.ml b/src/app/rosetta/lib/construction.ml index e9b6cb54ca1f..5c9624958dab 100644 --- a/src/app/rosetta/lib/construction.ml +++ b/src/app/rosetta/lib/construction.ml @@ -618,13 +618,14 @@ module Parse = struct -> unit -> (bool, Errors.t) M.t ; lift : 'a 'e. ('a, 'e) Result.t -> ('a, 'e) M.t + ; signature_kind : Mina_signature_kind.t } end module Real = T (Deferred.Result) module Mock = T (Result) - let real : Real.t = + let real ~signature_kind : Real.t = { verify_payment_signature = (fun ~payment ~signature () -> let open Deferred.Result in @@ -675,11 +676,11 @@ module Parse = struct Signed_command_payload.create ~fee ~fee_payer_pk ~nonce ~valid_until ~memo ~body in - let signature_kind = Mina_signature_kind.t_DEPRECATED in Option.is_some @@ Signed_command.create_with_signature_checked ~signature_kind signature signer payload ) ; lift = Deferred.return + ; signature_kind } end @@ -1082,8 +1083,8 @@ module Submit = struct module Mock = Impl (Result) end -let router ~get_graphql_uri_or_error ~with_db ~logger ~account_creation_fee - ~minimum_user_command_fee (route : string list) body = +let router ~signature_kind ~get_graphql_uri_or_error ~with_db ~logger + ~account_creation_fee ~minimum_user_command_fee (route : string list) body = [%log debug] "Handling /construction/ $route" ~metadata:[ ("route", `List (List.map route ~f:(fun s -> `String s))) ] ; let open Deferred.Result.Let_syntax in @@ -1151,7 +1152,9 @@ let router ~get_graphql_uri_or_error ~with_db ~logger ~account_creation_fee |> Errors.Lift.wrap in let%map res = - Parse.Real.handle ~minimum_user_command_fee ~env:Parse.Env.real req + Parse.Real.handle ~minimum_user_command_fee + ~env:(Parse.Env.real ~signature_kind) + req |> Errors.Lift.wrap in Construction_parse_response.to_yojson res diff --git a/src/app/rosetta/lib/dune b/src/app/rosetta/lib/dune index 7515da8d47cb..808b1bc2499b 100644 --- a/src/app/rosetta/lib/dune +++ b/src/app/rosetta/lib/dune @@ -23,6 +23,7 @@ core sexplib0 ;;local libraries + cli_lib mina_wire_types mina_signature_kind mina_base.import diff --git a/src/app/rosetta/lib/rosetta.ml b/src/app/rosetta/lib/rosetta.ml index 1ca29d31d30c..788826ab4448 100644 --- a/src/app/rosetta/lib/rosetta.ml +++ b/src/app/rosetta/lib/rosetta.ml @@ -2,7 +2,8 @@ open Core_kernel open Async open Rosetta_lib -let router ~graphql_uri ~minimum_user_command_fee ~account_creation_fee +let router ~signature_kind ~graphql_uri ~minimum_user_command_fee + ~account_creation_fee ~(pool : ( (Caqti_async.connection, [> Caqti_error.connect ]) Mina_caqti.Pool.t , [ `App of Errors.t ] ) @@ -54,8 +55,9 @@ let router ~graphql_uri ~minimum_user_command_fee ~account_creation_fee Block.router tl body ~graphql_uri ~logger ~with_db:with_db' ~minimum_user_command_fee | "construction" :: tl -> - Construction.router tl body ~get_graphql_uri_or_error ~logger - ~with_db:with_db' ~minimum_user_command_fee ~account_creation_fee + Construction.router tl body ~signature_kind ~get_graphql_uri_or_error + ~logger ~with_db:with_db' ~minimum_user_command_fee + ~account_creation_fee | "search" :: tl -> let%bind graphql_uri = get_graphql_uri_or_error () in Search.router tl body ~graphql_uri ~logger ~with_db:with_db' @@ -105,19 +107,19 @@ let pg_log_data ~logger ~pool : unit Deferred.t = ~metadata:[ ("error", `String (Errors.show err)) ] ; Deferred.unit -let server_handler ~pool ~graphql_uri ~logger ~minimum_user_command_fee - ~account_creation_fee ~body _sock req = +let server_handler ~signature_kind ~pool ~graphql_uri ~logger + ~minimum_user_command_fee ~account_creation_fee ~body _sock req = let uri = Cohttp_async.Request.uri req in let%bind body = Cohttp_async.Body.to_string body in let route = List.tl_exn (String.split ~on:'/' (Uri.path uri)) in let%bind result = match Yojson.Safe.from_string body with | body -> - router route body ~pool ~graphql_uri ~logger ~minimum_user_command_fee - ~account_creation_fee + router route body ~signature_kind ~pool ~graphql_uri ~logger + ~minimum_user_command_fee ~account_creation_fee | exception Yojson.Json_error "Blank input data" -> - router route `Null ~pool ~graphql_uri ~logger ~minimum_user_command_fee - ~account_creation_fee + router route `Null ~signature_kind ~pool ~graphql_uri ~logger + ~minimum_user_command_fee ~account_creation_fee | exception Yojson.Json_error err -> Errors.create ~context:"JSON in request malformed" (`Json_parse (Some err)) @@ -153,7 +155,7 @@ let server_handler ~pool ~graphql_uri ~logger ~minimum_user_command_fee [%log warn] ~metadata "Error response: $error" ; respond_500 error -let command ~minimum_user_command_fee ~account_creation_fee = +let command ?signature_kind ~minimum_user_command_fee ~account_creation_fee () = let open Command.Let_syntax in let%map_open archive_uri = flag "--archive-uri" ~aliases:[ "archive-uri" ] @@ -171,6 +173,9 @@ let command ~minimum_user_command_fee ~account_creation_fee = and port = flag "--port" ~aliases:[ "port" ] ~doc:"Port to expose Rosetta server" (required int) + and signature_kind = + Option.value_map signature_kind ~default:Cli_lib.Flag.signature_kind + ~f:Command.Param.return in let open Deferred.Let_syntax in fun () -> @@ -229,8 +234,8 @@ let command ~minimum_user_command_fee ~account_creation_fee = env_var ~metadata ; ignore (exit 1) ) ) (Async.Tcp.Where_to_listen.bind_to All_addresses (On_port port)) - (server_handler ~pool ~graphql_uri ~logger ~minimum_user_command_fee - ~account_creation_fee ) + (server_handler ~signature_kind ~pool ~graphql_uri ~logger + ~minimum_user_command_fee ~account_creation_fee ) in [%log info] ~metadata:[ ("port", `Int port) ] diff --git a/src/app/rosetta/lib/signer.ml b/src/app/rosetta/lib/signer.ml index 47b04a27cf72..d75c01f23949 100644 --- a/src/app/rosetta/lib/signer.ml +++ b/src/app/rosetta/lib/signer.ml @@ -39,7 +39,7 @@ module Keys = struct end (* Returns signed_transaction_string *) -let sign ~(keys : Keys.t) ~unsigned_transaction_string = +let sign ~signature_kind ~(keys : Keys.t) ~unsigned_transaction_string = let open Result.Let_syntax in let%bind json = try return (Yojson.Safe.from_string unsigned_transaction_string) @@ -57,7 +57,6 @@ let sign ~(keys : Keys.t) ~unsigned_transaction_string = |> Result.ok |> Option.value_exn ~here:[%here] ?error:None ?message:None in - let signature_kind = Mina_signature_kind.t_DEPRECATED in (* TODO: Should we use the signer_input explicitly here to dogfood it? *) (* Should we just inline that here? *) let signature = @@ -71,7 +70,7 @@ let sign ~(keys : Keys.t) ~unsigned_transaction_string = [%test_eq: Signature.t] signature signature' ; signature |> Signature.Raw.encode -let verify ~public_key_hex_bytes ~signed_transaction_string = +let verify ~signature_kind ~public_key_hex_bytes ~signed_transaction_string = let open Result.Let_syntax in let%bind json = try return (Yojson.Safe.from_string signed_transaction_string) @@ -90,7 +89,6 @@ let verify ~public_key_hex_bytes ~signed_transaction_string = |> Option.value_exn ~here:[%here] ?error:None ?message:None in let message = Signed_command.to_input_legacy user_command_payload in - let signature_kind = Mina_signature_kind.t_DEPRECATED in Schnorr.Legacy.verify ~signature_kind signed_transaction.signature (Snark_params.Tick.Inner_curve.of_affine public_key) message diff --git a/src/app/rosetta/ocaml-signer/dune b/src/app/rosetta/ocaml-signer/dune index f4ac94585239..a8a3f16d9f5d 100644 --- a/src/app/rosetta/ocaml-signer/dune +++ b/src/app/rosetta/ocaml-signer/dune @@ -13,6 +13,7 @@ async_unix async.async_command ;;local libraries + cli_lib kimchi_pasta kimchi_pasta.basic pickles @@ -55,44 +56,4 @@ ppx_base ppx_let ppx_version - ppx_compare))) - -(executable - (package signer) - (name signer_testnet_signatures) - (public_name signer-testnet) - (modes native) - (modules signer_testnet_signatures) - (libraries signer_cli async core_kernel base) - (instrumentation - (backend bisect_ppx)) - (preprocess - (pps - graphql_ppx - ppx_mina - ppx_deriving.show - ppx_deriving_yojson - ppx_base - ppx_let - ppx_version - ppx_compare))) - -(executable - (package signer) - (name signer_mainnet_signatures) - (public_name signer-mainnet) - (modes native) - (modules signer_mainnet_signatures) - (libraries signer_cli async core_kernel base) - (instrumentation - (backend bisect_ppx)) - (preprocess - (pps - graphql_ppx - ppx_mina - ppx_deriving.show - ppx_deriving_yojson - ppx_base - ppx_let - ppx_version - ppx_compare))) + ppx_compare))) \ No newline at end of file diff --git a/src/app/rosetta/ocaml-signer/signer.ml b/src/app/rosetta/ocaml-signer/signer.ml index d03ee8a9786e..da85a236fb70 100644 --- a/src/app/rosetta/ocaml-signer/signer.ml +++ b/src/app/rosetta/ocaml-signer/signer.ml @@ -2,5 +2,5 @@ open Async let () = Command.run - (Command.group ~summary:"OCaml reference signer implementation for Rosetta." - Signer_cli.commands ) + ( Command.group ~summary:"OCaml reference signer implementation for Rosetta." + @@ Signer_cli.commands () ) diff --git a/src/app/rosetta/ocaml-signer/signer_cli.ml b/src/app/rosetta/ocaml-signer/signer_cli.ml index ed16f41e8eae..b964459e10e3 100644 --- a/src/app/rosetta/ocaml-signer/signer_cli.ml +++ b/src/app/rosetta/ocaml-signer/signer_cli.ml @@ -6,7 +6,7 @@ open Rosetta_lib open Signature_lib open Lib -let sign_command = +let sign_command ?signature_kind () = let open Command.Let_syntax in let%map_open unsigned_transaction = flag "--unsigned-transaction" ~aliases:[ "unsigned-transaction" ] @@ -14,6 +14,9 @@ let sign_command = and private_key = flag "--private-key" ~aliases:[ "private-key" ] ~doc:"Private key hex bytes" (required string) + and signature_kind = + Option.value_map signature_kind ~default:Cli_lib.Flag.signature_kind + ~f:Command.Param.return in let open Deferred.Let_syntax in fun () -> @@ -22,7 +25,8 @@ let sign_command = with _ -> Signer.Keys.of_private_key_box private_key in match - Signer.sign ~keys ~unsigned_transaction_string:unsigned_transaction + Signer.sign ~signature_kind ~keys + ~unsigned_transaction_string:unsigned_transaction with | Ok signature -> printf "%s\n" signature ; return () @@ -30,7 +34,7 @@ let sign_command = eprintf "Failed to sign transaction %s" (Errors.show e) ; exit 1 -let verify_message_command = +let verify_message_command ?signature_kind () = let open Command.Let_syntax in let%map_open signature = flag "--signature" ~doc:"Rosetta signature" (required string) @@ -39,6 +43,9 @@ let verify_message_command = and public_key = flag "--public-key" ~aliases:[ "public-key" ] ~doc:"Public key hex bytes" (required string) + and signature_kind = + Option.value_map signature_kind ~default:Cli_lib.Flag.signature_kind + ~f:Command.Param.return in let open Deferred.Let_syntax in fun () -> @@ -46,14 +53,14 @@ let verify_message_command = Option.value_exn (Mina_base.Signature.Raw.decode signature) in let pk = Rosetta_coding.Coding.to_public_key public_key in - match String_sign.verify signature pk message with + match String_sign.verify ~signature_kind signature pk message with | true -> return () | false -> eprintf "Signature does not verify against this public key" ; exit 1 -let verify_command = +let verify_command ?signature_kind () = let open Command.Let_syntax in let%map_open signed_transaction = flag "--signed-transaction" ~aliases:[ "signed-transaction" ] @@ -61,11 +68,14 @@ let verify_command = and public_key = flag "--public-key" ~aliases:[ "public-key" ] ~doc:"Public key hex bytes" (required string) + and signature_kind = + Option.value_map signature_kind ~default:Cli_lib.Flag.signature_kind + ~f:Command.Param.return in let open Deferred.Let_syntax in fun () -> match - Signer.verify ~public_key_hex_bytes:public_key + Signer.verify ~signature_kind ~public_key_hex_bytes:public_key ~signed_transaction_string:signed_transaction with | Ok b when b -> @@ -153,14 +163,16 @@ let convert_signature_command = printf "%s\n" (Mina_base.Signature.Raw.encode (field, scalar)) ; return () -let commands = - [ ("sign", Command.async ~summary:"Sign an unsigned transaction" sign_command) +let commands ?signature_kind () = + [ ( "sign" + , Command.async ~summary:"Sign an unsigned transaction" + @@ sign_command ?signature_kind () ) ; ( "verify" , Command.async ~summary: "Verify the signature of a signed transaction. Exits 0 if the \ signature verifies." - verify_command ) + @@ verify_command ?signature_kind () ) ; ( "derive-public-key" , Command.async ~summary:"Import a private key, returns a public-key" derive_command ) @@ -174,7 +186,7 @@ let commands = convert_signature_command ) ; ( "verify-message" , Command.async ~summary:"Verify a string message was signed properly" - verify_message_command ) + @@ verify_message_command ?signature_kind () ) ; ( "hex-of-private-key-file" , Command.async ~summary:"Read a private key file and display it as hexadecimal" diff --git a/src/app/rosetta/ocaml-signer/signer_mainnet_signatures.ml b/src/app/rosetta/ocaml-signer/signer_mainnet_signatures.ml deleted file mode 100644 index d03ee8a9786e..000000000000 --- a/src/app/rosetta/ocaml-signer/signer_mainnet_signatures.ml +++ /dev/null @@ -1,6 +0,0 @@ -open Async - -let () = - Command.run - (Command.group ~summary:"OCaml reference signer implementation for Rosetta." - Signer_cli.commands ) diff --git a/src/app/rosetta/ocaml-signer/signer_testnet_signatures.ml b/src/app/rosetta/ocaml-signer/signer_testnet_signatures.ml deleted file mode 100644 index d03ee8a9786e..000000000000 --- a/src/app/rosetta/ocaml-signer/signer_testnet_signatures.ml +++ /dev/null @@ -1,6 +0,0 @@ -open Async - -let () = - Command.run - (Command.group ~summary:"OCaml reference signer implementation for Rosetta." - Signer_cli.commands ) diff --git a/src/app/rosetta/rosetta.ml b/src/app/rosetta/rosetta.ml index 410201c70399..95d80ba28aaa 100644 --- a/src/app/rosetta/rosetta.ml +++ b/src/app/rosetta/rosetta.ml @@ -6,5 +6,6 @@ let () = let constraint_constants = Genesis_constants.Compiled.constraint_constants in Command.run (Command.async ~summary:"Run Rosetta process on top of Mina" - (command ~account_creation_fee:constraint_constants.account_creation_fee + (command () + ~account_creation_fee:constraint_constants.account_creation_fee ~minimum_user_command_fee:genesis_constants.minimum_user_command_fee ) ) diff --git a/src/app/rosetta/rosetta_mainnet_signatures.ml b/src/app/rosetta/rosetta_mainnet_signatures.ml deleted file mode 100644 index 410201c70399..000000000000 --- a/src/app/rosetta/rosetta_mainnet_signatures.ml +++ /dev/null @@ -1,10 +0,0 @@ -open Lib.Rosetta -open Async - -let () = - let genesis_constants = Genesis_constants.Compiled.genesis_constants in - let constraint_constants = Genesis_constants.Compiled.constraint_constants in - Command.run - (Command.async ~summary:"Run Rosetta process on top of Mina" - (command ~account_creation_fee:constraint_constants.account_creation_fee - ~minimum_user_command_fee:genesis_constants.minimum_user_command_fee ) ) diff --git a/src/app/rosetta/rosetta_testnet_signatures.ml b/src/app/rosetta/rosetta_testnet_signatures.ml deleted file mode 100644 index 410201c70399..000000000000 --- a/src/app/rosetta/rosetta_testnet_signatures.ml +++ /dev/null @@ -1,10 +0,0 @@ -open Lib.Rosetta -open Async - -let () = - let genesis_constants = Genesis_constants.Compiled.genesis_constants in - let constraint_constants = Genesis_constants.Compiled.constraint_constants in - Command.run - (Command.async ~summary:"Run Rosetta process on top of Mina" - (command ~account_creation_fee:constraint_constants.account_creation_fee - ~minimum_user_command_fee:genesis_constants.minimum_user_command_fee ) ) diff --git a/src/app/runtime_genesis_ledger/runtime_genesis_ledger.ml b/src/app/runtime_genesis_ledger/runtime_genesis_ledger.ml index 8bb8852a08f4..a142e31e05fd 100644 --- a/src/app/runtime_genesis_ledger/runtime_genesis_ledger.ml +++ b/src/app/runtime_genesis_ledger/runtime_genesis_ledger.ml @@ -72,6 +72,7 @@ let is_dirty_proof = function ; supercharged_coinbase_factor = None ; account_creation_fee = None ; fork = _ + ; signature_kind = _ } -> false | _ -> diff --git a/src/app/zkapp_test_transaction/lib/commands.ml b/src/app/zkapp_test_transaction/lib/commands.ml index 9e19d98f9851..0e2b389dc520 100644 --- a/src/app/zkapp_test_transaction/lib/commands.ml +++ b/src/app/zkapp_test_transaction/lib/commands.ml @@ -44,7 +44,7 @@ let get_second_pass_ledger_mask ~ledger ~constraint_constants ~global_slot let print_witnesses ~constraint_constants ~proof_level witnesses = let module T = Transaction_snark.Make (struct - let signature_kind = Mina_signature_kind.t_DEPRECATED + let signature_kind = Mina_signature_kind.Testnet let constraint_constants = constraint_constants @@ -69,7 +69,6 @@ let gen_proof ?(zkapp_account = None) (zkapp_command : Zkapp_command.t) ~(genesis_constants : Genesis_constants.t) ~(proof_level : Genesis_constants.Proof_level.t) ~(constraint_constants : Genesis_constants.Constraint_constants.t) = - let signature_kind = Mina_signature_kind.t_DEPRECATED in let ledger = Ledger.create ~depth:constraint_constants.ledger_depth () in let _v = let id = @@ -134,7 +133,7 @@ let gen_proof ?(zkapp_account = None) (zkapp_command : Zkapp_command.t) get_second_pass_ledger_mask ~ledger ~constraint_constants ~global_slot ~state_body zkapp_command in - Transaction_snark.zkapp_command_witnesses_exn ~signature_kind + Transaction_snark.zkapp_command_witnesses_exn ~signature_kind:Testnet ~constraint_constants ~global_slot ~state_body ~fee_excess:Currency.Amount.Signed.zero [ ( `Pending_coinbase_init_stack pending_coinbase_init_stack @@ -150,7 +149,6 @@ let gen_proof ?(zkapp_account = None) (zkapp_command : Zkapp_command.t) let generate_zkapp_txn (keypair : Signature_lib.Keypair.t) (ledger : Ledger.t) ~zkapp_kp ~(genesis_constants : Genesis_constants.t) ~proof_level ~constraint_constants = - let signature_kind = Mina_signature_kind.t_DEPRECATED in let receiver = Quickcheck.random_value Signature_lib.Public_key.Compressed.gen in @@ -221,7 +219,7 @@ let generate_zkapp_txn (keypair : Signature_lib.Keypair.t) (ledger : Ledger.t) get_second_pass_ledger_mask ~ledger ~constraint_constants ~global_slot ~state_body zkapp_command in - Transaction_snark.zkapp_command_witnesses_exn ~signature_kind + Transaction_snark.zkapp_command_witnesses_exn ~signature_kind:Testnet ~constraint_constants ~global_slot ~state_body ~fee_excess:Currency.Amount.Signed.zero [ ( `Pending_coinbase_init_stack pending_coinbase_init_stack diff --git a/src/config/dev.mlh b/src/config/dev.mlh index c47c5a0223ba..ec71921dd395 100644 --- a/src/config/dev.mlh +++ b/src/config/dev.mlh @@ -63,7 +63,6 @@ [%%define plugins true] [%%define genesis_ledger "test"] -[%%define genesis_state_timestamp "2019-01-30 12:00:00-08:00"] [%%define block_window_duration 2000] [%%define itn_features true] [%%define print_versioned_types false] @@ -77,10 +76,6 @@ (*END src/config/fork.mlh*) -(*BEGIN src/config/features/dev.mlh*) -[%%define network "testnet"] -(*END src/config/features/dev.mlh*) - [%%undef compaction_interval] [%%define vrf_poll_interval 0] [%%undef zkapp_cmd_limit] diff --git a/src/config/devnet.mlh b/src/config/devnet.mlh deleted file mode 100644 index 11040de3409c..000000000000 --- a/src/config/devnet.mlh +++ /dev/null @@ -1,84 +0,0 @@ -[%%define ledger_depth 35] - -(*BEGIN src/config/curve/medium.mlh*) -[%%define curve_size 255] -(*END src/config/curve/medium.mlh*) - - -(*BEGIN src/config/coinbase/realistic.mlh*) -[%%define coinbase "720"] -(*END src/config/coinbase/realistic.mlh*) - - -(*BEGIN src/config/scan_state/point2tps.mlh*) -[%%define scan_state_with_tps_goal true] -(* 0.2TPS * 10 *) -[%%define scan_state_tps_goal_x10 2] -[%%define scan_state_work_delay 2] -(*END src/config/scan_state/point2tps.mlh*) - - -(*BEGIN src/config/proof_level/full.mlh*) -[%%define proof_level "full"] -(*END src/config/proof_level/full.mlh*) - - -(*BEGIN src/config/txpool_size.mlh*) -(* Note this value needs to be consistent across nodes to prevent spurious bans. - see comment in transaction_pool.ml for more details. *) -[%%define pool_max_size 3000] -[%%undef zkapp_cmd_limit] -(*END src/config/txpool_size.mlh*) - - -(*BEGIN src/config/account_creation_fee/realistic.mlh*) -[%%define account_creation_fee_int "1.0"] -(*END src/config/account_creation_fee/realistic.mlh*) - - -(*BEGIN src/config/amount_defaults/realistic.mlh*) -[%%define default_transaction_fee "0.25"] -[%%define default_snark_worker_fee "0.1"] -[%%define minimum_user_command_fee "0.001"] -(*END src/config/amount_defaults/realistic.mlh*) - - -(*BEGIN src/config/supercharged_coinbase_factor/one.mlh*) -[%%define supercharged_coinbase_factor 1] -(*END src/config/supercharged_coinbase_factor/one.mlh*) - -(* custom consensus parameters for the testnet release *) -[%%define k 290] -[%%define delta 0] -[%%define slots_per_epoch 7140] -[%%define slots_per_sub_window 7] -[%%define sub_windows_per_window 11] -[%%define grace_period_slots 2160] -[%%define plugins false] -[%%define genesis_ledger "testnet_postake"] -[%%define genesis_state_timestamp "2021-09-24T00:00:00Z"] -[%%define block_window_duration 180000] -[%%define print_versioned_types false] -[%%define test_full_epoch false] - -(*BEGIN src/config/fork.mlh*) -[%%undef fork_blockchain_length] -[%%undef fork_state_hash] -[%%undef fork_global_slot_since_genesis] -[%%undef zkapp_cmd_limit] -(*END src/config/fork.mlh*) - - -(*BEGIN src/config/features/public_testnet.mlh*) -[%%define network "testnet"] -(*END src/config/features/public_testnet.mlh*) - -(* 2*block_window_duration *) -[%%define compaction_interval 360000] -[%%define vrf_poll_interval 5000] -[%%define zkapp_cmd_limit 24] -[%%undef scan_state_transaction_capacity_log_2] - -(* Constants determining sync ledger query/response size*) -[%%define sync_ledger_max_subtree_depth 8] -[%%define sync_ledger_default_subtree_depth 6] \ No newline at end of file diff --git a/src/config/lightnet.mlh b/src/config/lightnet.mlh index 4a3cdcebd263..44e34f3bb4af 100644 --- a/src/config/lightnet.mlh +++ b/src/config/lightnet.mlh @@ -56,7 +56,6 @@ [%%define grace_period_slots 200] [%%define plugins false] [%%define genesis_ledger "testnet_postake"] -[%%define genesis_state_timestamp "2020-09-16 03:15:00-07:00"] [%%define block_window_duration 20000] [%%define itn_features true] [%%define print_versioned_types false] @@ -69,11 +68,6 @@ [%%undef zkapp_cmd_limit] (*END src/config/fork.mlh*) - -(*BEGIN src/config/features/public_testnet.mlh*) -[%%define network "testnet"] -(*END src/config/features/public_testnet.mlh*) - (* 2*block_window_duration *) [%%define compaction_interval 360000] [%%define vrf_poll_interval 5000] diff --git a/src/config/mainnet.mlh b/src/config/public_network.mlh similarity index 90% rename from src/config/mainnet.mlh rename to src/config/public_network.mlh index 9051eada482d..a74a71446638 100644 --- a/src/config/mainnet.mlh +++ b/src/config/public_network.mlh @@ -47,7 +47,6 @@ [%%define supercharged_coinbase_factor 1] (*END src/config/supercharged_coinbase_factor/one.mlh*) -(* custom consensus parameters for the mainnet release *) [%%define k 290] [%%define delta 0] [%%define slots_per_epoch 7140] @@ -56,7 +55,6 @@ [%%define grace_period_slots 2160] [%%define plugins false] [%%define genesis_ledger "testnet_postake"] -[%%define genesis_state_timestamp "2020-09-16 03:15:00-07:00"] [%%define block_window_duration 180000] [%%define print_versioned_types false] [%%define test_full_epoch false] @@ -68,11 +66,6 @@ [%%undef zkapp_cmd_limit] (*END src/config/fork.mlh*) - -(*BEGIN src/config/features/mainnet.mlh*) -[%%define network "mainnet"] -(*END src/config/features/mainnet.mlh*) - (* 2*block_window_duration *) [%%define compaction_interval 360000] [%%define vrf_poll_interval 5000] diff --git a/src/lib/block_producer/block_producer.ml b/src/lib/block_producer/block_producer.ml index f0e4187a9357..a937f10c22f4 100644 --- a/src/lib/block_producer/block_producer.ml +++ b/src/lib/block_producer/block_producer.ml @@ -237,11 +237,11 @@ let generate_next_state ~commit_id ~zkapp_cmd_limit ~constraint_constants (* TODO: handle transaction inclusion failures here *) let diff_result = Staged_ledger.create_diff ~constraint_constants - ~global_slot staged_ledger ~coinbase_receiver ~logger + ~signature_kind ~global_slot ~log_block_creation + staged_ledger ~coinbase_receiver ~logger ~current_state_view:previous_state_view ~transactions_by_fee:transactions ~get_completed_work - ~log_block_creation ~supercharge_coinbase - ~zkapp_cmd_limit + ~supercharge_coinbase ~zkapp_cmd_limit |> Result.map ~f:(fun (diff, failed_txns) -> if not (List.is_empty failed_txns) then don't_wait_for @@ -918,6 +918,7 @@ let produce ~genesis_breadcrumb ~context:(module Context : CONTEXT) ~prover ~sender:None (* Consider skipping `All here *) ~skip_staged_ledger_verification:`Proofs ~transition_receipt_time + ~signature_kind:Context.signature_kind ~transaction_pool_proxy: { find_by_hash = Network_pool.Transaction_pool.Resource_pool @@ -1450,9 +1451,12 @@ let run_precomputed ~context:(module Context : CONTEXT) ~verifier ~trust_system ~delta_block_chain_proof () in let body = + (* We purposefully ignore some hashes that are already stored in legacy format *) Body.create - (Staged_ledger_diff.write_all_proofs_to_disk ~signature_kind - ~proof_cache_db staged_ledger_diff ) + ( Staged_ledger_diff.write_all_proofs_to_disk ~signature_kind + ~proof_cache_db + @@ Mina_block.Legacy_format.Staged_ledger_diff + .to_stable_staged_ledger_diff staged_ledger_diff ) in let%bind transition = let open Result.Let_syntax in @@ -1491,10 +1495,14 @@ let run_precomputed ~context:(module Context : CONTEXT) ~verifier ~trust_system ~get_completed_work:(Fn.const None) ~trust_system ~parent:crumb ~transition ~sender:None ~skip_staged_ledger_verification:`Proofs - ~transition_receipt_time () + ~transition_receipt_time + ~signature_kind:Context.signature_kind () |> Deferred.Result.map_error ~f:(function | `Invalid_staged_ledger_diff e -> - `Invalid_staged_ledger_diff (e, staged_ledger_diff) + `Invalid_staged_ledger_diff + ( e + , Mina_block.Legacy_format.Staged_ledger_diff + .to_stable_staged_ledger_diff staged_ledger_diff ) | ( `Fatal_error _ | `Invalid_genesis_protocol_state | `Invalid_staged_ledger_hash _ diff --git a/src/lib/cli_lib/commands.ml b/src/lib/cli_lib/commands.ml index c8a701a6c51d..4d2a637ebdb7 100644 --- a/src/lib/cli_lib/commands.ml +++ b/src/lib/cli_lib/commands.ml @@ -71,7 +71,8 @@ let validate_keypair = Command.async ~summary:"Validate a public, private keypair" (let open Command.Let_syntax in let open Core_kernel in - let%map_open privkey_path = Flag.privkey_write_path in + let%map_open privkey_path = Flag.privkey_write_path + and signature_kind = Flag.signature_kind in Exceptions.handle_nicely @@ fun () -> let read_pk () = @@ -106,7 +107,6 @@ let validate_keypair = exit 1 ) in let validate_transaction keypair = - let signature_kind = Mina_signature_kind.t_DEPRECATED in let dummy_payload = Mina_base.Signed_command_payload.dummy in let signature = Mina_base.Signed_command.sign_payload ~signature_kind @@ -146,58 +146,58 @@ let validate_transaction = ~summary: "Validate the signature on one or more transactions, provided to stdin \ in rosetta format" - ( Command.Param.return - @@ fun () -> - let num_fails = ref 0 in - (* TODO upgrade to yojson 2.0.0 when possible to use seq_from_channel - * instead of the deprecated stream interface *) - let jsons = Yojson.Safe.stream_from_channel In_channel.stdin in - let signature_kind = Mina_signature_kind.t_DEPRECATED in - ( match - Or_error.try_with (fun () -> - Streams.iter - (fun transaction_json -> - match - Rosetta_lib.Transaction.to_mina_signed transaction_json - with - | Ok cmd -> - if - Mina_base.Signed_command.check_signature ~signature_kind - cmd - then Format.eprintf "Transaction was valid@." - else ( + (let open Command.Let_syntax in + let%map signature_kind = Flag.signature_kind in + fun () -> + let num_fails = ref 0 in + (* TODO upgrade to yojson 2.0.0 when possible to use seq_from_channel + * instead of the deprecated stream interface *) + let jsons = Yojson.Safe.stream_from_channel In_channel.stdin in + ( match + Or_error.try_with (fun () -> + Streams.iter + (fun transaction_json -> + match + Rosetta_lib.Transaction.to_mina_signed transaction_json + with + | Ok cmd -> + if + Mina_base.Signed_command.check_signature ~signature_kind + cmd + then Format.eprintf "Transaction was valid@." + else ( + incr num_fails ; + Format.eprintf "Transaction was invalid@." ) + | Error err -> incr num_fails ; - Format.eprintf "Transaction was invalid@." ) - | Error err -> - incr num_fails ; - Format.eprintf - "@[Failed to validate transaction:@,\ - %s@,\ - Failed with error:%s@]@." - (Yojson.Safe.pretty_to_string transaction_json) - (Yojson.Safe.pretty_to_string - (Error_json.error_to_yojson err) ) ) - jsons ) - with - | Ok () -> - () - | Error err -> - Format.eprintf "@[Error:@,%s@,@]@." - (Yojson.Safe.pretty_to_string (Error_json.error_to_yojson err)) ; - Format.printf "Invalid transaction.@." ; - Core_kernel.exit 1 ) ; - if !num_fails > 0 then ( - Format.printf "Some transactions failed to verify@." ; - exit 1 ) - else - let first = Streams.peek jsons in - match first with - | None -> - Format.printf "Could not parse any transactions@." ; - exit 1 - | _ -> - Format.printf "All transactions were valid@." ; - exit 0 ) + Format.eprintf + "@[Failed to validate transaction:@,\ + %s@,\ + Failed with error:%s@]@." + (Yojson.Safe.pretty_to_string transaction_json) + (Yojson.Safe.pretty_to_string + (Error_json.error_to_yojson err) ) ) + jsons ) + with + | Ok () -> + () + | Error err -> + Format.eprintf "@[Error:@,%s@,@]@." + (Yojson.Safe.pretty_to_string (Error_json.error_to_yojson err)) ; + Format.printf "Invalid transaction.@." ; + Core_kernel.exit 1 ) ; + if !num_fails > 0 then ( + Format.printf "Some transactions failed to verify@." ; + exit 1 ) + else + let first = Streams.peek jsons in + match first with + | None -> + Format.printf "Could not parse any transactions@." ; + exit 1 + | _ -> + Format.printf "All transactions were valid@." ; + exit 0) module Vrf = struct let generate_witness = diff --git a/src/lib/cli_lib/dune b/src/lib/cli_lib/dune index ddcec762a5c7..915317eae324 100644 --- a/src/lib/cli_lib/dune +++ b/src/lib/cli_lib/dune @@ -30,6 +30,7 @@ pickles mina_numbers signature_lib + mina_signature_kind currency rosetta_lib secrets diff --git a/src/lib/cli_lib/flag.ml b/src/lib/cli_lib/flag.ml index c96200feb9e9..0f292457cff0 100644 --- a/src/lib/cli_lib/flag.ml +++ b/src/lib/cli_lib/flag.ml @@ -440,3 +440,31 @@ module Signed_command = struct Mina_base.Signed_command_memo.max_input_length ) (optional string) end + +let signature_kind_impl ~when_default_specified ~no_default_modifier = + let open Command.Param in + let arg_type = Command.Arg_type.create Mina_signature_kind.of_string in + let env_val = + Option.map ~f:Mina_signature_kind.of_string + @@ Sys.getenv "MINA_SIGNATURE_KIND" + in + match env_val with + | Some v -> + flag "--signature-kind" + ~doc: + (sprintf "Signature kind (default: %s)" + (Mina_signature_kind.to_string v) ) + (optional_with_default v arg_type) + |> when_default_specified + | None -> + flag "--signature-kind" ~doc:"Signature kind" + (no_default_modifier arg_type) + +let signature_kind_opt = + signature_kind_impl + ~when_default_specified:(Command.Param.map ~f:Option.some) + ~no_default_modifier:Command.Param.optional + +let signature_kind = + signature_kind_impl ~when_default_specified:ident + ~no_default_modifier:Command.Param.required diff --git a/src/lib/cli_lib/flag.mli b/src/lib/cli_lib/flag.mli index 69ff38f86f39..910afb0bc8c1 100644 --- a/src/lib/cli_lib/flag.mli +++ b/src/lib/cli_lib/flag.mli @@ -115,3 +115,7 @@ module Signed_command : sig val memo : string option Command.Param.t end + +val signature_kind : Mina_signature_kind.t Command.Param.t + +val signature_kind_opt : Mina_signature_kind.t option Command.Param.t diff --git a/src/lib/genesis_constants/genesis_constants.ml b/src/lib/genesis_constants/genesis_constants.ml index 1f96fda19022..35a93f38e069 100644 --- a/src/lib/genesis_constants/genesis_constants.ml +++ b/src/lib/genesis_constants/genesis_constants.ml @@ -264,8 +264,6 @@ module type S = sig val t : t end - val genesis_timestamp_of_string : string -> Time.t - val of_time : Time.t -> int64 val to_time : int64 -> Time.t @@ -278,8 +276,6 @@ module type S = sig include module type of T with type t = T.t - val genesis_state_timestamp_string : string - val k : int val slots_per_epoch : int @@ -398,8 +394,6 @@ module Make (Node_config : Node_config_intf.S) : S = struct module Protocol = Protocol include T - let genesis_state_timestamp_string = Node_config.genesis_state_timestamp - let k = Node_config.k let slots_per_epoch = Node_config.slots_per_epoch @@ -420,7 +414,8 @@ module Make (Node_config : Node_config_intf.S) : S = struct ; grace_period_slots ; delta ; genesis_state_timestamp = - genesis_timestamp_of_string genesis_state_timestamp_string + genesis_timestamp_of_string + Node_config_unconfigurable_constants.stub_genesis_state_timestamp |> of_time } ; txpool_max_size = pool_max_size diff --git a/src/lib/genesis_ledger_helper/genesis_ledger_helper.ml b/src/lib/genesis_ledger_helper/genesis_ledger_helper.ml index 2cf4128dced0..d488d2fcc239 100644 --- a/src/lib/genesis_ledger_helper/genesis_ledger_helper.ml +++ b/src/lib/genesis_ledger_helper/genesis_ledger_helper.ml @@ -729,14 +729,13 @@ module Genesis_proof = struct ; constraint_system_digests = None ; genesis_constants ; genesis_body_reference - ; signature_kind = Mina_signature_kind.t_DEPRECATED } - let generate (inputs : Genesis_proof.Inputs.t) = + let generate ~signature_kind (inputs : Genesis_proof.Inputs.t) = match inputs.proof_level with | Genesis_constants.Proof_level.Full -> Deferred.return - @@ Genesis_proof.create_values_no_proof + (Genesis_proof.create_values_no_proof ~signature_kind { genesis_ledger = inputs.genesis_ledger ; genesis_epoch_data = inputs.genesis_epoch_data ; runtime_config = inputs.runtime_config @@ -748,10 +747,10 @@ module Genesis_proof = struct ; consensus_constants = inputs.consensus_constants ; constraint_constants = inputs.constraint_constants ; genesis_body_reference = inputs.genesis_body_reference - ; signature_kind = Mina_signature_kind.t_DEPRECATED - } + } ) | _ -> - Deferred.return (Genesis_proof.create_values_no_proof inputs) + Deferred.return + (Genesis_proof.create_values_no_proof ~signature_kind inputs) let store ~filename proof = (* TODO: Use [Writer.write_bin_prot]. *) @@ -909,16 +908,23 @@ let inputs_from_config_file ?(genesis_dir = Cache_dir.autogen_path) ~logger let init_from_config_file ~cli_proof_level ~genesis_constants ~constraint_constants ~logger ~proof_level ~genesis_backing_type - ?overwrite_version ?genesis_dir (config : Runtime_config.t) : - (Precomputed_values.t * Runtime_config.t) Deferred.Or_error.t = - let open Deferred.Or_error.Let_syntax in - let%map inputs, config = + ~cli_signature_kind ?overwrite_version ?genesis_dir + (config : Runtime_config.t) : + (Precomputed_values.t * Runtime_config.t * Mina_signature_kind.t) + Deferred.Or_error.t = + let%bind.Deferred.Or_error inputs, config = inputs_from_config_file ~cli_proof_level ~genesis_constants ~constraint_constants ~logger ~proof_level ~genesis_backing_type ?overwrite_version ?genesis_dir config in - let values = Genesis_proof.create_values_no_proof inputs in - (values, config) + let%map.Deferred.Or_error signature_kind = + Option.( + first_some cli_signature_kind (config.proof >>= fun p -> p.signature_kind) + |> value_map ~f:Deferred.Or_error.return + ~default:(Deferred.Or_error.errorf "signature kind not defined")) + in + let values = Genesis_proof.create_values_no_proof ~signature_kind inputs in + (values, config, signature_kind) let upgrade_old_config ~logger filename json = match json with diff --git a/src/lib/genesis_ledger_helper/lib/genesis_ledger_helper_lib.ml b/src/lib/genesis_ledger_helper/lib/genesis_ledger_helper_lib.ml index ce385ad3acc5..831ca0351fbd 100644 --- a/src/lib/genesis_ledger_helper/lib/genesis_ledger_helper_lib.ml +++ b/src/lib/genesis_ledger_helper/lib/genesis_ledger_helper_lib.ml @@ -483,8 +483,8 @@ let make_constraint_constants let runtime_config_of_constraint_constants ~(proof_level : Genesis_constants.Proof_level.t) - (constraint_constants : Genesis_constants.Constraint_constants.t) : - Runtime_config.Proof_keys.t = + (constraint_constants : Genesis_constants.Constraint_constants.t) + ?signature_kind : Runtime_config.Proof_keys.t = { level = ( match proof_level with | Full -> @@ -514,6 +514,7 @@ let runtime_config_of_constraint_constants Mina_numbers.Global_slot_since_genesis.to_int global_slot_since_genesis } ) + ; signature_kind } let make_genesis_constants ~logger ~(default : Genesis_constants.t) diff --git a/src/lib/genesis_proof/genesis_proof.ml b/src/lib/genesis_proof/genesis_proof.ml index aeb577ded412..7cf5a2d1af3e 100644 --- a/src/lib/genesis_proof/genesis_proof.ml +++ b/src/lib/genesis_proof/genesis_proof.ml @@ -22,7 +22,6 @@ module Inputs = struct [None] here. *) Pickles.Verification_key.Id.t option - ; signature_kind : Mina_signature_kind.t } let runtime_config { runtime_config; _ } = runtime_config @@ -94,7 +93,6 @@ module T = struct Protocol_state.value State_hash.With_state_hashes.t ; constraint_system_digests : (string * Md5_lib.t) list Lazy.t ; proof_data : Proof_data.t option - ; signature_kind : Mina_signature_kind.t } let runtime_config { runtime_config; _ } = runtime_config @@ -160,11 +158,11 @@ let digests (module T : Transaction_snark.S) let%map blockchain_digests = B.constraint_system_digests in txn_digests @ blockchain_digests -let blockchain_snark_state (inputs : Inputs.t) : +let blockchain_snark_state ~signature_kind (inputs : Inputs.t) : (module Transaction_snark.S) * (module Blockchain_snark.Blockchain_snark_state.S) = let module T = Transaction_snark.Make (struct - let signature_kind = inputs.signature_kind + let signature_kind = signature_kind let constraint_constants = inputs.constraint_constants @@ -179,7 +177,7 @@ let blockchain_snark_state (inputs : Inputs.t) : end) in ((module T), (module B)) -let create_values_no_proof (t : Inputs.t) = +let create_values_no_proof ~signature_kind (t : Inputs.t) = { runtime_config = t.runtime_config ; constraint_constants = t.constraint_constants ; proof_level = t.proof_level @@ -191,10 +189,9 @@ let create_values_no_proof (t : Inputs.t) = ; protocol_state_with_hashes = t.protocol_state_with_hashes ; constraint_system_digests = lazy - (let txn, b = blockchain_snark_state t in + (let txn, b = blockchain_snark_state ~signature_kind t in Lazy.force (digests txn b) ) ; proof_data = None - ; signature_kind = t.signature_kind } let to_inputs (t : t) : Inputs.t = @@ -217,5 +214,4 @@ let to_inputs (t : t) : Inputs.t = Some blockchain_proof_system_id | None -> None ) - ; signature_kind = t.signature_kind } diff --git a/src/lib/ledger_catchup/super_catchup.ml b/src/lib/ledger_catchup/super_catchup.ml index 3e66ccedc985..449658bccb8c 100644 --- a/src/lib/ledger_catchup/super_catchup.ml +++ b/src/lib/ledger_catchup/super_catchup.ml @@ -797,6 +797,7 @@ let setup_state_machine_runner ~context:(module Context : CONTEXT) ~t ~verifier -> transition:Mina_block.almost_valid_block -> sender:Envelope.Sender.t option -> transition_receipt_time:Time.t option + -> signature_kind:Mina_signature_kind.t -> unit -> ( Breadcrumb.t , [> `Invalid_staged_ledger_diff of Error.t @@ -1027,7 +1028,7 @@ let setup_state_machine_runner ~context:(module Context : CONTEXT) ~t ~verifier build_func ~logger ~skip_staged_ledger_verification:`Proofs ~precomputed_values ~verifier ~trust_system ~parent ~transition:av.data ~sender:(Some av.sender) - ~transition_receipt_time () + ~transition_receipt_time ~signature_kind:Context.signature_kind () in step (Deferred.map ~f:Result.return s) with diff --git a/src/lib/mina_base/user_command.ml b/src/lib/mina_base/user_command.ml index 335110eac31e..41729d4a5df1 100644 --- a/src/lib/mina_base/user_command.ml +++ b/src/lib/mina_base/user_command.ml @@ -73,8 +73,7 @@ let gen_signed ~signature_kind = G.payment_with_random_participants ~sign_type ~keys:(Array.of_list keys) ~max_amount:10000 ~fee_range:1000 () -let gen = - Gen.to_signed_command (gen_signed ~signature_kind:Mina_signature_kind.Testnet) +let gen = Gen.to_signed_command (gen_signed ~signature_kind:Testnet) [%%versioned module Stable = struct diff --git a/src/lib/mina_block/legacy_format.ml b/src/lib/mina_block/legacy_format.ml index ec716ed1d2fa..d351d07ec3a5 100644 --- a/src/lib/mina_block/legacy_format.ml +++ b/src/lib/mina_block/legacy_format.ml @@ -1,108 +1,50 @@ open Core_kernel -module Helper = struct - open Mina_base - - let to_yojson ~proof_to_yojson tx = - let update_to_yojson = - Account_update.Poly.to_yojson Account_update.Body.to_yojson - (Control.Poly.to_yojson proof_to_yojson Signature.to_yojson) - in - User_command.Poly.to_yojson Signed_command.to_yojson - (Zkapp_command.with_forest_to_yojson update_to_yojson - Zkapp_command.Digest.Account_update.to_yojson - Zkapp_command.Digest.Forest.to_yojson ) - tx - - let of_yojson ~proof_of_yojson ~reset_aux = - let update_of_yojson t = - Ppx_deriving_yojson_runtime.( - Account_update.Poly.of_yojson Account_update.Body.of_yojson - (Control.Poly.of_yojson proof_of_yojson Signature.of_yojson) - t - >|= reset_aux) - in - User_command.Poly.of_yojson Signed_command.of_yojson - @@ Zkapp_command.with_forest_of_yojson update_of_yojson - Zkapp_command.Digest.Account_update.of_yojson - Zkapp_command.Digest.Forest.of_yojson -end - module User_command = struct open Mina_base [%%versioned module Stable = struct - [@@@no_toplevel_latest_type] - module V1 = struct - type t = User_command.Stable.V2.t [@@deriving sexp] - - let to_yojson : t -> Yojson.Safe.t = - let signature_kind = Mina_signature_kind.t_DEPRECATED in - function - | User_command.Poly.Signed_command _ as tx -> - (* ~proof_to_yojson is unused when Helper.to_yojson is applied to a - Signed_command; the unreachable_code function (which takes a - value of the uninhabited Nothing.t type) is a compile-time proof - of this fact through the type system. *) - Helper.to_yojson ~proof_to_yojson:Nothing.unreachable_code tx - | User_command.Poly.Zkapp_command { fee_payer; memo; account_updates } - -> - Helper.to_yojson ~proof_to_yojson:Proof.to_yojson - (Zkapp_command - { Zkapp_command.Poly.fee_payer - ; memo - ; account_updates = - Zkapp_command.( - Call_forest.accumulate_hashes - ~hash_account_update: - (Digest.Account_update.create ~signature_kind)) - account_updates - } ) - - let of_yojson json = - match - Helper.of_yojson ~proof_of_yojson:Proof.of_yojson ~reset_aux:Fn.id - json - with - | Ok (Signed_command tx) -> - Ppx_deriving_yojson_runtime.Result.Ok - (User_command.Poly.Signed_command tx) - | Ok (Zkapp_command { fee_payer; memo; account_updates }) -> - Ok - (Zkapp_command - { Zkapp_command.Poly.fee_payer - ; memo - ; account_updates = - Zkapp_command.Call_forest.forget_hashes account_updates - } ) - | Error e -> - Error e + type t = + ( Signed_command.Stable.V2.t + , ( Account_update.Stable.V1.t + , Zkapp_command.Digest.Account_update.Stable.V1.t + , Zkapp_command.Digest.Forest.Stable.V1.t ) + Zkapp_command.Call_forest.Stable.V1.t + Zkapp_command.Poly.Stable.V1.t ) + User_command.Poly.Stable.V2.t + [@@deriving sexp, yojson] let to_latest = Fn.id end end] - type nonrec t = User_command.t - - let proof_cache_db = Proof_cache_tag.create_identity_db () - - let proof_to_yojson proof = - Proof_cache_tag.read_proof_from_disk proof |> Proof.to_yojson - - let proof_of_yojson json = - match Proof.of_yojson json with - | Ok proof -> - Ppx_deriving_yojson_runtime.Result.Ok - (Proof_cache_tag.write_proof_to_disk proof_cache_db proof) - | Error e -> - Ppx_deriving_yojson_runtime.Result.Error e - - let to_yojson = Helper.to_yojson ~proof_to_yojson - - let of_yojson = - Helper.of_yojson ~proof_of_yojson ~reset_aux:Account_update.reset_aux + let of_stable_user_command ~signature_kind = function + | User_command.Poly.Signed_command _ as tx -> + (tx : t) + | Zkapp_command { Zkapp_command.Poly.fee_payer; memo; account_updates } -> + User_command.Poly.Zkapp_command + { Zkapp_command.Poly.fee_payer + ; memo + ; account_updates = + Zkapp_command.( + Call_forest.accumulate_hashes + ~hash_account_update: + (Digest.Account_update.create ~signature_kind)) + account_updates + } + + let to_stable_user_command = function + | (Signed_command _ as tx : t) -> + tx + | (Zkapp_command { fee_payer; memo; account_updates } : t) -> + Zkapp_command + { Zkapp_command.Poly.fee_payer + ; memo + ; account_updates = + Zkapp_command.Call_forest.forget_hashes account_updates + } end module Staged_ledger_diff = struct @@ -111,7 +53,7 @@ module Staged_ledger_diff = struct [@@@no_toplevel_latest_type] module V1 = struct - type t = Staged_ledger_diff.Stable.V2.t = + type t = { diff : ( Transaction_snark_work.Stable.V2.t , User_command.Stable.V1.t Mina_base.With_status.Stable.V2.t ) @@ -126,4 +68,26 @@ module Staged_ledger_diff = struct let to_latest = ident end end] + + let to_stable_staged_ledger_diff { Stable.Latest.diff = ptwo, pone_opt } = + let f2 = Mina_base.With_status.map ~f:User_command.to_stable_user_command in + { Staged_ledger_diff.Stable.Latest.diff = + ( Staged_ledger_diff.Pre_diff_two.map ~f1:ident ~f2 ptwo + , Option.map + ~f:(Staged_ledger_diff.Pre_diff_one.map ~f1:ident ~f2) + pone_opt ) + } + + let of_stable_staged_ledger_diff ~signature_kind + { Staged_ledger_diff.Stable.Latest.diff = ptwo, pone_opt } = + let f2 = + Mina_base.With_status.map + ~f:(User_command.of_stable_user_command ~signature_kind) + in + { Stable.Latest.diff = + ( Staged_ledger_diff.Pre_diff_two.map ~f1:ident ~f2 ptwo + , Option.map + ~f:(Staged_ledger_diff.Pre_diff_one.map ~f1:ident ~f2) + pone_opt ) + } end diff --git a/src/lib/mina_block/legacy_format.mli b/src/lib/mina_block/legacy_format.mli index 7012646f5f3a..4bdc27c46ced 100644 --- a/src/lib/mina_block/legacy_format.mli +++ b/src/lib/mina_block/legacy_format.mli @@ -1,18 +1,25 @@ open Core_kernel +open Mina_base module User_command : sig [%%versioned: module Stable : sig - [@@@no_toplevel_latest_type] - module V1 : sig - type t = Mina_base.User_command.Stable.V2.t [@@deriving sexp, yojson] + type t = + ( Signed_command.Stable.V2.t + , ( Account_update.Stable.V1.t + , Zkapp_command.Digest.Account_update.Stable.V1.t + , Zkapp_command.Digest.Forest.Stable.V1.t ) + Zkapp_command.Call_forest.Stable.V1.t + Zkapp_command.Poly.Stable.V1.t ) + User_command.Poly.Stable.V2.t + [@@deriving sexp, yojson] val to_latest : t -> t end end] - type t = Mina_base.User_command.t [@@deriving yojson] + val to_stable_user_command : t -> User_command.Stable.Latest.t end module Staged_ledger_diff : sig @@ -21,7 +28,7 @@ module Staged_ledger_diff : sig [@@@no_toplevel_latest_type] module V1 : sig - type t = Staged_ledger_diff.Stable.V2.t = + type t = { diff : ( Transaction_snark_work.Stable.V2.t , User_command.Stable.V1.t Mina_base.With_status.Stable.V2.t ) @@ -36,4 +43,12 @@ module Staged_ledger_diff : sig val to_latest : t -> t end end] + + val to_stable_staged_ledger_diff : + Stable.Latest.t -> Staged_ledger_diff.Stable.Latest.t + + val of_stable_staged_ledger_diff : + signature_kind:Mina_signature_kind.t + -> Staged_ledger_diff.Stable.Latest.t + -> Stable.Latest.t end diff --git a/src/lib/mina_block/precomputed_block.ml b/src/lib/mina_block/precomputed_block.ml index 93e24dddc05c..c213e2341a48 100644 --- a/src/lib/mina_block/precomputed_block.ml +++ b/src/lib/mina_block/precomputed_block.ml @@ -98,7 +98,7 @@ end] (* functions for the versioned json, not the unversioned ones provided by `T` *) [%%define_locally Stable.Latest.(to_yojson, of_yojson)] -let of_block ~logger +let of_block ~signature_kind ~logger ~(constraint_constants : Genesis_constants.Constraint_constants.t) ~scheduled_time ~staged_ledger block_with_hash = let ledger = Staged_ledger.ledger staged_ledger in @@ -182,6 +182,8 @@ let of_block ~logger ; staged_ledger_diff = Staged_ledger_diff.Body.staged_ledger_diff (Block.body block) |> Staged_ledger_diff.read_all_proofs_from_disk + |> Legacy_format.Staged_ledger_diff.of_stable_staged_ledger_diff + ~signature_kind ; delta_transition_chain_proof = Header.delta_block_chain_proof header ; protocol_version ; proposed_protocol_version diff --git a/src/lib/mina_block/precomputed_block.mli b/src/lib/mina_block/precomputed_block.mli index abfb2af42da7..adc2f1d1a73a 100644 --- a/src/lib/mina_block/precomputed_block.mli +++ b/src/lib/mina_block/precomputed_block.mli @@ -22,7 +22,7 @@ module Stable : sig { scheduled_time : Block_time.Stable.V1.t ; protocol_state : Protocol_state.Value.Stable.V2.t ; protocol_state_proof : Mina_base.Proof.Stable.V2.t - ; staged_ledger_diff : Staged_ledger_diff.Stable.V2.t + ; staged_ledger_diff : Legacy_format.Staged_ledger_diff.Stable.V1.t ; delta_transition_chain_proof : Frozen_ledger_hash.Stable.V1.t * Frozen_ledger_hash.Stable.V1.t list ; protocol_version : Protocol_version.Stable.V2.t @@ -40,7 +40,7 @@ type t = Stable.Latest.t = { scheduled_time : Block_time.Time.t ; protocol_state : Protocol_state.value ; protocol_state_proof : Proof.t - ; staged_ledger_diff : Staged_ledger_diff.Stable.Latest.t + ; staged_ledger_diff : Legacy_format.Staged_ledger_diff.Stable.Latest.t ; delta_transition_chain_proof : Frozen_ledger_hash.t * Frozen_ledger_hash.t list ; protocol_version : Protocol_version.t @@ -52,7 +52,8 @@ type t = Stable.Latest.t = [@@deriving sexp, yojson] val of_block : - logger:Logger.t + signature_kind:Mina_signature_kind.t + -> logger:Logger.t -> constraint_constants:Genesis_constants.Constraint_constants.t -> scheduled_time:Block_time.Time.t -> staged_ledger:Staged_ledger.t diff --git a/src/lib/mina_block/tests/memory_caching.ml b/src/lib/mina_block/tests/memory_caching.ml index 7e00ed7f939d..41a6bd1fdcfd 100644 --- a/src/lib/mina_block/tests/memory_caching.ml +++ b/src/lib/mina_block/tests/memory_caching.ml @@ -53,6 +53,18 @@ let test_do ledger_proofs tmp_dir = printf "Growth with cache: %d\n" growth_cached ; assert (growth_cached * 50 < growth) +let completed_works + (diff : + ( Transaction_snark_work.Stable.Latest.t + , _ ) + Staged_ledger_diff.Pre_diff_two.t + * ( Transaction_snark_work.Stable.Latest.t + , _ ) + Staged_ledger_diff.Pre_diff_one.t + option ) = + (fst diff).completed_works + @ Option.value_map (snd diff) ~default:[] ~f:(fun d -> d.completed_works) + (** Test reads precomputed json file, extracts ledger proofs and writes them to disk. Then it repeatedly reads the file 10x times and measures memory growth with both using memory caching and not. Test asserts that memory used for storing proofs is 50x smaller than when not using memory caching. @@ -69,8 +81,7 @@ let test large_precomputed_json_file : unit = failwith err in let ledger_proofs = - Staged_ledger_diff.Stable.Latest.completed_works - precomputed.staged_ledger_diff + completed_works precomputed.staged_ledger_diff.diff |> List.concat_map ~f: (Fn.compose One_or_two.to_list diff --git a/src/lib/mina_block/validation.ml b/src/lib/mina_block/validation.ml index 45b9a944d96a..a0b1123f2362 100644 --- a/src/lib/mina_block/validation.ml +++ b/src/lib/mina_block/validation.ml @@ -476,8 +476,9 @@ let reset_frontier_dependencies_validation (transition_with_hash, validation) = failwith "why can't this be refuted?" let validate_staged_ledger_diff ?skip_staged_ledger_verification ~logger - ~get_completed_work ~precomputed_values ~verifier ~parent_staged_ledger - ~parent_protocol_state ?transaction_pool_proxy (t, validation) = + ~get_completed_work ~(precomputed_values : Precomputed_values.t) ~verifier + ~parent_staged_ledger ~parent_protocol_state ~signature_kind + ?transaction_pool_proxy (t, validation) = [%log internal] "Validate_staged_ledger_diff" ; let block = With_hash.data t in let header = Block.header block in @@ -504,8 +505,7 @@ let validate_staged_ledger_diff ?skip_staged_ledger_verification ~logger , `Pending_coinbase_update _ ) = Staged_ledger.apply ?skip_verification:skip_staged_ledger_verification ~get_completed_work - ~constraint_constants: - precomputed_values.Precomputed_values.constraint_constants ~global_slot + ~constraint_constants:precomputed_values.constraint_constants ~global_slot ~logger ~verifier parent_staged_ledger (Staged_ledger_diff.Body.staged_ledger_diff body) ~current_state_view: @@ -521,9 +521,8 @@ let validate_staged_ledger_diff ?skip_staged_ledger_verification ~logger ~supercharge_coinbase: (Consensus_state.supercharge_coinbase consensus_state) ~zkapp_cmd_limit_hardcap: - precomputed_values.Precomputed_values.genesis_constants - .zkapp_cmd_limit_hardcap - ~signature_kind:Mina_signature_kind.t_DEPRECATED ?transaction_pool_proxy + precomputed_values.genesis_constants.zkapp_cmd_limit_hardcap + ~signature_kind ?transaction_pool_proxy |> Deferred.Result.map_error ~f:(fun e -> `Staged_ledger_application_failed e ) in diff --git a/src/lib/mina_block/validation.mli b/src/lib/mina_block/validation.mli index 97f376072d2c..4e0146e41ca4 100644 --- a/src/lib/mina_block/validation.mli +++ b/src/lib/mina_block/validation.mli @@ -337,6 +337,7 @@ val validate_staged_ledger_diff : -> verifier:Verifier.t -> parent_staged_ledger:Staged_ledger.t -> parent_protocol_state:Protocol_state.Value.t + -> signature_kind:Mina_signature_kind.t -> ?transaction_pool_proxy:Staged_ledger.transaction_pool_proxy -> ( 'a , 'b diff --git a/src/lib/mina_compile_config/mina_compile_config.ml b/src/lib/mina_compile_config/mina_compile_config.ml index 72480e9c887b..4b414d8d9da3 100644 --- a/src/lib/mina_compile_config/mina_compile_config.ml +++ b/src/lib/mina_compile_config/mina_compile_config.ml @@ -15,7 +15,6 @@ module Inputs = struct ; compaction_interval_ms : int option ; block_window_duration_ms : int ; vrf_poll_interval_ms : int - ; network_id : string ; zkapp_cmd_limit : int option ; rpc_handshake_timeout_sec : float ; rpc_heartbeat_timeout_sec : float @@ -42,7 +41,6 @@ type t = ; compaction_interval : Time.Span.t option ; block_window_duration : Time.Span.t ; vrf_poll_interval : Time.Span.t - ; network_id : string ; zkapp_cmd_limit : int option ; rpc_handshake_timeout : Time.Span.t ; rpc_heartbeat_timeout : Time.Span.t @@ -86,7 +84,6 @@ let make (inputs : Inputs.t) = ; zkapp_transaction_cost_limit = inputs.zkapp_transaction_cost_limit ; max_event_elements = inputs.max_event_elements ; max_action_elements = inputs.max_action_elements - ; network_id = inputs.network_id ; zkapp_cmd_limit = inputs.zkapp_cmd_limit ; zkapp_cmd_limit_hardcap = inputs.zkapp_cmd_limit_hardcap ; zkapps_disabled = inputs.zkapps_disabled @@ -122,7 +119,6 @@ let to_yojson t = ; ("zkapp_transaction_cost_limit", `Float t.zkapp_transaction_cost_limit) ; ("max_event_elements", `Int t.max_event_elements) ; ("max_action_elements", `Int t.max_action_elements) - ; ("network_id", `String t.network_id) ; ( "zkapp_cmd_limit" , Option.value_map ~default:`Null ~f:(fun x -> `Int x) t.zkapp_cmd_limit ) @@ -155,7 +151,6 @@ module Compiled = struct ; zkapp_transaction_cost_limit = Node_config.zkapp_transaction_cost_limit ; max_event_elements = Node_config.max_event_elements ; max_action_elements = Node_config.max_action_elements - ; network_id = Node_config.network ; zkapp_cmd_limit = Node_config.zkapp_cmd_limit ; zkapp_cmd_limit_hardcap = Node_config.zkapp_cmd_limit_hardcap ; zkapps_disabled = Node_config.zkapps_disabled @@ -198,7 +193,6 @@ module For_unit_tests = struct Node_config_for_unit_tests.zkapp_transaction_cost_limit ; max_event_elements = Node_config_for_unit_tests.max_event_elements ; max_action_elements = Node_config_for_unit_tests.max_action_elements - ; network_id = Node_config_for_unit_tests.network ; zkapp_cmd_limit = Node_config_for_unit_tests.zkapp_cmd_limit ; zkapp_cmd_limit_hardcap = Node_config_for_unit_tests.zkapp_cmd_limit_hardcap diff --git a/src/lib/mina_graphql/mina_graphql.ml b/src/lib/mina_graphql/mina_graphql.ml index f316fac4ac9e..6c4c388ac0d5 100644 --- a/src/lib/mina_graphql/mina_graphql.ml +++ b/src/lib/mina_graphql/mina_graphql.ml @@ -2721,21 +2721,22 @@ module Queries = struct >>| Pickles.Verification_key.to_yojson >>| Yojson.Safe.to_basic ) let network_id = - field "networkID" + io_field "networkID" ~doc: "The chain-agnostic identifier of the network this daemon is \ participating in" ~typ:(non_null string) ~args:Arg.[] ~resolve:(fun { ctx = mina; _ } () -> - let cfg = Mina_lib.config mina in let runtime_cfg = Mina_lib.runtime_config mina in let network_id = - Option.value ~default:cfg.compile_config.network_id - @@ let%bind.Option daemon = runtime_cfg.daemon in - daemon.network_id + let%bind.Option daemon = runtime_cfg.daemon in + let%map.Option id = daemon.network_id in + "mina:" ^ id in - "mina:" ^ network_id ) + Option.value_map ~f:Deferred.Result.return + ~default:(Deferred.Result.fail "network_id not specified") + network_id ) let signature_kind = field "signatureKind" diff --git a/src/lib/mina_ledger/ledger.ml b/src/lib/mina_ledger/ledger.ml index 9e9f5e8df287..3201befc6f0b 100644 --- a/src/lib/mina_ledger/ledger.ml +++ b/src/lib/mina_ledger/ledger.ml @@ -501,8 +501,7 @@ include Mina_transaction_logic.Make (Ledger_inner) (* use mask to restore ledger after application *) let merkle_root_after_zkapp_command_exn ~constraint_constants ~global_slot - ~txn_state_view ledger zkapp_command = - let signature_kind = Mina_signature_kind.t_DEPRECATED in + ~txn_state_view ~signature_kind ledger zkapp_command = let mask = Mask.create ~depth:(depth ledger) () in let masked_ledger = register_mask ledger mask in let _applied = diff --git a/src/lib/mina_ledger/ledger.mli b/src/lib/mina_ledger/ledger.mli index ac2bd1bdfe5b..f5648b0a22c0 100644 --- a/src/lib/mina_ledger/ledger.mli +++ b/src/lib/mina_ledger/ledger.mli @@ -184,6 +184,7 @@ val merkle_root_after_zkapp_command_exn : constraint_constants:Genesis_constants.Constraint_constants.t -> global_slot:Mina_numbers.Global_slot_since_genesis.t -> txn_state_view:Zkapp_precondition.Protocol_state.View.t + -> signature_kind:Mina_signature_kind.t -> t -> Zkapp_command.Valid.t -> Ledger_hash.t diff --git a/src/lib/mina_ledger/sparse_ledger.ml b/src/lib/mina_ledger/sparse_ledger.ml index 17df5e8dd6eb..2e283ed3e395 100644 --- a/src/lib/mina_ledger/sparse_ledger.ml +++ b/src/lib/mina_ledger/sparse_ledger.ml @@ -117,8 +117,7 @@ let apply_user_command ~constraint_constants ~txn_global_slot = (T.apply_user_command ~constraint_constants ~txn_global_slot) let apply_transaction_first_pass ~constraint_constants ~global_slot - ~txn_state_view = - let signature_kind = Mina_signature_kind.t_DEPRECATED in + ~txn_state_view ~signature_kind = apply_transaction_logic (T.apply_transaction_first_pass ~signature_kind ~constraint_constants ~global_slot ~txn_state_view ) @@ -126,8 +125,8 @@ let apply_transaction_first_pass ~constraint_constants ~global_slot let apply_transaction_second_pass = apply_transaction_logic T.apply_transaction_second_pass -let apply_transactions ~constraint_constants ~global_slot ~txn_state_view = - let signature_kind = Mina_signature_kind.t_DEPRECATED in +let apply_transactions ~constraint_constants ~global_slot ~txn_state_view + ~signature_kind = apply_transaction_logic (T.apply_transactions ~signature_kind ~constraint_constants ~global_slot ~txn_state_view ) diff --git a/src/lib/mina_lib/mina_lib.ml b/src/lib/mina_lib/mina_lib.ml index 1dc97061245c..51f4de64b95f 100644 --- a/src/lib/mina_lib/mina_lib.ml +++ b/src/lib/mina_lib/mina_lib.ml @@ -673,7 +673,7 @@ let get_ledger t state_hash_opt = let get_snarked_ledger_full t state_hash_opt = let open Deferred.Or_error.Let_syntax in - let signature_kind = Mina_signature_kind.t_DEPRECATED in + let signature_kind = t.signature_kind in let%bind state_hash = Option.value_map state_hash_opt ~f:Deferred.Or_error.return ~default: @@ -722,7 +722,8 @@ let get_snarked_ledger_full t state_hash_opt = Mina_ledger.Sparse_ledger.apply_transaction_first_pass ~constraint_constants: t.config.precomputed_values.constraint_constants - ~global_slot ~txn_state_view sparse_ledger txn + ~global_slot ~txn_state_view ~signature_kind sparse_ledger + txn in partial_txn in @@ -1501,7 +1502,8 @@ let start t = ~graphql_control_port:t.config.graphql_control_port ~built_with_commit_sha ~get_next_producer_timing:(fun () -> t.next_producer_timing) ~get_snark_work_fee:(fun () -> snark_work_fee t) - ~get_peer:(fun () -> t.config.gossip_net_params.addrs_and_ports.peer) ; + ~get_peer:(fun () -> t.config.gossip_net_params.addrs_and_ports.peer) + ~signature_kind:t.signature_kind ; stop_long_running_daemon t ; Snark_worker.start t @@ -1757,8 +1759,7 @@ let initialize_zkapp_vk_cache_db (config : Config.t) = (config.conf_dir ^/ "zkapp_vk_cache") >>| function Error e -> raise_on_initialization_error e | Ok db -> db -let create ~commit_id ?wallets (config : Config.t) = - let signature_kind = Mina_signature_kind.t_DEPRECATED in +let create ~signature_kind ~commit_id ?wallets (config : Config.t) = [%log' info config.logger] "Creating daemon with commit id: %s" commit_id ; let commit_id_short = shorten_commit_id commit_id in let constraint_constants = config.precomputed_values.constraint_constants in @@ -1918,7 +1919,8 @@ let create ~commit_id ?wallets (config : Config.t) = Uptime_service.Uptime_snark_worker.create ~constraint_constants: config.precomputed_values.constraint_constants - ~logger:config.logger ~pids:config.pids ) ) + ~signature_kind ~logger:config.logger + ~pids:config.pids ) ) >>| Result.ok ) in log_snark_coordinator_warning config snark_worker ; @@ -2429,6 +2431,7 @@ let create ~commit_id ?wallets (config : Config.t) = ~is_storing_all:config.is_archive_rocksdb ~upload_blocks_to_gcloud:config.upload_blocks_to_gcloud ~time_controller:config.time_controller ~precomputed_block_writer + ~signature_kind in let open Mina_incremental.Status in let transition_frontier_incr = diff --git a/src/lib/mina_lib/mina_lib.mli b/src/lib/mina_lib/mina_lib.mli index 0e24d4dba9c7..7adc4c2267b6 100644 --- a/src/lib/mina_lib/mina_lib.mli +++ b/src/lib/mina_lib/mina_lib.mli @@ -224,7 +224,11 @@ val start_with_precomputed_blocks : val stop_snark_worker : ?should_wait_kill:bool -> t -> unit Deferred.t val create : - commit_id:string -> ?wallets:Secrets.Wallets.t -> Config.t -> t Deferred.t + signature_kind:Mina_signature_kind.t + -> commit_id:string + -> ?wallets:Secrets.Wallets.t + -> Config.t + -> t Deferred.t val staged_ledger_ledger_proof : t -> Ledger_proof.Cached.t option diff --git a/src/lib/mina_lib/mina_subscriptions.ml b/src/lib/mina_lib/mina_subscriptions.ml index ec710be10fb1..e4204e07a984 100644 --- a/src/lib/mina_lib/mina_subscriptions.ml +++ b/src/lib/mina_lib/mina_subscriptions.ml @@ -42,7 +42,7 @@ let add_new_subscription (t : t) ~pk = let create ~logger ~constraint_constants ~wallets ~new_blocks ~transition_frontier ~is_storing_all ~time_controller - ~upload_blocks_to_gcloud ~precomputed_block_writer = + ~upload_blocks_to_gcloud ~precomputed_block_writer ~signature_kind = let subscribed_block_users = Optional_public_key.Table.of_alist_multi @@ List.map (Secrets.Wallets.pks wallets) ~f:(fun wallet -> @@ -144,7 +144,7 @@ let create ~logger ~constraint_constants ~wallets ~new_blocks in Mina_block.Precomputed.of_block ~logger ~constraint_constants ~staged_ledger ~scheduled_time - new_block + ~signature_kind new_block in [%log debug] "Precomputed block generated in $time ms" ~metadata: diff --git a/src/lib/mina_lib/tests/tests.ml b/src/lib/mina_lib/tests/tests.ml index bb1b156d5505..04cc025f5092 100644 --- a/src/lib/mina_lib/tests/tests.ml +++ b/src/lib/mina_lib/tests/tests.ml @@ -82,9 +82,9 @@ let%test_module "Epoch ledger sync tests" = ~genesis_dir:(make_dirname "genesis_dir") ~constraint_constants ~genesis_constants ~logger ~proof_level:No_check runtime_config ~cli_proof_level:None - ~genesis_backing_type:Stable_db + ~genesis_backing_type:Stable_db ~cli_signature_kind:(Some Testnet) with - | Ok (precomputed_values, _) -> + | Ok (precomputed_values, _, _) -> precomputed_values | Error err -> failwithf "Could not create precomputed values: %s" diff --git a/src/lib/node_config/for_unit_tests/node_config_for_unit_tests.ml b/src/lib/node_config/for_unit_tests/node_config_for_unit_tests.ml index 59d9d41516a2..4d28494ca88e 100644 --- a/src/lib/node_config/for_unit_tests/node_config_for_unit_tests.ml +++ b/src/lib/node_config/for_unit_tests/node_config_for_unit_tests.ml @@ -49,14 +49,10 @@ let (supercharged_coinbase_factor : int) = (1 : int) let (plugins : bool) = (true : bool) -let (genesis_state_timestamp : string) = ("2019-01-30 12:00:00-08:00" : string) - let (block_window_duration : int) = (2000 : int) let compaction_interval = None -let (network : string) = ("testnet" : string) - let (vrf_poll_interval : int) = (0 : int) let zkapp_cmd_limit = None diff --git a/src/lib/node_config/intf/node_config_intf.mli b/src/lib/node_config/intf/node_config_intf.mli index 66000d83ecc7..3d32cbbd23cc 100644 --- a/src/lib/node_config/intf/node_config_intf.mli +++ b/src/lib/node_config/intf/node_config_intf.mli @@ -29,6 +29,8 @@ module type Unconfigurable_constants = sig val rpc_heartbeat_timeout_sec : float val rpc_heartbeat_send_every_sec : float + + val stub_genesis_state_timestamp : string end module type S = sig @@ -76,16 +78,12 @@ module type S = sig val plugins : bool - val genesis_state_timestamp : string - val block_window_duration : int val compaction_interval : int option val vrf_poll_interval : int - val network : string - val zkapp_cmd_limit : int option val scan_state_tps_goal_x10 : int option diff --git a/src/lib/node_config/node_config.ml b/src/lib/node_config/node_config.ml index fb2aec07effc..b4da54d7d499 100644 --- a/src/lib/node_config/node_config.ml +++ b/src/lib/node_config/node_config.ml @@ -66,8 +66,6 @@ let scan_state_transaction_capacity_log_2 = [%%inject "plugins", plugins] -[%%inject "genesis_state_timestamp", genesis_state_timestamp] - [%%inject "block_window_duration", block_window_duration] [%%ifndef compaction_interval] @@ -82,8 +80,6 @@ let compaction_interval = Some compaction_interval [%%endif] -[%%inject "network", network] - [%%inject "vrf_poll_interval", vrf_poll_interval] [%%ifndef zkapp_cmd_limit] diff --git a/src/lib/node_config/unconfigurable_constants/node_config_unconfigurable_constants.ml b/src/lib/node_config/unconfigurable_constants/node_config_unconfigurable_constants.ml index 1097f3486552..5caf4a104457 100644 --- a/src/lib/node_config/unconfigurable_constants/node_config_unconfigurable_constants.ml +++ b/src/lib/node_config/unconfigurable_constants/node_config_unconfigurable_constants.ml @@ -36,3 +36,9 @@ let rpc_handshake_timeout_sec = 60.0 let rpc_heartbeat_timeout_sec = 60.0 let rpc_heartbeat_send_every_sec = 10.0 (*same as the default*) + +(* This is a stub value inserted into genesis_constants to be later replaced + with the actual genesis state timestamp from runtime config. + + TODO: remove this when we have a better way to handle this. *) +let stub_genesis_state_timestamp = "2019-01-30 12:00:00-08:00" diff --git a/src/lib/precomputed_values/precomputed_values.ml b/src/lib/precomputed_values/precomputed_values.ml index b7453b16a3ea..4f5c6277ccee 100644 --- a/src/lib/precomputed_values/precomputed_values.ml +++ b/src/lib/precomputed_values/precomputed_values.ml @@ -42,5 +42,4 @@ let for_unit_tests = ; protocol_state_with_hashes ; constraint_system_digests = hashes_for_unit_tests ; proof_data = None - ; signature_kind = Mina_signature_kind.Testnet }) diff --git a/src/lib/prover/intf.ml b/src/lib/prover/intf.ml index faa10d30619e..0e92ba86c81a 100644 --- a/src/lib/prover/intf.ml +++ b/src/lib/prover/intf.ml @@ -16,7 +16,7 @@ module type S = sig ; proof_level : Genesis_constants.Proof_level.t ; constraint_constants : Genesis_constants.Constraint_constants.t ; commit_id : string - ; signature_kind : Mina_signature_kind_type.t + ; signature_kind : Mina_signature_kind.t } val create : init_arg -> t Deferred.t @@ -33,7 +33,7 @@ module type S = sig -> proof_level:Genesis_constants.Proof_level.t -> constraint_constants:Genesis_constants.Constraint_constants.t -> commit_id:string - -> signature_kind:Mina_signature_kind_type.t + -> signature_kind:Mina_signature_kind.t -> unit -> t Deferred.t diff --git a/src/lib/prover/prover.ml b/src/lib/prover/prover.ml index 76d0f6f74ecd..50cf025fadc4 100644 --- a/src/lib/prover/prover.ml +++ b/src/lib/prover/prover.ml @@ -73,7 +73,7 @@ module Worker_state = struct ; proof_level : Genesis_constants.Proof_level.t ; constraint_constants : Genesis_constants.Constraint_constants.t ; commit_id : string - ; signature_kind : Mina_signature_kind_type.t + ; signature_kind : Mina_signature_kind.Stable.Latest.t } [@@deriving bin_io_unversioned] diff --git a/src/lib/runtime_config/dune b/src/lib/runtime_config/dune index 36115bb1209f..89bf76665598 100644 --- a/src/lib/runtime_config/dune +++ b/src/lib/runtime_config/dune @@ -39,7 +39,8 @@ signature_lib staged_ledger mina_stdlib - mina_compile_config) + mina_compile_config + mina_signature_kind) (instrumentation (backend bisect_ppx)) (preprocess diff --git a/src/lib/runtime_config/runtime_config.ml b/src/lib/runtime_config/runtime_config.ml index 63a7f3703d84..59e710cd9a4d 100644 --- a/src/lib/runtime_config/runtime_config.ml +++ b/src/lib/runtime_config/runtime_config.ml @@ -436,6 +436,7 @@ module Json_layout = struct ; supercharged_coinbase_factor : int option [@default None] ; account_creation_fee : Currency.Fee.t option [@default None] ; fork : Fork_config.t option [@default None] + ; signature_kind : Mina_signature_kind.t option [@default None] } [@@deriving yojson, fields] @@ -1057,12 +1058,14 @@ module Proof_keys = struct ; supercharged_coinbase_factor : int option ; account_creation_fee : Currency.Fee.Stable.Latest.t option ; fork : Fork_config.t option + ; signature_kind : Mina_signature_kind.Stable.Latest.t option } [@@deriving bin_io_unversioned] let make ?level ?sub_windows_per_window ?ledger_depth ?work_delay ?block_window_duration_ms ?transaction_capacity ?coinbase_amount - ?supercharged_coinbase_factor ?account_creation_fee ?fork () = + ?supercharged_coinbase_factor ?account_creation_fee ?fork ?signature_kind + () = { level ; sub_windows_per_window ; ledger_depth @@ -1073,6 +1076,7 @@ module Proof_keys = struct ; supercharged_coinbase_factor ; account_creation_fee ; fork + ; signature_kind } let to_json_layout @@ -1086,6 +1090,7 @@ module Proof_keys = struct ; supercharged_coinbase_factor ; account_creation_fee ; fork + ; signature_kind } = { Json_layout.Proof_keys.level = Option.map ~f:Level.to_json_layout level ; sub_windows_per_window @@ -1098,6 +1103,7 @@ module Proof_keys = struct ; supercharged_coinbase_factor ; account_creation_fee ; fork + ; signature_kind } let of_json_layout @@ -1111,6 +1117,7 @@ module Proof_keys = struct ; supercharged_coinbase_factor ; account_creation_fee ; fork + ; signature_kind } = let open Result.Let_syntax in let%map level = result_opt ~f:Level.of_json_layout level @@ -1127,6 +1134,7 @@ module Proof_keys = struct ; supercharged_coinbase_factor ; account_creation_fee ; fork + ; signature_kind } let to_yojson x = Json_layout.Proof_keys.to_yojson (to_json_layout x) @@ -1154,6 +1162,8 @@ module Proof_keys = struct ; account_creation_fee = opt_fallthrough ~default:t1.account_creation_fee t2.account_creation_fee ; fork = opt_fallthrough ~default:t1.fork t2.fork + ; signature_kind = + opt_fallthrough ~default:t1.signature_kind t2.signature_kind } let gen = @@ -1185,6 +1195,7 @@ module Proof_keys = struct ; supercharged_coinbase_factor = Some supercharged_coinbase_factor ; account_creation_fee = Some account_creation_fee ; fork + ; signature_kind = Some Testnet } end diff --git a/src/lib/secrets/hardware_wallets.ml b/src/lib/secrets/hardware_wallets.ml index 706546183ee2..392c49603d04 100644 --- a/src/lib/secrets/hardware_wallets.ml +++ b/src/lib/secrets/hardware_wallets.ml @@ -93,7 +93,7 @@ let compute_public_key ~hd_index = |> Deferred.Result.map_error ~f:report_process_error |> Deferred.map ~f:(Result.bind ~f:decode_public_key) -let sign ~hd_index ~public_key ~user_command_payload : +let sign ~signature_kind ~hd_index ~public_key ~user_command_payload : (Signed_command.With_valid_signature.t, string) Deferred.Result.t = let open Deferred.Result.Let_syntax in let input = @@ -121,7 +121,6 @@ let sign ~hd_index ~public_key ~user_command_payload : |> Deferred.Result.map_error ~f:report_process_error in let%bind signature = decode_signature signature_str |> Deferred.return in - let signature_kind = Mina_signature_kind.t_DEPRECATED in match Signed_command.create_with_signature_checked ~signature_kind signature (Public_key.compress public_key) diff --git a/src/lib/signature_kind/compile_config/dune b/src/lib/signature_kind/compile_config/dune deleted file mode 100644 index bb85b3d0992c..000000000000 --- a/src/lib/signature_kind/compile_config/dune +++ /dev/null @@ -1,9 +0,0 @@ -(library - (name mina_signature_kind_config) - (public_name mina_signature_kind.config) - (libraries mina_node_config) - (preprocess - (pps ppx_version)) - (instrumentation - (backend bisect_ppx)) - (implements mina_signature_kind)) diff --git a/src/lib/signature_kind/compile_config/mina_signature_kind.ml b/src/lib/signature_kind/compile_config/mina_signature_kind.ml deleted file mode 100644 index 020eaa4420a3..000000000000 --- a/src/lib/signature_kind/compile_config/mina_signature_kind.ml +++ /dev/null @@ -1,10 +0,0 @@ -include Mina_signature_kind_type - -let t_DEPRECATED = - match Node_config.network with - | "testnet" -> - Testnet - | "mainnet" -> - Mainnet - | _ -> - Other_network Node_config.network diff --git a/src/lib/signature_kind/dune b/src/lib/signature_kind/dune index 61eb98e05b09..d0f3ae3220d2 100644 --- a/src/lib/signature_kind/dune +++ b/src/lib/signature_kind/dune @@ -1,10 +1,8 @@ (library (name mina_signature_kind) (public_name mina_signature_kind) - (libraries mina_signature_kind.type) + (libraries core_kernel mina_stdlib) (preprocess - (pps ppx_bin_prot ppx_version ppx_deriving_yojson)) + (pps ppx_deriving_yojson ppx_jane ppx_version)) (instrumentation - (backend bisect_ppx)) - (virtual_modules mina_signature_kind) - (default_implementation mina_signature_kind_config)) + (backend bisect_ppx))) diff --git a/src/lib/signature_kind/mainnet/dune b/src/lib/signature_kind/mainnet/dune deleted file mode 100644 index b6a7ce563042..000000000000 --- a/src/lib/signature_kind/mainnet/dune +++ /dev/null @@ -1,8 +0,0 @@ -(library - (name mina_signature_kind_mainnet) - (public_name mina_signature_kind.mainnet) - (preprocess - (pps ppx_version)) - (instrumentation - (backend bisect_ppx)) - (implements mina_signature_kind)) diff --git a/src/lib/signature_kind/mainnet/mina_signature_kind.ml b/src/lib/signature_kind/mainnet/mina_signature_kind.ml deleted file mode 100644 index 5d0425315a7c..000000000000 --- a/src/lib/signature_kind/mainnet/mina_signature_kind.ml +++ /dev/null @@ -1,3 +0,0 @@ -include Mina_signature_kind_type - -let t_DEPRECATED = Mainnet diff --git a/src/lib/signature_kind/mina_signature_kind.ml b/src/lib/signature_kind/mina_signature_kind.ml new file mode 100644 index 000000000000..847a25042a11 --- /dev/null +++ b/src/lib/signature_kind/mina_signature_kind.ml @@ -0,0 +1,88 @@ +open Core_kernel + +[%%versioned +module Stable = struct + module V1 = struct + type t = + | Testnet + | Mainnet + | Other_network of Mina_stdlib.Bounded_types.String.Stable.V1.t + [@@deriving equal] + + let to_latest = Fn.id + end +end] + +let to_string = function + | Testnet -> + "testnet" + | Mainnet -> + "mainnet" + | Other_network name -> + String.lowercase name + +(* Custom JSON serializers to serialize variants as lowercase strings *) +let to_yojson = function + | Testnet -> + `String "testnet" + | Mainnet -> + `String "mainnet" + | Other_network name -> + `String name + +let of_string s = + match String.lowercase s with + | "mainnet" -> + Mainnet + | "testnet" -> + Testnet + | other -> + Other_network other + +let of_yojson = function + | `String s -> + Ok (of_string s) + | _ -> + Error "Signature_kind must be a string" + +(** Generator for random signature kinds. It takes a seed as a parameter for + generating random strings. *) +let signature_kind_gen seed = + let open Quickcheck.Generator.Let_syntax in + let%bind choice = Int.gen_incl 0 2 in + match choice with + | 1 -> + return Testnet + | 2 -> + return Mainnet + | _ -> + let gen = Base_quickcheck.Generator.string in + let random_string = Quickcheck.random_value ~seed gen in + return (Other_network random_string) + +let%test_module "Signature_kind JSON serialization" = + ( module struct + let%test "mainnet serializes to lowercase string" = + match to_yojson Mainnet with `String "mainnet" -> true | _ -> false + + let%test "testnet serializes to lowercase string" = + match to_yojson Testnet with `String "testnet" -> true | _ -> false + + let%test "other_network serializes to its name" = + match to_yojson (Other_network "custom_network") with + | `String "custom_network" -> + true + | _ -> + false + + let%test "mainnet round-trip" = + equal Mainnet @@ Result.ok_or_failwith (of_yojson (to_yojson Mainnet)) + + let%test "testnet round-trip" = + equal Testnet @@ Result.ok_or_failwith (of_yojson (to_yojson Testnet)) + + let%test "other_network round-trip" = + equal (Other_network "my_network") + @@ Result.ok_or_failwith + (of_yojson (to_yojson (Other_network "my_network"))) + end ) diff --git a/src/lib/signature_kind/mina_signature_kind.mli b/src/lib/signature_kind/mina_signature_kind.mli index 08b65faabbb4..67787ac198a2 100644 --- a/src/lib/signature_kind/mina_signature_kind.mli +++ b/src/lib/signature_kind/mina_signature_kind.mli @@ -1,9 +1,24 @@ -type t = Mina_signature_kind_type.t = - | Testnet - | Mainnet - | Other_network of string -[@@deriving bin_io, to_yojson] - -(** The Mina_signature_kind_type in the compiled config. Deprecated - will be - replaced by a runtime-derived value. *) -val t_DEPRECATED : t +open Core_kernel + +[%%versioned: +module Stable : sig + module V1 : sig + type t = + | Testnet + | Mainnet + | Other_network of Mina_stdlib.Bounded_types.String.Stable.V1.t + [@@deriving equal] + + val to_latest : t -> t + end +end] + +val to_yojson : t -> Yojson.Safe.t + +val of_yojson : Yojson.Safe.t -> (t, string) Result.t + +val to_string : t -> string + +val of_string : string -> t + +val signature_kind_gen : Quickcheck.seed -> t Quickcheck.Generator.t diff --git a/src/lib/signature_kind/testnet/dune b/src/lib/signature_kind/testnet/dune deleted file mode 100644 index 8345ee15e174..000000000000 --- a/src/lib/signature_kind/testnet/dune +++ /dev/null @@ -1,8 +0,0 @@ -(library - (name mina_signature_kind_testnet) - (public_name mina_signature_kind.testnet) - (preprocess - (pps ppx_version)) - (instrumentation - (backend bisect_ppx)) - (implements mina_signature_kind)) diff --git a/src/lib/signature_kind/testnet/mina_signature_kind.ml b/src/lib/signature_kind/testnet/mina_signature_kind.ml deleted file mode 100644 index f244d14761ac..000000000000 --- a/src/lib/signature_kind/testnet/mina_signature_kind.ml +++ /dev/null @@ -1,3 +0,0 @@ -include Mina_signature_kind_type - -let t_DEPRECATED = Testnet diff --git a/src/lib/signature_kind/type/dune b/src/lib/signature_kind/type/dune deleted file mode 100644 index 485422503418..000000000000 --- a/src/lib/signature_kind/type/dune +++ /dev/null @@ -1,8 +0,0 @@ -(library - (name mina_signature_kind_type) - (public_name mina_signature_kind.type) - (libraries core_kernel) - (preprocess - (pps ppx_deriving_yojson ppx_jane ppx_version)) - (instrumentation - (backend bisect_ppx))) diff --git a/src/lib/signature_kind/type/mina_signature_kind_type.ml b/src/lib/signature_kind/type/mina_signature_kind_type.ml deleted file mode 100644 index 7b4c05f102fd..000000000000 --- a/src/lib/signature_kind/type/mina_signature_kind_type.ml +++ /dev/null @@ -1,19 +0,0 @@ -open Core_kernel - -type t = Testnet | Mainnet | Other_network of string -[@@deriving bin_io_unversioned, to_yojson] - -(** Generator for random signature kinds. It takes a seed as a parameter for - generating random strings. *) -let signature_kind_gen seed = - let open Quickcheck.Generator.Let_syntax in - let%bind choice = Int.gen_incl 0 2 in - match choice with - | 1 -> - return Testnet - | 2 -> - return Mainnet - | _ -> - let gen = Base_quickcheck.Generator.string in - let random_string = Quickcheck.random_value ~seed gen in - return (Other_network random_string) diff --git a/src/lib/snark_profiler_lib/snark_profiler_lib.ml b/src/lib/snark_profiler_lib/snark_profiler_lib.ml index 41b236783252..23f229fd1ed4 100644 --- a/src/lib/snark_profiler_lib/snark_profiler_lib.ml +++ b/src/lib/snark_profiler_lib/snark_profiler_lib.ml @@ -524,7 +524,7 @@ let apply_transactions_and_keep_intermediate_ledgers Transaction.forget txn |> Sparse_ledger.apply_transaction_first_pass ~constraint_constants ~global_slot:txn_state_view.global_slot_since_genesis - ~txn_state_view l + ~txn_state_view ~signature_kind:Testnet l |> Or_error.ok_exn in (l', (l', txn')) ) diff --git a/src/lib/snark_worker/dune b/src/lib/snark_worker/dune index 7b91bb3cc3e6..81dd08c03f8e 100644 --- a/src/lib/snark_worker/dune +++ b/src/lib/snark_worker/dune @@ -45,7 +45,8 @@ transaction_protocol_state transaction_snark transaction_snark_work - transaction_witness) + transaction_witness + mina_signature_kind) (preprocess (pps ppx_bin_prot diff --git a/src/lib/snark_worker/entry.ml b/src/lib/snark_worker/entry.ml index dead7c65652b..861784919e0a 100644 --- a/src/lib/snark_worker/entry.ml +++ b/src/lib/snark_worker/entry.ml @@ -36,11 +36,10 @@ let dispatch rpc shutdown_on_disconnect query address = | Ok res -> res -let main ~logger ~proof_level ~constraint_constants ~signature_kind - daemon_address shutdown_on_disconnect = +let main ~logger ~proof_level ~constraint_constants daemon_address + shutdown_on_disconnect = let%bind state = - Prod.Impl.Worker_state.create ~constraint_constants ~proof_level - ~signature_kind () + Prod.Impl.Worker_state.create ~constraint_constants ~proof_level () in let wait ?(sec = 0.5) () = after (Time.Span.of_sec sec) in (* retry interval with jitter *) @@ -95,7 +94,7 @@ let main ~logger ~proof_level ~constraint_constants ~signature_kind ~metadata:[ ("time", `Float random_delay) ] ; let%bind () = wait ~sec:random_delay () in go () - | Ok (Some partitioned_spec) -> ( + | Ok (Some (partitioned_spec, signature_kind)) -> ( let address_json = ("address", `String (Host_and_port.to_string daemon_address)) in @@ -113,6 +112,7 @@ let main ~logger ~proof_level ~constraint_constants ~signature_kind let id = Spec.Partitioned.Poly.get_id partitioned_spec in match%bind Prod.Impl.perform_partitioned ~state ~spec:partitioned_spec + ~signature_kind with | Error e -> let%bind () = @@ -166,7 +166,7 @@ let main ~logger ~proof_level ~constraint_constants ~signature_kind go () let command_from_rpcs ~commit_id ~proof_level:default_proof_level - ~constraint_constants ~signature_kind = + ~constraint_constants = Command.async ~summary:"Snark worker" (let open Command.Let_syntax in let%map_open daemon_port = @@ -207,8 +207,7 @@ let command_from_rpcs ~commit_id ~proof_level:default_proof_level [%log info] !"Received signal to terminate. Aborting snark worker process" ; Core.exit 0 ) ; - main ~logger ~proof_level ~constraint_constants ~signature_kind - daemon_port + main ~logger ~proof_level ~constraint_constants daemon_port (Option.value ~default:true shutdown_on_disconnect)) let arguments ~proof_level ~daemon_address ~shutdown_on_disconnect ~conf_dir diff --git a/src/lib/snark_worker/prod.ml b/src/lib/snark_worker/prod.ml index 668daa498bd6..af8c6de665f4 100644 --- a/src/lib/snark_worker/prod.ml +++ b/src/lib/snark_worker/prod.ml @@ -8,11 +8,60 @@ open struct module Work = Snark_work_lib end +module Transaction_snark_cache = struct + type t = + { mainnet : (module Transaction_snark.S) + ; testnet : (module Transaction_snark.S) + ; mutable others : (module Transaction_snark.S) String.Map.t + ; constraint_constants : Genesis_constants.Constraint_constants.t + ; proof_level : Genesis_constants.Proof_level.t + } + + let init_module ~constraint_constants ~proof_level signature_kind = + ( module Transaction_snark.Make (struct + let signature_kind = signature_kind + + let constraint_constants = constraint_constants + + let proof_level = proof_level + end) : Transaction_snark.S ) + + let create ~constraint_constants ~proof_level () = + { mainnet = init_module ~constraint_constants ~proof_level Mainnet + ; testnet = init_module ~constraint_constants ~proof_level Testnet + ; others = String.Map.empty + ; constraint_constants + ; proof_level + } + + let transaction_snark cache signature_kind = + match signature_kind with + | Mina_signature_kind.Mainnet -> + cache.mainnet + | Testnet -> + cache.testnet + | Other_network name -> ( + match String.Map.find cache.others name with + | Some module_ -> + module_ + | None -> + let snark = + init_module ~constraint_constants:cache.constraint_constants + ~proof_level:cache.proof_level (Other_network name) + in + cache.others <- + String.Map.add_exn cache.others ~key:name ~data:snark ; + snark ) +end + module Impl = struct module Worker_state = struct module type S = Transaction_snark.S - type proof_level_snark = Full of (module S) | Check | No_check + type proof_level_snark = + | Full of Transaction_snark_cache.t + | Check + | No_check (* TODO: Make it so that snark worker is configurationless, i.e. coordinater tell the worker through RPC which sig kind should it use. *) @@ -20,33 +69,23 @@ module Impl = struct { proof_level_snark : proof_level_snark ; proof_cache_db : Proof_cache_tag.cache_db ; logger : Logger.t - ; signature_kind : Mina_signature_kind.t } - let create ~constraint_constants ~proof_level ~signature_kind () = + let create ~constraint_constants ~proof_level () = let proof_cache_db = Proof_cache_tag.create_identity_db () in let proof_level_snark = match proof_level with | Genesis_constants.Proof_level.Full -> Full - ( module Transaction_snark.Make (struct - let signature_kind = signature_kind - - let constraint_constants = constraint_constants - - let proof_level = proof_level - end) : S ) + (Transaction_snark_cache.create ~constraint_constants ~proof_level + () ) | Check -> Check | No_check -> No_check in Deferred.return - { proof_level_snark - ; proof_cache_db - ; logger = Logger.create () - ; signature_kind - } + { proof_level_snark; proof_cache_db; logger = Logger.create () } let worker_wait_time = 5. end @@ -231,12 +270,15 @@ module Impl = struct M.merge ~sok_digest proof1 proof2 let perform_single - ({ proof_level_snark; proof_cache_db; logger; signature_kind } : - Worker_state.t ) ~message - (single_spec : Work.Selector.Single.Spec.Stable.Latest.t) = + ({ proof_level_snark; proof_cache_db; logger } : Worker_state.t) ~message + ~signature_kind (single_spec : Work.Selector.Single.Spec.Stable.Latest.t) + = let sok_digest = Mina_base.Sok_message.digest message in match proof_level_snark with - | Full ((module M) as m) -> + | Full cache -> + let m = + Transaction_snark_cache.transaction_snark cache signature_kind + in measure_runtime ~logger ~spec_json: ( lazy @@ -258,45 +300,20 @@ module Impl = struct ~proof:(Lazy.force Proof.transaction_dummy) , Time.Span.zero ) - (* TODO: remove this after whole snark worker PR series had been merged *) - let perform (s : Worker_state.t) public_key - ({ instances; fee } as spec : Work.Selector.Spec.Stable.Latest.t) = - One_or_two.Deferred_result.map instances ~f:(fun w -> - let open Deferred.Or_error.Let_syntax in - let%map proof, time = - perform_single s - ~message:(Mina_base.Sok_message.create ~fee ~prover:public_key) - w - in - ( proof - , (time, match w with Transition _ -> `Transition | Merge _ -> `Merge) - ) ) - |> Deferred.Or_error.map ~f:(function - | `One (proof1, metrics1) -> - { Work.Work.Result.proofs = `One proof1 - ; metrics = `One metrics1 - ; spec - ; prover = public_key - } - | `Two ((proof1, metrics1), (proof2, metrics2)) -> - { Work.Work.Result.proofs = `Two (proof1, proof2) - ; metrics = `Two (metrics1, metrics2) - ; spec - ; prover = public_key - } ) - let perform_partitioned - ~state: - ({ proof_level_snark; proof_cache_db; logger; signature_kind } : - Worker_state.t ) - ~spec:(partitioned_spec : Work.Spec.Partitioned.Stable.Latest.t) = + ~state:({ proof_level_snark; proof_cache_db; logger } : Worker_state.t) + ~spec:(partitioned_spec : Work.Spec.Partitioned.Stable.Latest.t) + ~signature_kind = let open Deferred.Or_error.Let_syntax in let sok_digest = Work.Spec.Partitioned.Poly.sok_message partitioned_spec |> Sok_message.digest in match proof_level_snark with - | Worker_state.Full ((module M) as m) -> ( + | Worker_state.Full cache -> ( + let m = + Transaction_snark_cache.transaction_snark cache signature_kind + in match partitioned_spec with | Work.Spec.Partitioned.Poly.Single { spec = single_spec; _ } -> let%map proof, elapsed = @@ -320,7 +337,7 @@ module Impl = struct Transaction_witness.Zkapp_command_segment_witness .write_all_proofs_to_disk ~signature_kind ~proof_cache_db witness in - + let (module M) = m in let%map proof, elapsed = log_subzkapp_base_snark ~logger ~statement ~spec:segment_spec ~sok_digest diff --git a/src/lib/snark_worker/rpc_get_work.ml b/src/lib/snark_worker/rpc_get_work.ml index d9d6a6e496ea..61f8fd5a4152 100644 --- a/src/lib/snark_worker/rpc_get_work.ml +++ b/src/lib/snark_worker/rpc_get_work.ml @@ -13,7 +13,9 @@ module Master = struct module T = struct type query = unit - type response = Spec.Partitioned.Stable.Latest.t option + type response = + (Spec.Partitioned.Stable.Latest.t * Mina_signature_kind.Stable.Latest.t) + option end module Caller = T @@ -28,7 +30,8 @@ module Stable = struct module T = struct type query = unit - type response = Spec.Partitioned.Stable.V1.t option + type response = + (Spec.Partitioned.Stable.V1.t * Mina_signature_kind.Stable.V1.t) option let query_of_caller_model = Fn.id diff --git a/src/lib/snark_worker/standalone/run_snark_worker.ml b/src/lib/snark_worker/standalone/run_snark_worker.ml index 3e1682807a98..0105e1c4cf6a 100644 --- a/src/lib/snark_worker/standalone/run_snark_worker.ml +++ b/src/lib/snark_worker/standalone/run_snark_worker.ml @@ -27,7 +27,7 @@ let submit_graphql input graphql_endpoint = Format.printf "Graphql error: %s\n" s ; exit 1 -let perform (s : Prod.Worker_state.t) ~fee ~public_key +let perform (s : Prod.Worker_state.t) ~fee ~public_key ~signature_kind (spec : ( Transaction_witness.Stable.Latest.t , Ledger_proof.t ) @@ -36,7 +36,7 @@ let perform (s : Prod.Worker_state.t) ~fee ~public_key One_or_two.Deferred_result.map spec ~f:(fun w -> let open Deferred.Or_error.Let_syntax in let%map proof, time = - Prod.perform_single s + Prod.perform_single s ~signature_kind ~message:(Mina_base.Sok_message.create ~fee ~prover:public_key) w in @@ -97,17 +97,14 @@ let command = and proof_submission_graphql_endpoint = flag "--graphql-uri" ~doc:"Graphql endpoint to submit proofs" (optional Cli_lib.Arg_type.uri) - in + and signature_kind = Cli_lib.Flag.signature_kind in fun () -> let open Async in let constraint_constants = Genesis_constants.Compiled.constraint_constants in - - let signature_kind = Mina_signature_kind.t_DEPRECATED in let%bind worker_state = - Prod.Worker_state.create ~constraint_constants ~proof_level - ~signature_kind () + Prod.Worker_state.create ~constraint_constants ~proof_level () in let%bind spec = let spec_of_json json = @@ -154,7 +151,9 @@ let command = ~default:(Currency.Fee.of_nanomina_int_exn 10) snark_work_fee in - match%bind perform worker_state ~fee ~public_key spec with + match%bind + perform worker_state ~fee ~public_key ~signature_kind spec + with | Ok result -> ( Caml.Format.printf !"@[Successfully proved. Result: \n\ diff --git a/src/lib/staged_ledger/pre_diff_info.ml b/src/lib/staged_ledger/pre_diff_info.ml index 0bc14a91d87e..6d129c511c21 100644 --- a/src/lib/staged_ledger/pre_diff_info.ml +++ b/src/lib/staged_ledger/pre_diff_info.ml @@ -362,8 +362,9 @@ let check_coinbase x y ) ) let compute_statuses - ~(constraint_constants : Genesis_constants.Constraint_constants.t) ~diff - ~coinbase_receiver ~coinbase_amount ~global_slot ~txn_state_view ~ledger : + ~(constraint_constants : Genesis_constants.Constraint_constants.t) + ~signature_kind ~diff ~coinbase_receiver ~coinbase_amount ~global_slot + ~txn_state_view ~ledger : (Staged_ledger_diff.With_valid_signatures_and_proofs.diff, _) result = let open Result.Let_syntax in (* project transactions into a sequence of transactions *) @@ -425,8 +426,8 @@ let compute_statuses in let%map txns_with_statuses = Transaction_snark.Transaction_validator.apply_transactions - ~constraint_constants ~global_slot ~txn_state_view - ~signature_kind:Mina_signature_kind.t_DEPRECATED ledger txns + ~constraint_constants ~global_slot ~txn_state_view ~signature_kind ledger + txns |> Result.map_error ~f:(fun err -> Error.Unexpected err) in let p1_txns_with_statuses, p2_txns_with_statuses = diff --git a/src/lib/staged_ledger/staged_ledger.ml b/src/lib/staged_ledger/staged_ledger.ml index fe2fb0fd8af7..b6ddede892fc 100644 --- a/src/lib/staged_ledger/staged_ledger.ml +++ b/src/lib/staged_ledger/staged_ledger.ml @@ -258,9 +258,9 @@ module T = struct let pending_coinbase_collection { pending_coinbase_collection; _ } = pending_coinbase_collection - let verify_scan_state_after_apply ~constraint_constants - ~pending_coinbase_stack ~first_pass_ledger_end ~second_pass_ledger_end - (scan_state : Scan_state.t) = + let verify_scan_state_after_apply ~constraint_constants ~signature_kind + ~logger ~pending_coinbase_stack ~first_pass_ledger_end + ~second_pass_ledger_end (scan_state : Scan_state.t) = let error_prefix = "Error verifying the parallel scan state after applying the diff." in @@ -277,9 +277,9 @@ module T = struct ~f:(fun ((p, _), _) -> Ledger_proof.Cached.statement p) (Scan_state.latest_ledger_proof scan_state) in - Statement_scanner.check_invariants ~constraint_constants scan_state - ~statement_check ~verifier:() ~error_prefix ~registers_end - ~last_proof_statement + Statement_scanner.check_invariants ~constraint_constants ~signature_kind + ~logger scan_state ~statement_check ~verifier:() ~error_prefix + ~registers_end ~last_proof_statement let of_scan_state_and_ledger_unchecked ~ledger ~scan_state ~constraint_constants ~pending_coinbase_collection = @@ -287,7 +287,7 @@ module T = struct let of_scan_state_and_ledger ~logger ~(constraint_constants : Genesis_constants.Constraint_constants.t) - ~verifier ~last_proof_statement ~ledger ~scan_state + ~signature_kind ~verifier ~last_proof_statement ~ledger ~scan_state ~pending_coinbase_collection ~get_state ~first_pass_ledger_target = let open Deferred.Or_error.Let_syntax in let t = @@ -301,7 +301,7 @@ module T = struct in let%bind () = Statement_scanner_with_proofs.check_invariants ~constraint_constants - ~logger scan_state ~statement_check:(`Full get_state) + ~signature_kind ~logger scan_state ~statement_check:(`Full get_state) ~verifier:{ Statement_scanner_proof_verifier.logger; verifier } ~error_prefix:"Staged_ledger.of_scan_state_and_ledger" ~last_proof_statement @@ -316,9 +316,9 @@ module T = struct return t let of_scan_state_and_ledger_unchecked - ~(constraint_constants : Genesis_constants.Constraint_constants.t) ~logger - ~last_proof_statement ~ledger ~scan_state ~pending_coinbase_collection - ~first_pass_ledger_target = + ~(constraint_constants : Genesis_constants.Constraint_constants.t) + ~signature_kind ~logger ~last_proof_statement ~ledger ~scan_state + ~pending_coinbase_collection ~first_pass_ledger_target = let open Deferred.Or_error.Let_syntax in let%bind pending_coinbase_stack = Pending_coinbase.latest_stack ~is_new_stack:false @@ -326,8 +326,8 @@ module T = struct |> Deferred.return in let%bind () = - Statement_scanner.check_invariants ~constraint_constants ~logger - scan_state ~statement_check:`Partial ~verifier:() + Statement_scanner.check_invariants ~constraint_constants ~signature_kind + ~logger scan_state ~statement_check:`Partial ~verifier:() ~error_prefix:"Staged_ledger.of_scan_state_and_ledger" ~last_proof_statement ~registers_end: @@ -354,7 +354,8 @@ module T = struct let open Or_error.Let_syntax in let%map _ledger, partial_txn = Mina_ledger.Sparse_ledger.apply_transaction_first_pass - ~constraint_constants ~global_slot ~txn_state_view sparse_ledger txn + ~constraint_constants ~global_slot ~txn_state_view ~signature_kind + sparse_ledger txn in partial_txn in @@ -380,9 +381,9 @@ module T = struct Scan_state.latest_ledger_proof scan_state |> Option.map ~f:(fun ((p, _), _) -> Ledger_proof.Cached.statement p) in - f ~constraint_constants ~last_proof_statement ~ledger:snarked_ledger - ~scan_state ~pending_coinbase_collection:pending_coinbases - ~first_pass_ledger_target + f ~constraint_constants ~signature_kind ~last_proof_statement + ~ledger:snarked_ledger ~scan_state + ~pending_coinbase_collection:pending_coinbases ~first_pass_ledger_target let of_scan_state_pending_coinbases_and_snarked_ledger ~logger ~constraint_constants ~verifier ~scan_state ~snarked_ledger @@ -1147,8 +1148,8 @@ module T = struct [%log internal] "Verify_scan_state_after_apply" ; O1trace.thread "verify_scan_state_after_apply" (fun () -> Deferred.( - verify_scan_state_after_apply ~constraint_constants ~logger - ~first_pass_ledger_end + verify_scan_state_after_apply ~constraint_constants + ~signature_kind ~logger ~first_pass_ledger_end ~second_pass_ledger_end: (Frozen_ledger_hash.of_ledger_hash (Ledger.merkle_root new_ledger) ) @@ -2095,7 +2096,7 @@ module T = struct let create_diff ~(constraint_constants : Genesis_constants.Constraint_constants.t) - ~(global_slot : Mina_numbers.Global_slot_since_genesis.t) + ~signature_kind ~(global_slot : Mina_numbers.Global_slot_since_genesis.t) ?(log_block_creation = false) t ~coinbase_receiver ~logger ~current_state_view ~zkapp_cmd_limit ~(transactions_by_fee : User_command.Valid.t Sequence.t) @@ -2203,8 +2204,7 @@ module T = struct let apply = Transaction_validator.apply_transaction_first_pass ~constraint_constants ~global_slot validating_ledger - ~txn_state_view:current_state_view - ~signature_kind:Mina_signature_kind.t_DEPRECATED + ~txn_state_view:current_state_view ~signature_kind in (* Transactions in reverse order for faster removal if there is no space when creating the diff *) @@ -2235,7 +2235,8 @@ module T = struct let%map diff = (* Fill in the statuses for commands. *) with_ledger_mask t.ledger ~f:(fun status_ledger -> - Pre_diff_info.compute_statuses ~constraint_constants ~diff + Pre_diff_info.compute_statuses ~constraint_constants + ~signature_kind ~diff ~coinbase_amount: (Option.value_exn (coinbase_amount ~constraint_constants @@ -2395,6 +2396,8 @@ let%test_module "staged ledger tests" = let constraint_constants = Genesis_constants.For_unit_tests.Constraint_constants.t + let signature_kind = Mina_signature_kind.Testnet + let zkapp_cmd_limit_hardcap = 200 let logger = Logger.null () @@ -2433,8 +2436,8 @@ let%test_module "staged ledger tests" = supercharge_coinbase ~ledger:(Sl.ledger !sl) ~winner ~global_slot in let diff = - Sl.create_diff ~constraint_constants ~global_slot !sl ~logger - ~current_state_view ~transactions_by_fee:txns + Sl.create_diff ~constraint_constants ~signature_kind ~global_slot !sl + ~logger ~current_state_view ~transactions_by_fee:txns ~get_completed_work:stmt_to_work ~supercharge_coinbase ~coinbase_receiver ~zkapp_cmd_limit in @@ -2820,7 +2823,7 @@ let%test_module "staged ledger tests" = let%map.Or_error _ledger, partial_txn = Mina_ledger.Sparse_ledger.apply_transaction_first_pass ~constraint_constants ~global_slot ~txn_state_view - sparse_ledger txn + ~signature_kind sparse_ledger txn in partial_txn in @@ -3177,9 +3180,8 @@ let%test_module "staged ledger tests" = ~f:(fun ((ledger, zkapps, iters), global_slot) -> async_with_given_ledger ledger (fun ~snarked_ledger sl test_mask -> let account_ids = ledger_account_ids ledger in - test_simple ~global_slot - ~signature_kind:Mina_signature_kind.Testnet account_ids zkapps - iters sl test_mask ~snarked_ledger `Many_provers + test_simple ~global_slot ~signature_kind:Testnet account_ids + zkapps iters sl test_mask ~snarked_ledger `Many_provers stmt_to_work_random_prover ) ) let%test_unit "Max_throughput with zkApp transactions that may fail" = @@ -3190,9 +3192,8 @@ let%test_module "staged ledger tests" = ~f:(fun ((ledger, zkapps, iters), global_slot) -> async_with_given_ledger ledger (fun ~snarked_ledger sl test_mask -> let account_ids = ledger_account_ids ledger in - test_simple ~global_slot - ~signature_kind:Mina_signature_kind.Testnet account_ids zkapps - iters ~allow_failures:true sl test_mask ~snarked_ledger + test_simple ~global_slot ~signature_kind:Testnet account_ids + zkapps iters ~allow_failures:true sl test_mask ~snarked_ledger `Many_provers stmt_to_work_random_prover ) ) let%test_unit "Max throughput-ledger proof count-fixed blocks (zkApps)" = @@ -3206,9 +3207,9 @@ let%test_module "staged ledger tests" = ~f:(fun ((ledger, zkapps, iters), global_slot) -> async_with_given_ledger ledger (fun ~snarked_ledger sl test_mask -> let account_ids = ledger_account_ids ledger in - test_simple ~global_slot - ~signature_kind:Mina_signature_kind.Testnet account_ids zkapps - iters sl ~expected_proof_count:(Some expected_proof_count) + test_simple ~global_slot ~signature_kind:Testnet account_ids + zkapps iters sl + ~expected_proof_count:(Some expected_proof_count) ~check_snarked_ledger_transition:true test_mask ~snarked_ledger `Many_provers stmt_to_work_random_prover ) ) @@ -3249,9 +3250,8 @@ let%test_module "staged ledger tests" = ~f:(fun ((ledger, zkapps, iters), global_slot) -> async_with_given_ledger ledger (fun ~snarked_ledger sl test_mask -> let account_ids = ledger_account_ids ledger in - test_simple ~global_slot - ~signature_kind:Mina_signature_kind.Testnet account_ids zkapps - iters sl test_mask ~snarked_ledger `Many_provers + test_simple ~global_slot ~signature_kind:Testnet account_ids + zkapps iters sl test_mask ~snarked_ledger `Many_provers stmt_to_work_random_prover ) ) let%test_unit "Be able to include random number of commands (One prover)" = @@ -3279,9 +3279,8 @@ let%test_module "staged ledger tests" = ~f:(fun ((ledger, zkapps, iters), global_slot) -> async_with_given_ledger ledger (fun ~snarked_ledger sl test_mask -> let account_ids = ledger_account_ids ledger in - test_simple ~global_slot - ~signature_kind:Mina_signature_kind.Testnet account_ids zkapps - iters sl test_mask ~snarked_ledger + test_simple ~global_slot ~signature_kind:Testnet account_ids + zkapps iters sl test_mask ~snarked_ledger ~check_snarked_ledger_transition:true `One_prover stmt_to_work_one_prover ) ) @@ -3318,11 +3317,12 @@ let%test_module "staged ledger tests" = (Account_id.create snark_worker_pk Token_id.default) ) ) ) ) - let compute_statuses ~ledger ~coinbase_amount ~global_slot diff = + let compute_statuses ~ledger ~coinbase_amount ~global_slot ~signature_kind + diff = with_ledger_mask ledger ~f:(fun status_ledger -> let diff = - Pre_diff_info.compute_statuses ~constraint_constants ~diff - ~coinbase_amount ~coinbase_receiver ~ledger:status_ledger + Pre_diff_info.compute_statuses ~constraint_constants ~signature_kind + ~diff ~coinbase_amount ~coinbase_receiver ~ledger:status_ledger ~global_slot ~txn_state_view:(dummy_state_view ~global_slot ()) |> Result.map_error ~f:Pre_diff_info.Error.to_error @@ -3340,6 +3340,7 @@ let%test_module "staged ledger tests" = match partition.second with | None -> compute_statuses ~ledger ~coinbase_amount ~global_slot + ~signature_kind @@ ( { completed_works = List.take completed_works job_count1 ; commands = List.take txns slots ; coinbase = Zero @@ -3349,6 +3350,7 @@ let%test_module "staged ledger tests" = | Some (_, _) -> let txns_in_second_diff = List.drop txns slots in compute_statuses ~ledger ~coinbase_amount ~global_slot + ~signature_kind ( { completed_works = List.take completed_works job_count1 ; commands = List.take txns slots ; coinbase = Zero @@ -3489,8 +3491,8 @@ let%test_module "staged ledger tests" = in let current_state_view = dummy_state_view ~global_slot () in let diff_result = - Sl.create_diff ~constraint_constants ~global_slot !sl - ~logger ~current_state_view + Sl.create_diff ~constraint_constants ~signature_kind + ~global_slot !sl ~logger ~current_state_view ~transactions_by_fee:cmds_this_iter ~get_completed_work:stmt_to_work ~coinbase_receiver ~supercharge_coinbase:true ~zkapp_cmd_limit:None @@ -4045,13 +4047,11 @@ let%test_module "staged ledger tests" = let%test_unit "Validate pending coinbase for random number of \ commands-random number of proofs-one prover)" = - pending_coinbase_test ~signature_kind:Mina_signature_kind.Testnet - `One_prover + pending_coinbase_test ~signature_kind:Testnet `One_prover let%test_unit "Validate pending coinbase for random number of \ commands-random number of proofs-many provers)" = - pending_coinbase_test ~signature_kind:Mina_signature_kind.Testnet - `Many_provers + pending_coinbase_test ~signature_kind:Testnet `Many_provers let timed_account n = let keypair = @@ -4327,8 +4327,7 @@ let%test_module "staged ledger tests" = let%test_unit "Commands with Insufficient funds are not included" = let logger = Logger.null () in - Quickcheck.test - (command_insufficient_funds ~signature_kind:Mina_signature_kind.Testnet) + Quickcheck.test (command_insufficient_funds ~signature_kind:Testnet) ~trials:1 ~f:(fun (ledger_init_state, invalid_command, global_slot) -> async_with_ledgers ledger_init_state (fun ~snarked_ledger:_ sl _test_mask -> @@ -4337,8 +4336,8 @@ let%test_module "staged ledger tests" = in let current_state_view = dummy_state_view ~global_slot () in let diff_result = - Sl.create_diff ~constraint_constants ~global_slot !sl ~logger - ~current_state_view + Sl.create_diff ~constraint_constants ~signature_kind + ~global_slot !sl ~logger ~current_state_view ~transactions_by_fee:(Sequence.of_list [ invalid_command ]) ~get_completed_work:(stmt_to_work_zero_fee ~prover:self_pk) ~coinbase_receiver ~supercharge_coinbase:false @@ -4429,8 +4428,8 @@ let%test_module "staged ledger tests" = , state_hashes.state_body_hash |> Option.value_exn ) in let diff_result = - Sl.create_diff ~constraint_constants ~global_slot !sl ~logger - ~current_state_view + Sl.create_diff ~constraint_constants ~signature_kind + ~global_slot !sl ~logger ~current_state_view ~transactions_by_fee:(Sequence.of_list [ valid_command ]) ~get_completed_work:(stmt_to_work_zero_fee ~prover:self_pk) ~coinbase_receiver ~supercharge_coinbase:false @@ -4640,8 +4639,8 @@ let%test_module "staged ledger tests" = , state_hashes.state_body_hash |> Option.value_exn ) in match - Sl.create_diff ~constraint_constants ~global_slot sl ~logger - ~current_state_view + Sl.create_diff ~constraint_constants ~signature_kind ~global_slot sl + ~logger ~current_state_view ~transactions_by_fee: (Sequence.of_list [ valid_command_1 @@ -4868,8 +4867,8 @@ let%test_module "staged ledger tests" = |> replace_authorizations ?prover ~keymap let%test_unit "Setting verification keys across differing accounts" = - test_staged_ledger_diff_validity - ~signature_kind:Mina_signature_kind.Testnet ~expectation:`Accept + test_staged_ledger_diff_validity ~signature_kind:Testnet + ~expectation:`Accept ~setup_test:(fun _ledger (a, privkey_a, _loc_a) (b, privkey_b, _loc_b) -> let `VK vk_a, `Prover prover_a = @@ -4939,8 +4938,8 @@ let%test_module "staged ledger tests" = let%test_unit "Verification keys set in failed commands should not be \ usable later" = - test_staged_ledger_diff_validity - ~signature_kind:Mina_signature_kind.Testnet ~expectation:`Accept + test_staged_ledger_diff_validity ~signature_kind:Testnet + ~expectation:`Accept ~setup_test:(fun _ledger (a, privkey_a, _loc_a) (_b, _privkey_b, _loc_b) -> let `VK vk_a, `Prover prover_a = @@ -5239,8 +5238,8 @@ let%test_module "staged ledger tests" = , state_hashes.state_body_hash |> Option.value_exn ) in match - Sl.create_diff ~constraint_constants ~global_slot !sl - ~logger ~current_state_view + Sl.create_diff ~constraint_constants ~signature_kind + ~global_slot !sl ~logger ~current_state_view ~transactions_by_fee: (Sequence.singleton (User_command.Zkapp_command invalid_zkapp_command) ) diff --git a/src/lib/staged_ledger/staged_ledger.mli b/src/lib/staged_ledger/staged_ledger.mli index f6fe4d29f070..c4dbb472b9b3 100644 --- a/src/lib/staged_ledger/staged_ledger.mli +++ b/src/lib/staged_ledger/staged_ledger.mli @@ -301,6 +301,7 @@ end val create_diff : constraint_constants:Genesis_constants.Constraint_constants.t + -> signature_kind:Mina_signature_kind.t -> global_slot:Mina_numbers.Global_slot_since_genesis.t -> ?log_block_creation:bool -> t diff --git a/src/lib/staged_ledger/test/txn_application_test.ml b/src/lib/staged_ledger/test/txn_application_test.ml index 20571d5e7cad..13f756099127 100644 --- a/src/lib/staged_ledger/test/txn_application_test.ml +++ b/src/lib/staged_ledger/test/txn_application_test.ml @@ -24,8 +24,7 @@ let gen_apply_and_txn : (apply * Application_state.txn) Quickcheck.Generator.t = let apply = Transaction_snark.Transaction_validator.apply_transaction_first_pass ~constraint_constants ~global_slot validating_ledger - ~txn_state_view:current_state_view - ~signature_kind:Mina_signature_kind.Testnet + ~txn_state_view:current_state_view ~signature_kind:Testnet in (apply, txn) diff --git a/src/lib/string_sign/string_sign.ml b/src/lib/string_sign/string_sign.ml index 6cfd25d09147..fc50b1a7c440 100644 --- a/src/lib/string_sign/string_sign.ml +++ b/src/lib/string_sign/string_sign.ml @@ -53,17 +53,11 @@ let string_to_input s = ; bitstrings = Stdlib.(Array.of_seq (Seq.map char_bits (String.to_seq s))) } -let verify ?signature_kind signature pk s = +let verify ~signature_kind signature pk s = let m = string_to_input s in let inner_curve = Inner_curve.of_affine pk in - let signature_kind = - Option.value signature_kind ~default:Mina_signature_kind.t_DEPRECATED - in Schnorr.Legacy.verify ~signature_kind signature inner_curve m -let sign ?signature_kind sk s = +let sign ~signature_kind sk s = let m = string_to_input s in - let signature_kind = - Option.value signature_kind ~default:Mina_signature_kind.t_DEPRECATED - in Schnorr.Legacy.sign ~signature_kind sk m diff --git a/src/lib/string_sign/tests/dune b/src/lib/string_sign/tests/dune index dbccf4cfb286..ba94482dc42d 100644 --- a/src/lib/string_sign/tests/dune +++ b/src/lib/string_sign/tests/dune @@ -8,7 +8,6 @@ ;; local libraries mina_base mina_signature_kind - mina_signature_kind.type signature_lib string_sign) (instrumentation diff --git a/src/lib/string_sign/tests/test_string_sign.ml b/src/lib/string_sign/tests/test_string_sign.ml index f94908885364..cc0782e25e95 100644 --- a/src/lib/string_sign/tests/test_string_sign.ml +++ b/src/lib/string_sign/tests/test_string_sign.ml @@ -29,10 +29,11 @@ let test_default_network () = let s = "Now is the time for all good men to come to the aid of their party" in - let signature = sign keypair.private_key s in + let signature_kind = Mina_signature_kind.Testnet in + let signature = sign ~signature_kind keypair.private_key s in Alcotest.(check bool) "Sign and verify with default network" true - (verify signature keypair.public_key s) + (verify ~signature_kind signature keypair.public_key s) (* Test signing and verification with mainnet *) let test_mainnet () = @@ -168,9 +169,7 @@ let test_secret_key_between_scalar_field_and_base_field () = (* Combined generator for both signature kind and offset *) let combined_gen = let open Quickcheck.Generator.Let_syntax in - let%bind signature_kind = - Mina_signature_kind_type.signature_kind_gen seed - in + let%bind signature_kind = Mina_signature_kind.signature_kind_gen seed in let%map offset = offset_gen in (signature_kind, offset) in @@ -195,10 +194,10 @@ let test_regression_signature () = let inputs = [ ( Signature_lib.Private_key.of_string_exn "28948022309329048855892746252171976963363056481941560715954676764349967630337" - , Mina_signature_kind_type.Mainnet ) + , Mina_signature_kind.Mainnet ) ; ( Signature_lib.Private_key.of_string_exn "28948022309329048855892746252171976963363056481941560715954676764349967630337" - , Mina_signature_kind_type.Testnet ) + , Mina_signature_kind.Testnet ) ] in let exp_output = diff --git a/src/lib/testing/integration_test_lib/test_config.ml b/src/lib/testing/integration_test_lib/test_config.ml index c3752e392492..f1c95e4d6b6f 100644 --- a/src/lib/testing/integration_test_lib/test_config.ml +++ b/src/lib/testing/integration_test_lib/test_config.ml @@ -104,6 +104,7 @@ let proof_config_default : Runtime_config.Proof_keys.t = "3NKSvjaGSKiQuAt8BP1b1VCpLbJc9RcEFjYCaBYsJJFdrtd6tpaV" (*any state hash would do*) } + ; signature_kind = Some Testnet } let log_filter_of_event_type ev_existential = diff --git a/src/lib/transaction_snark/test/account_timing/account_timing.ml b/src/lib/transaction_snark/test/account_timing/account_timing.ml index 73a8bc8f2eee..b39ed10072d4 100644 --- a/src/lib/transaction_snark/test/account_timing/account_timing.ml +++ b/src/lib/transaction_snark/test/account_timing/account_timing.ml @@ -345,8 +345,8 @@ let%test_module "account timing check" = let state_body_hash = Mina_state.Protocol_state.Body.hash state_body in let sparse_ledger_after, txns_applied = Mina_ledger.Sparse_ledger.apply_transactions ~constraint_constants - ~global_slot:txn_global_slot ~txn_state_view sparse_ledger_before - [ transaction ] + ~global_slot:txn_global_slot ~txn_state_view ~signature_kind:Testnet + sparse_ledger_before [ transaction ] |> Or_error.ok_exn in let txn_applied = List.hd_exn txns_applied in diff --git a/src/lib/transaction_snark/test/fee_payer/fee_payer.ml b/src/lib/transaction_snark/test/fee_payer/fee_payer.ml index 57ed01f40749..1274d5ed1eba 100644 --- a/src/lib/transaction_snark/test/fee_payer/fee_payer.ml +++ b/src/lib/transaction_snark/test/fee_payer/fee_payer.ml @@ -197,7 +197,8 @@ let%test_module "Fee payer tests" = Token_id.default ) ) in Sparse_ledger.apply_transaction_first_pass ~constraint_constants - ~global_slot ~txn_state_view sparse_ledger + ~global_slot ~txn_state_view ~signature_kind:Testnet + sparse_ledger (Mina_transaction.Transaction.Command (Zkapp_command zkapp_command) ) with diff --git a/src/lib/transaction_snark/test/transaction_union/transaction_union.ml b/src/lib/transaction_snark/test/transaction_union/transaction_union.ml index 154cd7762bb1..08f8d4bd86f3 100644 --- a/src/lib/transaction_snark/test/transaction_union/transaction_union.ml +++ b/src/lib/transaction_snark/test/transaction_union/transaction_union.ml @@ -134,11 +134,10 @@ let%test_module "Transaction union tests" = Result.( >>= ) (Sparse_ledger.apply_transaction_first_pass ~constraint_constants:U.constraint_constants ~global_slot - sparse_ledger ~txn_state_view: ( txn_in_block.block_data |> Mina_state.Protocol_state.Body.view ) - txn_in_block.transaction ) + ~signature_kind:Testnet sparse_ledger txn_in_block.transaction ) (fun (sparse_ledger, partially_applied) -> Sparse_ledger.apply_transaction_second_pass sparse_ledger partially_applied ) diff --git a/src/lib/transaction_snark/test/zkapp_payments/zkapp_payments.ml b/src/lib/transaction_snark/test/zkapp_payments/zkapp_payments.ml index f6213dd8bb7a..184e1fdf3728 100644 --- a/src/lib/transaction_snark/test/zkapp_payments/zkapp_payments.ml +++ b/src/lib/transaction_snark/test/zkapp_payments/zkapp_payments.ml @@ -29,7 +29,7 @@ let%test_module "Zkapp payments tests" = let hash = Ledger.merkle_root_after_zkapp_command_exn ~constraint_constants:U.constraint_constants ~global_slot - ~txn_state_view t txn + ~txn_state_view ~signature_kind:Testnet t txn in Frozen_ledger_hash.of_ledger_hash hash diff --git a/src/lib/transaction_snark_scan_state/transaction_snark_scan_state.ml b/src/lib/transaction_snark_scan_state/transaction_snark_scan_state.ml index 199944e3c907..2be8e6aec898 100644 --- a/src/lib/transaction_snark_scan_state/transaction_snark_scan_state.ml +++ b/src/lib/transaction_snark_scan_state/transaction_snark_scan_state.ml @@ -253,7 +253,7 @@ type t = (**********Helpers*************) -let create_expected_statement ~constraint_constants +let create_expected_statement ~constraint_constants ~signature_kind ~(get_state : State_hash.t -> Mina_state.Protocol_state.value Or_error.t) ~connecting_merkle_root { Transaction_with_witness.transaction_with_info @@ -285,7 +285,7 @@ let create_expected_statement ~constraint_constants let%bind first_pass_ledger_after_apply, partially_applied_transaction = Sparse_ledger.apply_transaction_first_pass ~constraint_constants ~global_slot:block_global_slot ~txn_state_view:state_view - first_pass_ledger_witness transaction + ~signature_kind first_pass_ledger_witness transaction in let%bind second_pass_ledger_after_apply, applied_transaction = Sparse_ledger.apply_transaction_second_pass second_pass_ledger_witness @@ -414,7 +414,7 @@ struct end (*TODO: fold over the pending_coinbase tree and validate the statements?*) - let scan_statement (type merge) ~constraint_constants ~logger + let scan_statement (type merge) ~constraint_constants ~signature_kind ~logger ~merge_to_statement tree ~statement_check ~verify = let open Deferred.Or_error.Let_syntax in let timer = Timer.create ~logger () in @@ -505,7 +505,7 @@ struct (sprintf "create_expected_statement:%s" __LOC__) (fun () -> Deferred.return (create_expected_statement ~constraint_constants - ~get_state + ~signature_kind ~get_state ~connecting_merkle_root: transaction.statement.connecting_ledger_left transaction ) ) @@ -585,7 +585,8 @@ struct Deferred.return (Error (`Error e)) let check_invariants_impl parallel_scan_state ~merge_to_statement - ~constraint_constants ~logger ~statement_check ~verify ~error_prefix + ~constraint_constants ~signature_kind ~logger ~statement_check ~verify + ~error_prefix ~(last_proof_statement : Transaction_snark.Statement.t option) ~(registers_end : ( Frozen_ledger_hash.t @@ -623,8 +624,8 @@ struct in match%map O1trace.sync_thread "validate_transaction_snark_scan_state" (fun () -> - scan_statement parallel_scan_state ~constraint_constants ~logger - ~statement_check ~verify ~merge_to_statement ) + scan_statement parallel_scan_state ~constraint_constants + ~signature_kind ~logger ~statement_check ~verify ~merge_to_statement ) with | Error (`Error e) -> Error e diff --git a/src/lib/transaction_snark_scan_state/transaction_snark_scan_state.mli b/src/lib/transaction_snark_scan_state/transaction_snark_scan_state.mli index 7fecbf0a5de8..26ebf323f448 100644 --- a/src/lib/transaction_snark_scan_state/transaction_snark_scan_state.mli +++ b/src/lib/transaction_snark_scan_state/transaction_snark_scan_state.mli @@ -58,6 +58,7 @@ end) : sig t -> verifier:Verifier.t -> constraint_constants:Genesis_constants.Constraint_constants.t + -> signature_kind:Mina_signature_kind.t -> logger:Logger.t -> statement_check: [ `Full of State_hash.t -> Mina_state.Protocol_state.value Or_error.t diff --git a/src/lib/transition_frontier/frontier_base/breadcrumb.ml b/src/lib/transition_frontier/frontier_base/breadcrumb.ml index 51050b04e6b3..9e15424220a1 100644 --- a/src/lib/transition_frontier/frontier_base/breadcrumb.ml +++ b/src/lib/transition_frontier/frontier_base/breadcrumb.ml @@ -106,7 +106,7 @@ let compute_block_trace_metadata transition_with_validation = let build ?skip_staged_ledger_verification ?transaction_pool_proxy ~logger ~precomputed_values ~verifier ~trust_system ~parent ~transition:(transition_with_validation : Mina_block.almost_valid_block) - ~get_completed_work ~sender ~transition_receipt_time () = + ~get_completed_work ~sender ~transition_receipt_time ~signature_kind () = let state_hash = ( With_hash.hash @@ Mina_block.Validation.block_with_hash transition_with_validation ) @@ -126,7 +126,7 @@ let build ?skip_staged_ledger_verification ?transaction_pool_proxy ~logger ~parent_protocol_state: ( parent.validated_transition |> Mina_block.Validated.header |> Mina_block.Header.protocol_state ) - ?transaction_pool_proxy transition_with_validation + ~signature_kind ?transaction_pool_proxy transition_with_validation with | Ok ( `Just_emitted_a_proof just_emitted_a_proof @@ -402,11 +402,12 @@ module For_tests = struct in let coinbase_receiver = largest_account_public_key in let staged_ledger_diff, _invalid_txns = - Staged_ledger.create_diff parent_staged_ledger ~logger - ~global_slot:current_global_slot + Staged_ledger.create_diff ~constraint_constants:precomputed_values.constraint_constants - ~coinbase_receiver ~current_state_view ~supercharge_coinbase - ~transactions_by_fee:transactions ~get_completed_work ~zkapp_cmd_limit + ~signature_kind:Testnet ~global_slot:current_global_slot + parent_staged_ledger ~coinbase_receiver ~logger ~current_state_view + ~supercharge_coinbase ~transactions_by_fee:transactions + ~get_completed_work ~zkapp_cmd_limit |> Result.map_error ~f:Staged_ledger.Pre_diff_info.Error.to_error |> Or_error.ok_exn in @@ -508,7 +509,7 @@ module For_tests = struct ( next_block |> Mina_block.Validated.remember |> Validation.reset_staged_ledger_diff_validation ) ~sender:None ~skip_staged_ledger_verification:`All - ~transition_receipt_time () + ~transition_receipt_time ~signature_kind:Testnet () with | Ok new_breadcrumb -> [%log info] @@ -554,7 +555,7 @@ module For_tests = struct let build_fail ?skip_staged_ledger_verification:_ ~logger:_ ~precomputed_values:_ ~verifier:_ ~trust_system:_ ~parent:_ ~transition:_ - ~sender:_ ~transition_receipt_time:_ () : + ~sender:_ ~transition_receipt_time:_ ~signature_kind:_ () : ( t , [> `Fatal_error of exn | `Invalid_staged_ledger_diff of Core_kernel.Error.t diff --git a/src/lib/transition_frontier/frontier_base/breadcrumb.mli b/src/lib/transition_frontier/frontier_base/breadcrumb.mli index 491b5e629192..5f5ea2e1fd46 100644 --- a/src/lib/transition_frontier/frontier_base/breadcrumb.mli +++ b/src/lib/transition_frontier/frontier_base/breadcrumb.mli @@ -41,6 +41,7 @@ val build : -> Transaction_snark_work.Checked.t option ) -> sender:Envelope.Sender.t option -> transition_receipt_time:Time.t option + -> signature_kind:Mina_signature_kind.t -> unit -> ( t , [> `Invalid_staged_ledger_diff of Error.t @@ -124,6 +125,7 @@ module For_tests : sig -> transition:Mina_block.almost_valid_block -> sender:Envelope.Sender.t option -> transition_receipt_time:Time.t option + -> signature_kind:Mina_signature_kind.t -> unit -> ( t , [> `Invalid_staged_ledger_diff of Error.t diff --git a/src/lib/transition_frontier/full_frontier/full_frontier.ml b/src/lib/transition_frontier/full_frontier/full_frontier.ml index 9b1f2dd62731..40e1a6de0fe3 100644 --- a/src/lib/transition_frontier/full_frontier/full_frontier.ml +++ b/src/lib/transition_frontier/full_frontier/full_frontier.ml @@ -12,6 +12,8 @@ module type CONTEXT = sig val constraint_constants : Genesis_constants.Constraint_constants.t val consensus_constants : Consensus.Constants.t + + val signature_kind : Mina_signature_kind.t end module Node = struct @@ -481,11 +483,11 @@ let move_root ({ context = (module Context); _ } as t) ~new_root_hash Ledger.Maskable.register_mask s (Ledger.Mask.create ~depth:(Ledger.Any_ledger.M.depth s) ()) in - let signature_kind = Mina_signature_kind.t_DEPRECATED in (* STEP 5 *) (*Validate transactions against the protocol state associated with the transaction*) let apply_first_pass = - Ledger.apply_transaction_first_pass ~signature_kind + Ledger.apply_transaction_first_pass + ~signature_kind:Context.signature_kind ~constraint_constants:Context.constraint_constants in let apply_second_pass = Ledger.apply_transaction_second_pass in @@ -495,7 +497,8 @@ let move_root ({ context = (module Context); _ } as t) ~new_root_hash let%map _ledger, partial_txn = Mina_ledger.Sparse_ledger.apply_transaction_first_pass ~constraint_constants:Context.constraint_constants ~txn_state_view - ~global_slot sparse_ledger txn + ~global_slot ~signature_kind:Context.signature_kind sparse_ledger + txn in partial_txn in @@ -510,7 +513,8 @@ let move_root ({ context = (module Context); _ } as t) ~new_root_hash Or_error.ok_exn (Staged_ledger.Scan_state.get_snarked_ledger_sync ~ledger:mt ~get_protocol_state ~apply_first_pass ~apply_second_pass - ~apply_first_pass_sparse_ledger ~signature_kind + ~apply_first_pass_sparse_ledger + ~signature_kind:Context.signature_kind (Staged_ledger.scan_state (Breadcrumb.staged_ledger new_root_node.breadcrumb) ) ) ; (*Check that the new snarked ledger is as expected*) @@ -962,6 +966,8 @@ module For_tests = struct let precomputed_values = precomputed_values let consensus_constants = precomputed_values.consensus_constants + + let signature_kind = Mina_signature_kind.Testnet end let verifier () = diff --git a/src/lib/transition_frontier/full_frontier/full_frontier.mli b/src/lib/transition_frontier/full_frontier/full_frontier.mli index 3d5bd87fa7b9..8b6d042089d5 100644 --- a/src/lib/transition_frontier/full_frontier/full_frontier.mli +++ b/src/lib/transition_frontier/full_frontier/full_frontier.mli @@ -21,6 +21,8 @@ module type CONTEXT = sig val constraint_constants : Genesis_constants.Constraint_constants.t val consensus_constants : Consensus.Constants.t + + val signature_kind : Mina_signature_kind.t end include Frontier_intf.S diff --git a/src/lib/transition_frontier/persistent_frontier/persistent_frontier.ml b/src/lib/transition_frontier/persistent_frontier/persistent_frontier.ml index 39e5969ec2e9..470b36ad0f70 100644 --- a/src/lib/transition_frontier/persistent_frontier/persistent_frontier.ml +++ b/src/lib/transition_frontier/persistent_frontier/persistent_frontier.ml @@ -332,7 +332,7 @@ module Instance = struct ~verifier:t.factory.verifier ~trust_system:(Trust_system.null ()) ~parent ~transition ~get_completed_work:(Fn.const None) ~sender:None - ~transition_receipt_time () + ~transition_receipt_time ~signature_kind () in let%map () = apply_diff Diff.(E (New_node (Full breadcrumb))) in [%log internal] "Breadcrumb_integrated" ; diff --git a/src/lib/transition_handler/breadcrumb_builder.ml b/src/lib/transition_handler/breadcrumb_builder.ml index 7c1b607abba4..7f88a210968a 100644 --- a/src/lib/transition_handler/breadcrumb_builder.ml +++ b/src/lib/transition_handler/breadcrumb_builder.ml @@ -5,7 +5,8 @@ open Cache_lib open Network_peer let build_subtrees_of_breadcrumbs ~logger ~precomputed_values ~verifier - ~trust_system ~frontier ~initial_hash subtrees_of_enveloped_transitions = + ~trust_system ~frontier ~initial_hash ~signature_kind + subtrees_of_enveloped_transitions = let missing_parent_msg = Printf.sprintf "Transition frontier already garbage-collected the parent of %s" @@ -100,7 +101,8 @@ let build_subtrees_of_breadcrumbs ~logger ~precomputed_values ~verifier ~precomputed_values ~verifier ~trust_system ~parent ~transition:mostly_validated_transition ~get_completed_work:(Fn.const None) - ~sender:(Some sender) ~transition_receipt_time () ) + ~sender:(Some sender) ~transition_receipt_time + ~signature_kind () ) with | Error _ -> Deferred.return @@ Or_error.error_string missing_parent_msg diff --git a/src/lib/transition_handler/catchup_scheduler.ml b/src/lib/transition_handler/catchup_scheduler.ml index e8666a519ec9..3c35b1614fd5 100644 --- a/src/lib/transition_handler/catchup_scheduler.ml +++ b/src/lib/transition_handler/catchup_scheduler.ml @@ -64,7 +64,7 @@ type t = } let create ~logger ~precomputed_values ~verifier ~trust_system ~frontier - ~time_controller ~catchup_job_writer + ~time_controller ~catchup_job_writer ~signature_kind ~(catchup_breadcrumbs_writer : ( ( (Transition_frontier.Breadcrumb.t, State_hash.t) Cached.t * Validation_callback.t option ) @@ -102,7 +102,7 @@ let create ~logger ~precomputed_values ~verifier ~trust_system ~frontier [ ("catchup_scheduler", `String "Called from catchup scheduler") ] ) ~precomputed_values ~verifier ~trust_system ~frontier ~initial_hash - transition_branches + ~signature_kind transition_branches with | Ok trees_of_breadcrumbs -> Writer.write catchup_breadcrumbs_writer @@ -413,6 +413,7 @@ let%test_module "Transition_handler.Catchup_scheduler tests" = let scheduler = create ~frontier ~precomputed_values ~verifier ~catchup_job_writer ~catchup_breadcrumbs_writer ~clean_up_signal:(Ivar.create ()) + ~signature_kind:Testnet in watch scheduler ~timeout_duration ~valid_cb:None ~cached_transition: @@ -473,6 +474,7 @@ let%test_module "Transition_handler.Catchup_scheduler tests" = let scheduler = create ~precomputed_values ~frontier ~verifier ~catchup_job_writer ~catchup_breadcrumbs_writer ~clean_up_signal:(Ivar.create ()) + ~signature_kind:Testnet in watch scheduler ~timeout_duration ~valid_cb:None ~cached_transition: @@ -550,6 +552,7 @@ let%test_module "Transition_handler.Catchup_scheduler tests" = let scheduler = create ~precomputed_values ~frontier ~verifier ~catchup_job_writer ~catchup_breadcrumbs_writer ~clean_up_signal:(Ivar.create ()) + ~signature_kind:Testnet in let[@warning "-8"] (oldest_breadcrumb :: dependent_breadcrumbs) = List.rev branch diff --git a/src/lib/transition_handler/processor.ml b/src/lib/transition_handler/processor.ml index ed205eef3f01..9478f6c6adc8 100644 --- a/src/lib/transition_handler/processor.ml +++ b/src/lib/transition_handler/processor.ml @@ -23,6 +23,8 @@ module type CONTEXT = sig val constraint_constants : Genesis_constants.Constraint_constants.t val consensus_constants : Consensus.Constants.t + + val signature_kind : Mina_signature_kind.t end (* TODO: calculate a sensible value from postake consensus arguments *) @@ -250,7 +252,8 @@ let process_transition ~context:(module Context : CONTEXT) ~trust_system ~verifier ~get_completed_work ~trust_system ~transition_receipt_time ~sender:(Some sender) ~parent:parent_breadcrumb ~transition:mostly_validated_transition - ?transaction_pool_proxy (* TODO: Can we skip here? *) () ) + ~signature_kind:Context.signature_kind ?transaction_pool_proxy + (* TODO: Can we skip here? *) () ) ~transform_result:(function | Error (`Invalid_staged_ledger_hash error) | Error (`Invalid_staged_ledger_diff error) -> @@ -320,7 +323,8 @@ let run ~context:(module Context : CONTEXT) ~verifier ~trust_system let open Context in let catchup_scheduler = Catchup_scheduler.create ~logger ~precomputed_values ~verifier ~trust_system - ~frontier ~time_controller ~catchup_job_writer ~catchup_breadcrumbs_writer + ~frontier ~time_controller ~catchup_job_writer + ~signature_kind:Context.signature_kind ~catchup_breadcrumbs_writer ~clean_up_signal:clean_up_catchup_scheduler in let add_and_finalize = @@ -511,6 +515,8 @@ let%test_module "Transition_handler.Processor tests" = let constraint_constants = constraint_constants let consensus_constants = precomputed_values.consensus_constants + + let signature_kind = Mina_signature_kind.Testnet end let downcast_breadcrumb breadcrumb = diff --git a/src/lib/uptime_service/payload.ml b/src/lib/uptime_service/payload.ml index 2d2623725cc5..1ff8e4f0ba99 100644 --- a/src/lib/uptime_service/payload.ml +++ b/src/lib/uptime_service/payload.ml @@ -22,9 +22,9 @@ type request = } [@@deriving to_yojson] -let sign_blake2_hash ~private_key s = +let sign_blake2_hash ~private_key ~signature_kind block_data_string = let module Field = Snark_params.Tick.Field in - let blake2 = Blake2.digest_string s in + let blake2 = Blake2.digest_string block_data_string in let field_elements = [||] in let bitstrings = [| Blake2.to_raw_string blake2 |> Blake2.string_to_bits |> Array.to_list |] @@ -32,15 +32,14 @@ let sign_blake2_hash ~private_key s = let input : (Field.t, bool) Random_oracle.Legacy.Input.t = { field_elements; bitstrings } in - let signature_kind = Mina_signature_kind.t_DEPRECATED in Schnorr.Legacy.sign ~signature_kind private_key input -let create_request block_data submitter_keypair = +let create_request ~signature_kind block_data submitter_keypair = let block_data_json = block_data_to_yojson block_data in let block_data_string = Yojson.Safe.to_string block_data_json in let signature = sign_blake2_hash ~private_key:submitter_keypair.Keypair.private_key - block_data_string + ~signature_kind block_data_string in { version ; data = block_data diff --git a/src/lib/uptime_service/payload.mli b/src/lib/uptime_service/payload.mli index 11df269d8006..dbf88c2b18a3 100644 --- a/src/lib/uptime_service/payload.mli +++ b/src/lib/uptime_service/payload.mli @@ -10,4 +10,8 @@ type block_data = type request [@@deriving to_yojson] -val create_request : block_data -> Signature_lib.Keypair.t -> request +val create_request : + signature_kind:Mina_signature_kind.t + -> block_data + -> Signature_lib.Keypair.t + -> request diff --git a/src/lib/uptime_service/uptime_service.ml b/src/lib/uptime_service/uptime_service.ml index 3f53f185e433..ba07d8ed69f5 100644 --- a/src/lib/uptime_service/uptime_service.ml +++ b/src/lib/uptime_service/uptime_service.ml @@ -23,10 +23,12 @@ module Proof_data = struct end let send_uptime_data ~logger ~interruptor ~(submitter_keypair : Keypair.t) ~url - ~state_hash ~produced block_data = + ~state_hash ~produced ~signature_kind block_data = let open Interruptible.Let_syntax in let make_interruptible f = Interruptible.lift f interruptor in - let request = Payload.create_request block_data submitter_keypair in + let request = + Payload.create_request ~signature_kind block_data submitter_keypair + in let json = Payload.request_to_yojson request in let headers = Cohttp.Header.of_list [ ("Content-Type", "application/json") ] @@ -163,7 +165,7 @@ let block_base64_of_breadcrumb breadcrumb = let send_produced_block_at ~logger ~interruptor ~url ~peer_id ~(submitter_keypair : Keypair.t) ~graphql_control_port ~block_produced_bvar - ~built_with_commit_sha tm = + ~built_with_commit_sha ~signature_kind tm = let open Interruptible.Let_syntax in let make_interruptible f = Interruptible.lift f interruptor in let timeout_min = 3.0 in @@ -193,7 +195,7 @@ let send_produced_block_at ~logger ~interruptor ~url ~peer_id } in send_uptime_data ~logger ~interruptor ~submitter_keypair ~url ~state_hash - ~produced:true block_data + ~produced:true ~signature_kind block_data let read_all_proofs_for_work_single_spec = Snark_work_lib.Work.Single.Spec.map @@ -203,7 +205,7 @@ let read_all_proofs_for_work_single_spec = let send_block_and_transaction_snark ~logger ~constraint_constants ~interruptor ~url ~snark_worker ~transition_frontier ~peer_id ~(submitter_keypair : Keypair.t) ~snark_work_fee ~graphql_control_port - ~built_with_commit_sha = + ~built_with_commit_sha ~signature_kind = match Broadcast_pipe.Reader.peek transition_frontier with | None -> (* expected during daemon boot, so not logging as error *) @@ -239,7 +241,7 @@ let send_block_and_transaction_snark ~logger ~constraint_constants ~interruptor } in send_uptime_data ~logger ~interruptor ~submitter_keypair ~url - ~state_hash ~produced:false block_data ) + ~state_hash ~produced:false ~signature_kind block_data ) else let best_tip_staged_ledger = Transition_frontier.Breadcrumb.staged_ledger best_tip @@ -280,7 +282,7 @@ let send_block_and_transaction_snark ~logger ~constraint_constants ~interruptor } in send_uptime_data ~logger ~interruptor ~submitter_keypair ~url - ~state_hash ~produced:false block_data + ~state_hash ~produced:false ~signature_kind block_data | Ok job_one_or_twos -> ( let transitions = List.concat_map job_one_or_twos ~f:One_or_two.to_list @@ -325,7 +327,7 @@ let send_block_and_transaction_snark ~logger ~constraint_constants ~interruptor } in send_uptime_data ~logger ~interruptor ~submitter_keypair ~url - ~state_hash ~produced:false block_data + ~state_hash ~produced:false ~signature_kind block_data | Some single_spec -> ( match%bind make_interruptible @@ -368,12 +370,14 @@ let send_block_and_transaction_snark ~logger ~constraint_constants ~interruptor } in send_uptime_data ~logger ~interruptor ~submitter_keypair - ~url ~state_hash ~produced:false block_data ) ) ) + ~url ~state_hash ~produced:false ~signature_kind + block_data ) ) ) let start ~logger ~uptime_url ~snark_worker_opt ~constraint_constants ~protocol_constants ~transition_frontier ~time_controller ~block_produced_bvar ~uptime_submitter_keypair ~get_next_producer_timing - ~get_snark_work_fee ~get_peer ~graphql_control_port ~built_with_commit_sha = + ~get_snark_work_fee ~get_peer ~graphql_control_port ~built_with_commit_sha + ~signature_kind = match uptime_url with | None -> [%log info] "Not running uptime service, no URL given" ; @@ -465,7 +469,7 @@ let start ~logger ~uptime_url ~snark_worker_opt ~constraint_constants block" ; send_produced_block_at ~logger ~interruptor ~url ~peer_id ~submitter_keypair ~graphql_control_port - ~built_with_commit_sha ~block_produced_bvar + ~block_produced_bvar ~built_with_commit_sha ~signature_kind next_producer_time in let send_block_and_snark_work () = @@ -475,7 +479,7 @@ let start ~logger ~uptime_url ~snark_worker_opt ~constraint_constants send_block_and_transaction_snark ~logger ~interruptor ~url ~constraint_constants ~snark_worker ~transition_frontier ~peer_id ~submitter_keypair ~snark_work_fee - ~graphql_control_port ~built_with_commit_sha + ~graphql_control_port ~built_with_commit_sha ~signature_kind in match get_next_producer_time_opt () with | None -> diff --git a/src/lib/uptime_service/uptime_snark_worker.ml b/src/lib/uptime_service/uptime_snark_worker.ml index bef48a4af0af..62adf3f363e1 100644 --- a/src/lib/uptime_service/uptime_snark_worker.ml +++ b/src/lib/uptime_service/uptime_snark_worker.ml @@ -13,21 +13,22 @@ module Worker_state = struct end (* bin_io required by rpc_parallel *) - type init_arg = Logger.t * Genesis_constants.Constraint_constants.t + type init_arg = + Logger.t + * Genesis_constants.Constraint_constants.t + * Mina_signature_kind.Stable.Latest.t [@@deriving bin_io_unversioned] type t = (module S) - let create ~constraint_constants () : t Deferred.t = - let signature_kind = Mina_signature_kind.t_DEPRECATED in + let create ~constraint_constants ~signature_kind () : t Deferred.t = Deferred.return (let module M = struct let perform_single (message, single_spec) = let%bind (worker_state : Prod.Worker_state.t) = - Prod.Worker_state.create ~constraint_constants ~proof_level:Full - ~signature_kind () + Prod.Worker_state.create ~constraint_constants ~proof_level:Full () in - Prod.perform_single worker_state ~message single_spec + Prod.perform_single worker_state ~message single_spec ~signature_kind end in (module M : S) ) @@ -80,9 +81,9 @@ module Worker = struct , perform_single ) } - let init_worker_state (logger, constraint_constants) = + let init_worker_state (logger, constraint_constants, signature_kind) = [%log info] "Uptime SNARK worker started" ; - Worker_state.create ~constraint_constants () + Worker_state.create ~constraint_constants ~signature_kind () let init_connection_state ~connection:_ ~worker_state:_ () = Deferred.unit end @@ -94,7 +95,7 @@ end type t = { connection : Worker.Connection.t; process : Process.t; logger : Logger.t } -let create ~logger ~constraint_constants ~pids : t Deferred.t = +let create ~logger ~constraint_constants ~signature_kind ~pids : t Deferred.t = let on_failure err = [%log error] "Uptime service SNARK worker process failed with error $err" ~metadata:[ ("err", Error_json.error_to_yojson err) ] ; @@ -104,7 +105,7 @@ let create ~logger ~constraint_constants ~pids : t Deferred.t = let%map connection, process = Worker.spawn_in_foreground_exn ~connection_timeout:(Time.Span.of_min 1.) ~on_failure ~shutdown_on:Connection_closed ~connection_state_init_arg:() - (logger, constraint_constants) + (logger, constraint_constants, signature_kind) in [%log info] "Daemon started process of kind $process_kind with pid \ diff --git a/src/lib/user_command_input/user_command_input.ml b/src/lib/user_command_input/user_command_input.ml index 5586e6322ce0..34f7a58e75ef 100644 --- a/src/lib/user_command_input/user_command_input.ml +++ b/src/lib/user_command_input/user_command_input.ml @@ -145,7 +145,7 @@ let sign ~signer ~(user_command_payload : Signed_command_payload.t) Deferred.Result.return (Signed_command.sign ~signature_kind signer_kp user_command_payload) | Hd_index hd_index -> - Secrets.Hardware_wallets.sign ~hd_index + Secrets.Hardware_wallets.sign ~signature_kind ~hd_index ~public_key:(Public_key.decompress_exn signer) ~user_command_payload diff --git a/src/lib/verifier/prod.ml b/src/lib/verifier/prod.ml index 2e18df9798d1..8f6eb46e3c98 100644 --- a/src/lib/verifier/prod.ml +++ b/src/lib/verifier/prod.ml @@ -72,7 +72,7 @@ module Worker_state = struct ; commit_id : string ; blockchain_verification_key : Pickles.Verification_key.Stable.Latest.t ; transaction_verification_key : Pickles.Verification_key.Stable.Latest.t - ; signature_kind : Mina_signature_kind.t + ; signature_kind : Mina_signature_kind.Stable.Latest.t } [@@deriving bin_io_unversioned] diff --git a/src/test/archive/archive_node_tests/live_upgrade_archive.ml b/src/test/archive/archive_node_tests/live_upgrade_archive.ml index 2ddb0d47616f..be25560c9d0e 100644 --- a/src/test/archive/archive_node_tests/live_upgrade_archive.ml +++ b/src/test/archive/archive_node_tests/live_upgrade_archive.ml @@ -6,7 +6,7 @@ open Common (* NOTE: To run this test, several preparation is needed - - ensure we have this test, replayer & archive node build with devnet profile + - ensure we have this test, replayer & archive node build with public_network profile - ensure we have a data base instance up - Run the following: ``` diff --git a/src/test/archive/archive_node_tests/upgrade_archive.ml b/src/test/archive/archive_node_tests/upgrade_archive.ml index d6b53fe0061f..f42e6d5f0561 100644 --- a/src/test/archive/archive_node_tests/upgrade_archive.ml +++ b/src/test/archive/archive_node_tests/upgrade_archive.ml @@ -6,7 +6,7 @@ open Common (* NOTE: To run this test, several preparation is needed - - ensure we have this test, replayer & archive node build with devnet profile + - ensure we have this test, replayer & archive node build with public_network profile - ensure we have a data base instance up - Run the following: ```