Files
sonr/scripts/create-genesis.sh

115 lines
3.9 KiB
Bash
Raw Permalink Normal View History

2025-10-03 14:45:52 -04:00
#!/bin/bash
2025-10-12 11:23:20 -04:00
# scripts/create-genesis.sh - Create genesis file for Sonr network
2025-10-03 14:45:52 -04:00
2025-10-12 11:23:20 -04:00
set -euo pipefail
2025-10-03 14:45:52 -04:00
2025-10-12 11:23:20 -04:00
# Source helper libraries
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/lib/env.sh"
source "${SCRIPT_DIR}/lib/keys.sh"
source "${SCRIPT_DIR}/lib/genesis.sh"
2025-10-03 14:45:52 -04:00
2025-10-12 11:23:20 -04:00
# Initialize environment
init_env
2025-10-03 14:45:52 -04:00
2025-10-12 11:23:20 -04:00
# Set defaults for genesis creation
2025-10-03 14:45:52 -04:00
FAUCET_ENABLED="${FAUCET_ENABLED:=true}"
NUM_VALIDATORS="${NUM_VALIDATORS:=1}"
NUM_RELAYERS="${NUM_RELAYERS:=0}"
2025-10-12 11:23:20 -04:00
# Match init-testnet.sh allocation: 100000000000000000000000000snr = 100000000000000000000000000000000usnr
BASE_COINS="${BASE_COINS:=100000000000000000000000000000000${DENOM},100000000000000000000000000snr}"
VALIDATOR_AMOUNT="1000000000000000000000000000${DENOM}"
# Check if binary has genesis subcommand
CHAIN_GENESIS_CMD=""
if $CHAIN_BIN 2>&1 | grep -q "genesis-related subcommands"; then
CHAIN_GENESIS_CMD="genesis"
2025-10-03 14:45:52 -04:00
fi
2025-10-12 11:23:20 -04:00
log_info "Creating genesis for Sonr network: $CHAIN_ID"
# Initialize chain
local genesis_mnemonic
genesis_mnemonic=$(jq -r ".genesis[0].mnemonic" "$KEYS_CONFIG")
echo "$genesis_mnemonic" | $CHAIN_BIN init "$CHAIN_ID" --chain-id "$CHAIN_ID" --default-denom "$DENOM" --recover
# Add genesis accounts
log_info "Adding genesis accounts..."
# Genesis key
local genesis_key_name
genesis_key_name=$(jq -r ".genesis[0].name" "$KEYS_CONFIG")
import_mnemonic "$genesis_key_name" "$genesis_mnemonic"
fund_key "$genesis_key_name" "$BASE_COINS"
# Faucet key
local faucet_key_name
faucet_key_name=$(jq -r ".faucet[0].name" "$KEYS_CONFIG")
local faucet_mnemonic
faucet_mnemonic=$(jq -r ".faucet[0].mnemonic" "$KEYS_CONFIG")
import_mnemonic "$faucet_key_name" "$faucet_mnemonic"
fund_key "$faucet_key_name" "$BASE_COINS"
# Test key
local test_key_name
test_key_name=$(jq -r ".keys[0].name" "$KEYS_CONFIG")
local test_mnemonic
test_mnemonic=$(jq -r ".keys[0].mnemonic" "$KEYS_CONFIG")
import_mnemonic "$test_key_name" "$test_mnemonic"
fund_key "$test_key_name" "$BASE_COINS"
# Add relayer keys if faucet is disabled
if [[ "$FAUCET_ENABLED" == "false" && "$NUM_RELAYERS" -gt 0 ]]; then
for i in $(seq 0 "$NUM_RELAYERS"); do
local relayer_key_name
relayer_key_name=$(jq -r ".relayers[$i].name" "$KEYS_CONFIG")
local relayer_mnemonic
relayer_mnemonic=$(jq -r ".relayers[$i].mnemonic" "$KEYS_CONFIG")
import_mnemonic "$relayer_key_name" "$relayer_mnemonic"
fund_key "$relayer_key_name" "$BASE_COINS"
local relayer_cli_key_name
relayer_cli_key_name=$(jq -r ".relayers_cli[$i].name" "$KEYS_CONFIG")
local relayer_cli_mnemonic
relayer_cli_mnemonic=$(jq -r ".relayers_cli[$i].mnemonic" "$KEYS_CONFIG")
import_mnemonic "$relayer_cli_key_name" "$relayer_cli_mnemonic"
fund_key "$relayer_cli_key_name" "$BASE_COINS"
done
2025-10-03 14:45:52 -04:00
fi
2025-10-12 11:23:20 -04:00
# Add additional validator keys if needed
if [[ "$FAUCET_ENABLED" == "false" && "$NUM_VALIDATORS" -gt 1 ]]; then
for i in $(seq 1 "$NUM_VALIDATORS"); do
local val_key_name="${genesis_key_name}-${i}"
local val_mnemonic
val_mnemonic=$(jq -r ".validators[0].mnemonic" "$KEYS_CONFIG")
import_mnemonic "$val_key_name" "$val_mnemonic"
fund_key "$val_key_name" "$BASE_COINS"
done
fi
2025-10-03 14:45:52 -04:00
2025-10-12 11:23:20 -04:00
# Create genesis transaction
log_info "Creating genesis transaction..."
$CHAIN_BIN "$CHAIN_GENESIS_CMD" gentx "$genesis_key_name" "$VALIDATOR_AMOUNT" \
--keyring-backend "$KEYRING_BACKEND" \
--chain-id "$CHAIN_ID" \
--gas-prices "0${DENOM}"
2025-10-03 14:45:52 -04:00
2025-10-12 11:23:20 -04:00
log_info "Genesis transaction output:"
cat "$CHAIN_DIR/config/gentx"/*.json | jq
2025-10-03 14:45:52 -04:00
2025-10-12 11:23:20 -04:00
# Collect genesis transactions
log_info "Collecting genesis transactions..."
$CHAIN_BIN "$CHAIN_GENESIS_CMD" collect-gentxs
2025-10-03 14:45:52 -04:00
# Generate VRF keypair
2025-10-12 11:23:20 -04:00
log_info "Generating VRF keypair..."
if ! generate_vrf_key "$CHAIN_DIR"; then
log_warn "VRF key generation failed, but continuing..."
log_warn "Note: Multi-validator encryption features may not work without VRF keys"
2025-10-03 14:45:52 -04:00
fi
2025-10-12 11:23:20 -04:00
log_success "Genesis creation completed"