From e276515e6e9b6bb108042eec79533add16bb879e Mon Sep 17 00:00:00 2001 From: Skylar Simoncelli Date: Fri, 20 Sep 2024 13:08:34 +0300 Subject: [PATCH] feat: chain-specs --- .envrc | 2 +- .../artifacts/earthly-build-and-push.yml | 1 - .../artifacts/generate-chain-specs.yml | 15 +++--- .../modules/deploy/upload-chain-specs.yml | 10 ---- Earthfile | 24 ++++++---- docker/chain-spec/README.md | 3 +- {devnet => envs/devnet}/.envrc | 6 +-- {devnet => envs/devnet}/addresses.json | 0 {staging => envs/staging-preprod}/.envrc | 6 +-- .../staging-preprod}/addresses.json | 0 envs/staging-preview/.envrc | 44 +++++++++++++++++ envs/staging-preview/addresses.json | 47 +++++++++++++++++++ 12 files changed, 120 insertions(+), 38 deletions(-) rename {devnet => envs/devnet}/.envrc (94%) rename {devnet => envs/devnet}/addresses.json (100%) rename {staging => envs/staging-preprod}/.envrc (93%) rename {staging => envs/staging-preprod}/addresses.json (100%) create mode 100644 envs/staging-preview/.envrc create mode 100644 envs/staging-preview/addresses.json diff --git a/.envrc b/.envrc index 6606bfc1..b52eebfa 100755 --- a/.envrc +++ b/.envrc @@ -9,7 +9,7 @@ export CARDANO_CONFIG_DIR="$(pwd)/docker/config" export KUPO_WORKDIR="$RUN_DIR/kupo-db" mkdir -p $KUPO_WORKDIR -source devnet/.envrc +source envs/devnet/.envrc if [[ -f "$PWD/.envrc.local" ]]; then echo using local envrc diff --git a/.github/workflows/modules/artifacts/earthly-build-and-push.yml b/.github/workflows/modules/artifacts/earthly-build-and-push.yml index c9741277..9a9cb9d6 100644 --- a/.github/workflows/modules/artifacts/earthly-build-and-push.yml +++ b/.github/workflows/modules/artifacts/earthly-build-and-push.yml @@ -167,6 +167,5 @@ jobs: name: chain-specs path: | ./devnet_chain_spec.json - ./staging_chain_spec.json ./staging_preview_chain_spec.json ./staging_preprod_chain_spec.json diff --git a/.github/workflows/modules/artifacts/generate-chain-specs.yml b/.github/workflows/modules/artifacts/generate-chain-specs.yml index d4cce74f..19ee8e4d 100644 --- a/.github/workflows/modules/artifacts/generate-chain-specs.yml +++ b/.github/workflows/modules/artifacts/generate-chain-specs.yml @@ -24,22 +24,19 @@ jobs: - name: Generate Chain Specs run: | chmod +x ./partner-chains-node - source ./devnet/.envrc + source ./envs/devnet/.envrc ./partner-chains-node build-spec --chain local --disable-default-bootnode --raw > devnet_chain_spec.json - source ./staging/.envrc - ./partner-chains-node build-spec --chain staging --disable-default-bootnode --raw > staging_chain_spec.json - source ./staging-preview/.envrc - ./partner-chains-node build-spec --chain staging-preview --disable-default-bootnode --raw > staging_preview_chain_spec.json - source ./staging-preprod/.envrc - ./partner-chains-node build-spec --chain staging-preprod --disable-default-bootnode --raw > staging_preprod_chain_spec.json + source ./envs/staging-preview/.envrc + ./partner-chains-node build-spec --chain staging --disable-default-bootnode --raw > staging_preview_chain_spec.json + source ./envs/staging-preprod/.envrc + ./partner-chains-node build-spec --chain staging --disable-default-bootnode --raw > staging_preprod_chain_spec.json - - name: Upload Chain Specs for both chains + - name: Upload Chain Specs uses: actions/upload-artifact@v4 with: name: chain-specs path: | devnet_chain_spec.json - staging_chain_spec.json staging_preview_chain_spec.json staging_preprod_chain_spec.json diff --git a/.github/workflows/modules/deploy/upload-chain-specs.yml b/.github/workflows/modules/deploy/upload-chain-specs.yml index 16a3b14b..53cdad96 100644 --- a/.github/workflows/modules/deploy/upload-chain-specs.yml +++ b/.github/workflows/modules/deploy/upload-chain-specs.yml @@ -48,16 +48,6 @@ jobs: kubectl create secret generic "$SECRET_NAME" \ --from-file=devnet_chain_spec.json=./artifacts/devnet_chain_spec.json \ --namespace=sc - - - name: Update Kubernetes secret for staging chain spec - run: | - SHA=${{ inputs.sha }} - SECRET_NAME="staging-chain-spec-${SHA}" - - kubectl delete secret "$SECRET_NAME" --namespace=staging --ignore-not-found - kubectl create secret generic "$SECRET_NAME" \ - --from-file=staging_chain_spec.json=./artifacts/staging_chain_spec.json \ - --namespace=staging - name: Update Kubernetes secret for staging-preview chain spec run: | diff --git a/Earthfile b/Earthfile index 5b41247d..09ea486d 100644 --- a/Earthfile +++ b/Earthfile @@ -142,14 +142,20 @@ INSTALL: chainspecs: FROM +setup DO +INSTALL - COPY devnet/.envrc devnet/.envrc - COPY devnet/addresses.json devnet/addresses.json - COPY staging/.envrc staging/.envrc - COPY staging/addresses.json staging/addresses.json - # `.` (dot) is equivalent of `source` in /bin/sh - RUN . ./devnet/.envrc \ + COPY envs/devnet/.envrc envs/devnet/.envrc + COPY envs/devnet/addresses.json envs/devnet/addresses.json + COPY envs/staging-preview/.envrc envs/staging-preview/.envrc + COPY envs/staging-preview/addresses.json envs/staging-preview/addresses.json + COPY envs/staging-preprod/.envrc envs/staging-preprod/.envrc + COPY envs/staging-preprod/addresses.json envs/staging-preprod/addresses.json + # `.` (dot) is equivalent to `source` in /bin/sh + RUN . ./envs/devnet/.envrc \ && partner-chains-node build-spec --chain local --disable-default-bootnode --raw > devnet_chain_spec.json - RUN. ./staging/.envrc \ - && partner-chains-node build-spec --chain staging --disable-default-bootnode --raw > staging_chain_spec.json + RUN . ./envs/staging-preview/.envrc \ + && partner-chains-node build-spec --chain staging-preview --disable-default-bootnode --raw > staging_preview_chain_spec.json + RUN . ./envs/staging-preprod/.envrc \ + && partner-chains-node build-spec --chain staging-preprod --disable-default-bootnode --raw > staging_preprod_chain_spec.json SAVE ARTIFACT devnet_chain_spec.json AS LOCAL devnet_chain_spec.json - SAVE ARTIFACT staging_chain_spec.json AS LOCAL staging_chain_spec.json + SAVE ARTIFACT staging_preview_chain_spec.json AS LOCAL staging_preview_chain_spec.json + SAVE ARTIFACT staging_preprod_chain_spec.json AS LOCAL staging_preprod_chain_spec.json + diff --git a/docker/chain-spec/README.md b/docker/chain-spec/README.md index a21534cf..a6076267 100644 --- a/docker/chain-spec/README.md +++ b/docker/chain-spec/README.md @@ -71,8 +71,7 @@ Cache cargo home for faster builds. -e CARGO_HOME=/cargo-home \ ``` -Set an env variable to specify which chain to use. Currently, we only have "local" (devnet) and -"staging". These IDs are used in `build-spec` command and pattern matched in `command.rs`, `SubstrateCli impl` `load_spec` function. +Set an env variable to specify which chain to use. Currently, we only have "local" (devnet) and "staging". These IDs are used in `build-spec` command and pattern matched in `command.rs`, `SubstrateCli impl` `load_spec` function. Omit, if `--chain` option should not be used for the build-spec command. ``` -e CHAIN=staging \ diff --git a/devnet/.envrc b/envs/devnet/.envrc similarity index 94% rename from devnet/.envrc rename to envs/devnet/.envrc index 3a3e60fb..8e489298 100644 --- a/devnet/.envrc +++ b/envs/devnet/.envrc @@ -11,9 +11,9 @@ export SIDECHAIN_BLOCK_BENEFICIARY="0x000000000000000000000000000000000000000000 # below exports parse config/addresses.json file, which needs to regenerated for each new sidechain by running # sidechain-main-cli addresses ... > config/addresses.json -export COMMITTEE_CANDIDATE_ADDRESS=$(jq -r '.addresses.CommitteeCandidateValidator' devnet/addresses.json) -export D_PARAMETER_POLICY_ID=$(jq -r '.mintingPolicies.DParameterPolicy' devnet/addresses.json) -export PERMISSIONED_CANDIDATES_POLICY_ID=$(jq -r '.mintingPolicies.PermissionedCandidatesPolicy' devnet/addresses.json) +export COMMITTEE_CANDIDATE_ADDRESS=$(jq -r '.addresses.CommitteeCandidateValidator' envs/devnet/addresses.json) +export D_PARAMETER_POLICY_ID=$(jq -r '.mintingPolicies.DParameterPolicy' envs/devnet/addresses.json) +export PERMISSIONED_CANDIDATES_POLICY_ID=$(jq -r '.mintingPolicies.PermissionedCandidatesPolicy' envs/devnet/addresses.json) # native token observability export NATIVE_TOKEN_POLICY_ID='ada83ddd029614381f00e28de0922ab0dec6983ea9dd29ae20eef9b4' diff --git a/devnet/addresses.json b/envs/devnet/addresses.json similarity index 100% rename from devnet/addresses.json rename to envs/devnet/addresses.json diff --git a/staging/.envrc b/envs/staging-preprod/.envrc similarity index 93% rename from staging/.envrc rename to envs/staging-preprod/.envrc index e177c0b0..4844530e 100644 --- a/staging/.envrc +++ b/envs/staging-preprod/.envrc @@ -11,9 +11,9 @@ export SIDECHAIN_BLOCK_BENEFICIARY="0x000000000000000000000000000000000000000000 # below exports parse config/addresses.json file, which needs to regenerated for each new sidechain by running # sidechain-main-cli addresses ... > config/addresses.json -export COMMITTEE_CANDIDATE_ADDRESS=$(jq -r '.addresses.CommitteeCandidateValidator' staging/addresses.json) -export D_PARAMETER_POLICY_ID=$(jq -r '.mintingPolicies.DParameterPolicy' staging/addresses.json) -export PERMISSIONED_CANDIDATES_POLICY_ID=$(jq -r '.mintingPolicies.PermissionedCandidatesPolicy' staging/addresses.json) +export COMMITTEE_CANDIDATE_ADDRESS=$(jq -r '.addresses.CommitteeCandidateValidator' envs/staging-preprod/addresses.json) +export D_PARAMETER_POLICY_ID=$(jq -r '.mintingPolicies.DParameterPolicy' envs/staging-preprod/addresses.json) +export PERMISSIONED_CANDIDATES_POLICY_ID=$(jq -r '.mintingPolicies.PermissionedCandidatesPolicy' envs/staging-preprod/addresses.json) # native token observability export NATIVE_TOKEN_POLICY_ID='ada83ddd029614381f00e28de0922ab0dec6983ea9dd29ae20eef9b4' diff --git a/staging/addresses.json b/envs/staging-preprod/addresses.json similarity index 100% rename from staging/addresses.json rename to envs/staging-preprod/addresses.json diff --git a/envs/staging-preview/.envrc b/envs/staging-preview/.envrc new file mode 100644 index 00000000..e73a3975 --- /dev/null +++ b/envs/staging-preview/.envrc @@ -0,0 +1,44 @@ +export CHAIN_ID=1 +export THRESHOLD_NUMERATOR=2 +export THRESHOLD_DENOMINATOR=3 +export GENESIS_COMMITTEE_UTXO="4e65eddc6132c1b9891d43f9d67a4a0a7b6e614b648f59dc97538f3f23eb96bf#1" +# cardano-cli address key-hash --payment-verification-key-file +export GOVERNANCE_AUTHORITY=1f0977bc0f57c67ca6d77296c1b575fe05a6dc2c5fa38056ba63c50c + +# unique identifier of the beneficiary that will be credited +# producer rewards for blocks produced by this node +export SIDECHAIN_BLOCK_BENEFICIARY="0x0000000000000000000000000000000000000000000000000000000000000201" + +# below exports parse config/addresses.json file, which needs to regenerated for each new sidechain by running +# sidechain-main-cli addresses ... > config/addresses.json +export COMMITTEE_CANDIDATE_ADDRESS=$(jq -r '.addresses.CommitteeCandidateValidator' envs/staging-preview/addresses.json) +export D_PARAMETER_POLICY_ID=$(jq -r '.mintingPolicies.DParameterPolicy' envs/staging-preview/addresses.json) +export PERMISSIONED_CANDIDATES_POLICY_ID=$(jq -r '.mintingPolicies.PermissionedCandidatesPolicy' envs/staging-preview/addresses.json) + +# native token observability +export NATIVE_TOKEN_POLICY_ID='ada83ddd029614381f00e28de0922ab0dec6983ea9dd29ae20eef9b4' +export NATIVE_TOKEN_ASSET_NAME='5043546f6b656e44656d6f' +export ILLIQUID_SUPPLY_VALIDATOR_ADDRESS='addr_test1wrhvtvx3f0g9wv9rx8kfqc60jva3e07nqujk2cspekv4mqs9rjdvz' + +# Preview parameters +export CARDANO_SECURITY_PARAMETER=432 +export CARDANO_ACTIVE_SLOTS_COEFF=0.05 +export DB_SYNC_POSTGRES_CONNECTION_STRING="postgres://postgres:password123@localhost/cexplorer" + +# A minimum block distance from the most recent MC stable block. +# Used by block producers to select the stable block to include in the block header. +export BLOCK_STABILITY_MARGIN=0 + +# Timestamp for the MC_FIRST_EPOCH_NUMBER +# Genesis should not have a timestamp before this one, this should be divisible by both sidechain slot and epoch durations +export MC__FIRST_EPOCH_TIMESTAMP_MILLIS=1666656000000 +# First Shelley epoch number on Cardano +export MC__FIRST_EPOCH_NUMBER=0 +# Should be divisible by Sidechain epoch duration (which is SlotDuration * SlotsPerEpoch and those params can be found in runtime/src/lib.rs) +export MC__EPOCH_DURATION_MILLIS=86400000 +# First Shelley slot number on Cardano +export MC__FIRST_SLOT_NUMBER=0 + +# When true, node will use the mock implementation of main chain follower. Overrides USE_INTERNAL_MAIN_CHAIN_FOLLOWER if true. +export USE_MAIN_CHAIN_FOLLOWER_MOCK=false +export MAIN_CHAIN_FOLLOWER_MOCK_REGISTRATIONS_FILE=res/bb-mock/default-registrations.json diff --git a/envs/staging-preview/addresses.json b/envs/staging-preview/addresses.json new file mode 100644 index 00000000..50f86294 --- /dev/null +++ b/envs/staging-preview/addresses.json @@ -0,0 +1,47 @@ +{ + "endpoint": "GetAddrs", + "addresses": { + "CommitteeCandidateValidator": "addr_test1wqczxu6fnkg22mswwf36dgav02d7fqut2qmxqxe9waf3hzqet7k08", + "DsConfValidator": "addr_test1wrs3x229t9wvzshcrq2sadngnh2p8aaxnzl538ptm6kfy7s722s0h", + "DsInsertValidator": "addr_test1wpcck855nef0era6mkk7eqfjtajm0nwz8wjmlwtq5zsy7fsqht257", + "VersionOracleValidator": "addr_test1wpfw535nn36x896pjtl3fc7t3axphpvgzmwvvf5ydlgw2cqfr4gts", + "PermissionedCandidatesValidator": "addr_test1wzhqyt2qsq3p43y2qkp6w47at38k4059hj0n8rysfhm2dyc5grwmv", + "DParameterValidator": "addr_test1wpt60cg7n4hp2u6djszjm744fprh8fhm4w5rqsrr4ax4tgshxjylr", + "CommitteeHashValidator": "addr_test1wztj2gjtnmt8p5593q4w2tcd0548r6u3s2uc7sjkrq8qp8shre8s9", + "CheckpointValidator": "addr_test1wr973hn59t44nvn6dsn5uge6lh9955uplpgw8s2pu6p70hcuhvhmt", + "MerkleRootTokenValidator": "addr_test1wrt7mljzzmtjpttu0ffzqp20xf2ctalffreywe755fwg6nc8kl20c", + "ReserveValidator": "addr_test1wpgffwhq7470l5wvyt4p7lxrnktwdsqzmprul7hjtnrs4sqh4flz3", + "IlliquidCirculationSupplyValidator": "addr_test1wqn2pkvvmesmxtfa4tz7w8gh8vumr52lpkrhcs4dkg30uqq77h5z4" + }, + "validatorHashes": { + "CommitteeCandidateValidator": "302373499d90a56e0e7263a6a3ac7a9be4838b5036601b2577531b88", + "DsConfValidator": "e1132945595cc142f818150eb6689dd413f7a698bf489c2bdeac927a", + "DsInsertValidator": "718b1e949e52fc8fbaddadec81325f65b7cdc23ba5bfb960a0a04f26", + "VersionOracleValidator": "52ea46939c7463974192ff14e3cb8f4c1b858816dcc626846fd0e560", + "PermissionedCandidatesValidator": "ae022d4080221ac48a0583a757dd5c4f6abe85bc9f338c904df6a693", + "DParameterValidator": "57a7e11e9d6e15734d94052dfab5484773a6fbaba8304063af4d55a2", + "CommitteeHashValidator": "9725224b9ed670d285882ae52f0d7d2a71eb9182b98f4256180e009e", + "CheckpointValidator": "cbe8de742aeb59b27a6c274e233afdca5a5381f850e3c141e683e7df", + "MerkleRootTokenValidator": "d7edfe4216d720ad7c7a5220054f325585f7e948f24767d4a25c8d4f", + "ReserveValidator": "5094bae0f57cffd1cc22ea1f7cc39d96e6c002d847cffaf25cc70ac0", + "IlliquidCirculationSupplyValidator": "26a0d98cde61b32d3daac5e71d173b39b1d15f0d877c42adb222fe00" + }, + "mintingPolicies": { + "DsConfPolicy": "cb9876d9ec40cc69adb42eba509244d5142048ebbc7326bad3124efa", + "CheckpointPolicy": "5a1d5ee6f5bd2a3856fbe44b59586babdf10b9ee1396473ee895f18f", + "FUELProxyPolicy": "51c738b499f9214329e9ec655d49cb5bb3bb19c0842998cb31d1224f", + "VersionOraclePolicy": "03031996a95b3fd511c5bae760bb185606e73af756421fe1fe83a2d8", + "PermissionedCandidatesPolicy": "e44f6251de81f6e572d8bb324dd955962a96b10da09e7abe5a7995ce", + "DParameterPolicy": "aca33dbecba1698ceb122a5a213fa7fb3d12fc7efd932117943d9f58", + "InitTokenPolicy": "0b2f719ae2b706c468808af38d62c4eda0d948ec3d04d0f916659019", + "CommitteeCertificateVerificationPolicy": "1c29334562bfc2bde51af1b02a1cc9bc8c5e944c4070b283ab420504", + "CommitteeOraclePolicy": "c62fb4be7a7e8a33aab734acc4c8eec7c594a570f721617170a377e0", + "FUELMintingPolicy": "d113a51cc9d9c02a06cf8985cd0570d3082e32f0f905851bfea8b711", + "FUELBurningPolicy": "0d6e224f7d25c9ed97143112b198bd8a60a76811a489b2160e57ae97", + "DsKeyPolicy": "5b7f2ef0de5553d125fadf364f8809098b9586197f703aab1410cc5f", + "MerkleRootTokenPolicy": "eb9e5f48ab84ef79c57620cb0ad8fc11a4c8f0a16679a4e5fce03ce7", + "ReserveAuthPolicy": "64eb1d817d6ca2b2a77dbf95e32a8da9abdb53b18de7d4e1c801345c", + "GovernancePolicy": "1ace0495e5f8f15703af7627904aa0842bbe8429c348b6606b4e0d0d", + "CommitteePlainEcdsaSecp256k1ATMSPolicy": "1c29334562bfc2bde51af1b02a1cc9bc8c5e944c4070b283ab420504" + } +} \ No newline at end of file