From cc0a325da6138a88ef352650dc552414a1293a07 Mon Sep 17 00:00:00 2001 From: Nabarun Date: Wed, 14 May 2025 20:19:40 +0530 Subject: [PATCH] Add playbook to generate mainnet genesis from exported testnet state --- ...ator-vars.yml => first-validator-vars.yml} | 0 .../first-validator/generate-genesis.yml | 40 +++++++++++++++++++ .../first-validator/run-first-validator.yml | 2 +- run-first-validator.md | 29 +++++--------- scripts/generate-mainnet-genesis.sh | 13 +++--- 5 files changed, 58 insertions(+), 26 deletions(-) rename playbooks/first-validator/{run-first-validator-vars.yml => first-validator-vars.yml} (100%) create mode 100644 playbooks/first-validator/generate-genesis.yml diff --git a/playbooks/first-validator/run-first-validator-vars.yml b/playbooks/first-validator/first-validator-vars.yml similarity index 100% rename from playbooks/first-validator/run-first-validator-vars.yml rename to playbooks/first-validator/first-validator-vars.yml diff --git a/playbooks/first-validator/generate-genesis.yml b/playbooks/first-validator/generate-genesis.yml new file mode 100644 index 0000000..e639ecd --- /dev/null +++ b/playbooks/first-validator/generate-genesis.yml @@ -0,0 +1,40 @@ +--- +- name: Generate Mainnet Genesis File + hosts: localhost + vars_files: + - first-validator-vars.yml + connection: local + tasks: + - name: Fetch repositories + ansible.builtin.shell: + cmd: "laconic-so --stack ~/cerc/laconicd-stack/stack-orchestrator/stacks/mainnet-laconicd setup-repositories --git-ssh --pull" + + - name: Build containers + ansible.builtin.shell: + cmd: "laconic-so --stack ~/cerc/laconicd-stack/stack-orchestrator/stacks/mainnet-laconicd build-containers" + + - name: Copy exported testnet state file + ansible.builtin.copy: + src: "{{ exported_state_path }}" + dest: "~/cerc/laconicd-stack/testnet-state.json" + remote_src: true # Set to true if exported_state_path is on the target host + + - block: + - name: Run script to generate genesis file + ansible.builtin.shell: + cmd: "CHAIN_ID={{ cerc_chain_id }} EARLY_SUPPORTS_ACC_ADDRESS={{ early_supports_acc_address }} ~/cerc/laconicd-stack/scripts/generate-mainnet-genesis.sh ~/cerc/laconicd-stack/testnet-state.json" + always: + - name: Clean up temporary genesis directory + become: true + ansible.builtin.file: + path: "{{ ansible_env.HOME }}/cerc/laconicd-stack/playbooks/first-validator/mainnet-genesis" + state: absent + + - name: Remove temporary copied state file + ansible.builtin.file: + path: "~/cerc/laconicd-stack/testnet-state.json" + state: absent + + - name: Display genesis file location + ansible.builtin.debug: + msg: "Mainnet genesis file generated at output/genesis.json" diff --git a/playbooks/first-validator/run-first-validator.yml b/playbooks/first-validator/run-first-validator.yml index 8b90468..5317547 100644 --- a/playbooks/first-validator/run-first-validator.yml +++ b/playbooks/first-validator/run-first-validator.yml @@ -2,7 +2,7 @@ - name: Run mainnet validator node hosts: localhost vars_files: - - run-first-validator-vars.yml + - first-validator-vars.yml vars: data_directory: "{{ lookup('env', 'DATA_DIRECTORY') }}" mainnet_deployment_dir: "{{ lookup('env', 'MAINNET_DEPLOYMENT_DIR') }}" diff --git a/run-first-validator.md b/run-first-validator.md index 53f7b43..143539b 100644 --- a/run-first-validator.md +++ b/run-first-validator.md @@ -22,34 +22,25 @@ - The file will be generated in `/export/testnet-state.json` - - - If mainnet node will be setup in new machine, fetch the stack again -- Build container image - ```bash - # Fetch laconicd repo specified in stack - laconic-so --stack ~/cerc/laconicd-stack/stack-orchestrator/stacks/mainnet-laconicd setup-repositories --git-ssh --pull - - # Build image - laconic-so --stack ~/cerc/laconicd-stack/stack-orchestrator/stacks/mainnet-laconicd build-containers + laconic-so fetch-stack git.vdb.to/cerc-io/laconicd-stack --git-ssh --pull ``` -- Copy the generated exported state from earlier +- Copy over the exported `testnet-state.json` file to target machine + +- Set envs + ``` + export EXPORTED_STATE_PATH= + export EARLY_SUPPORTS_ACC_ADDR= + +- Run playbook to use exported state for generating mainnet genesis ```bash - cp ~/cerc/laconicd-stack/testnet-state.json + ansible-playbook -i localhost, -c local ~/cerc/laconicd-stack/playbooks/first-validator/generate-genesis.yml -e "exported_state_path=$EXPORTED_STATE_PATH" -e "early_supports_acc_address=$EARLY_SUPPORTS_ACC_ADDR" --ask-become-pass ``` -- Run script to generate genesis file using the exported state - - ```bash - ~/cerc/laconicd-stack/scripts/generate-mainnet-genesis.sh ~/cerc/laconicd-stack/testnet-state.json - ``` - - - Genesis file will generated in `output/genesis.json` - ## Run node - Update [run-first-validator-vars.yml](playbooks/first-validator/run-first-validator-vars.yml) with required values: diff --git a/scripts/generate-mainnet-genesis.sh b/scripts/generate-mainnet-genesis.sh index 9071c49..a85ecf2 100755 --- a/scripts/generate-mainnet-genesis.sh +++ b/scripts/generate-mainnet-genesis.sh @@ -23,10 +23,12 @@ cp $TESTNET_STATE_FILE $MAINNET_GENESIS_DIR/testnet-state.json # -------- +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + echo "Initializing a new empty chain with chain-id $CHAIN_ID..." -docker run -it \ +docker run \ -v ./$MAINNET_GENESIS_DIR:/root/.laconicd \ - -v ./scripts:/scripts \ + -v $script_dir:/scripts \ -e "CHAIN_ID=$CHAIN_ID" \ cerc/laconicd:local bash -c "/scripts/init-mainnet.sh" @@ -34,17 +36,16 @@ docker run -it \ # Carry over state from testnet to mainnet echo "Carrying over state from testnet state to mainnet genesis..." -script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -python $script_dir/transfer-state.py +python3 $script_dir/transfer-state.py # -------- # Run a script with cerc/laconicd:local to generate the genesis file # with onboarding module state and given allocations echo "Performing alps allocations..." -docker run -it \ +docker run \ -v ./$MAINNET_GENESIS_DIR:/root/.laconicd \ - -v ./scripts:/scripts \ + -v $script_dir:/scripts \ -e "CHAIN_ID=$CHAIN_ID" \ -e "EARLY_SUPPORTS_ACC_ADDRESS=$EARLY_SUPPORTS_ACC_ADDRESS" \ cerc/laconicd:local bash -c "/scripts/genesis.sh"