Add playbook to generate mainnet genesis from exported testnet state

This commit is contained in:
Nabarun 2025-05-14 20:19:40 +05:30
parent be5258c732
commit cc0a325da6
5 changed files with 58 additions and 26 deletions

View File

@ -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"

View File

@ -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') }}"

View File

@ -22,34 +22,25 @@
- The file will be generated in `<path-to-testnet-deployment>/export/testnet-state.json`
<!-- TODO: Create playbook to run steps below -->
- 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=<absolute-path-to-exported-testnet-state-json>
export EARLY_SUPPORTS_ACC_ADDR=<account-address-controlled-by-laconic-foundation>
- Run playbook to use exported state for generating mainnet genesis
```bash
cp <path-to-exported-testnet-state> ~/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:

View File

@ -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"