gcx/blockchain/init-genesis.sh

149 lines
6.6 KiB
Bash

#!/bin/bash
set -e
CHAIN_ID="genex-testnet-1"
DENOM="agnx"
HOME_DIR="/home/genex/.genexd"
KEYRING="test"
GENESIS="$HOME_DIR/config/genesis.json"
echo "[1/6] Initializing chain..."
genexd init "genex-us-east-1" --chain-id "$CHAIN_ID" --home "$HOME_DIR"
echo "[2/6] Patching genesis for Genex denom (agnx)..."
# Replace default denoms with agnx
cat "$GENESIS" | jq '
# EVM module: set denom to agnx
.app_state.evm.params.evm_denom = "agnx" |
.app_state.evm.params.extended_denom_options.extended_denom = "agnx" |
# Staking: bond denom
.app_state.staking.params.bond_denom = "agnx" |
# Mint: mint denom
.app_state.mint.params.mint_denom = "agnx" |
# Gov: min deposit denom
.app_state.gov.params.min_deposit[0].denom = "agnx" |
.app_state.gov.params.expedited_min_deposit[0].denom = "agnx" |
# Bank: add denom metadata for agnx (18 decimals for EVM compat)
.app_state.bank.denom_metadata = [{
"description": "The native staking and gas token of Genex Chain",
"denom_units": [
{"denom": "agnx", "exponent": 0, "aliases": ["attoGNX"]},
{"denom": "GNX", "exponent": 18, "aliases": []}
],
"base": "agnx",
"display": "GNX",
"name": "Genex Token",
"symbol": "GNX"
}] |
# FeeMarket: use zero gas for dev
.app_state.feemarket.params.min_gas_price = "0.000000000000000000" |
.app_state.feemarket.params.base_fee = "1000000000.000000000000000000"
' > "${GENESIS}.tmp" && mv "${GENESIS}.tmp" "$GENESIS"
echo "[3/6] Creating validator key..."
genexd keys add validator --keyring-backend "$KEYRING" --home "$HOME_DIR" 2>&1
echo "[4/6] Adding genesis account..."
ADDR=$(genexd keys show validator -a --keyring-backend "$KEYRING" --home "$HOME_DIR")
genexd genesis add-genesis-account "$ADDR" "500000000000000000000000000${DENOM}" --home "$HOME_DIR" --keyring-backend "$KEYRING"
echo "[5/6] Creating genesis transaction..."
genexd genesis gentx validator "250000000000000000000000000${DENOM}" \
--chain-id "$CHAIN_ID" \
--moniker "genex-us-east-1" \
--commission-rate "0.10" \
--commission-max-rate "0.20" \
--commission-max-change-rate "0.01" \
--min-self-delegation "1" \
--keyring-backend "$KEYRING" \
--home "$HOME_DIR"
echo "[6/6] Collecting genesis transactions and validating..."
genexd genesis collect-gentxs --home "$HOME_DIR"
# ============================================================
# Configure node — 性能优化配置
# ============================================================
CONFIG_TOML="$HOME_DIR/config/config.toml"
APP_TOML="$HOME_DIR/config/app.toml"
# --- app.toml 配置 ---
sed -i "s/minimum-gas-prices = \"\"/minimum-gas-prices = \"0${DENOM}\"/" "$APP_TOML"
# Enable API
sed -i "/\[api\]/,/\[/ s/enable = false/enable = true/" "$APP_TOML"
# Enable JSON-RPC
sed -i "/\[json-rpc\]/,/\[/ s/enable = false/enable = true/" "$APP_TOML"
sed -i "s/address = \"127.0.0.1:8545\"/address = \"0.0.0.0:8545\"/" "$APP_TOML"
sed -i "s/ws-address = \"127.0.0.1:8546\"/ws-address = \"0.0.0.0:8546\"/" "$APP_TOML"
# Set EVM chain ID
sed -i "s/evm-chain-id = 262144/evm-chain-id = 8888/" "$APP_TOML" 2>/dev/null || true
# IAVL 缓存优化: 增大缓存提升状态读取速度 (默认 781250)
# 16 核 126GB 内存服务器,提升到 2,000,000 节点缓存
sed -i "s/iavl-cache-size = 781250/iavl-cache-size = 2000000/" "$APP_TOML"
# 启用 inter-block-cache: 跨区块状态缓存,减少重复读取
# (默认已启用,确保未被关闭)
# --- config.toml 配置 ---
# CORS 和 RPC 监听
sed -i "s/cors_allowed_origins = \[\]/cors_allowed_origins = [\"*\"]/" "$CONFIG_TOML"
sed -i "s/laddr = \"tcp:\/\/127.0.0.1:26657\"/laddr = \"tcp:\/\/0.0.0.0:26657\"/" "$CONFIG_TOML"
# ============================================================
# 共识参数优化 — 出块速度提升
# ============================================================
# timeout_propose: 提议超时 3s → 1.5s (单节点无网络延迟)
sed -i 's/timeout_propose = "3s"/timeout_propose = "1500ms"/' "$CONFIG_TOML"
sed -i 's/timeout_propose_delta = "500ms"/timeout_propose_delta = "200ms"/' "$CONFIG_TOML"
# timeout_prevote/precommit: 投票超时 (单节点无需等待其他验证者)
sed -i 's/timeout_prevote = "1s"/timeout_prevote = "500ms"/' "$CONFIG_TOML"
sed -i 's/timeout_prevote_delta = "500ms"/timeout_prevote_delta = "200ms"/' "$CONFIG_TOML"
sed -i 's/timeout_precommit = "1s"/timeout_precommit = "500ms"/' "$CONFIG_TOML"
sed -i 's/timeout_precommit_delta = "500ms"/timeout_precommit_delta = "200ms"/' "$CONFIG_TOML"
# timeout_commit: 出块间隔 5s → 1s
# 代码默认已设为 1s (root.go initCometConfig),此处确保 config.toml 一致
sed -i 's/timeout_commit = "5s"/timeout_commit = "1s"/' "$CONFIG_TOML"
# skip_timeout_commit: 单节点模式下启用,收到自己的投票后立即提交
# 实际出块时间可降到 500ms-800ms
sed -i 's/skip_timeout_commit = false/skip_timeout_commit = true/' "$CONFIG_TOML"
# ============================================================
# 空块控制 — 防止磁盘快速耗尽
# ============================================================
# create_empty_blocks = false: 没有待处理交易时不出空块
# 有交易提交时立即触发出块,延迟不受影响
# 避免 ~23块/秒 的空块堆积 (按44ms/块计算 ≈ 2-3 GB/天)
sed -i 's/create_empty_blocks = true/create_empty_blocks = false/' "$CONFIG_TOML"
# ============================================================
# Mempool 优化 — 提升交易吞吐
# ============================================================
# 增大 mempool 容量: 5000 → 10000 笔待处理交易
sed -i 's/^size = 5000/size = 10000/' "$CONFIG_TOML"
# 缓存大小: 10000 → 20000 (已见交易 hash 缓存,减少重复校验)
sed -i 's/cache_size = 10000/cache_size = 20000/' "$CONFIG_TOML"
echo ""
echo "============================================================"
echo "Genesis initialization complete!"
echo "============================================================"
echo "Chain ID: $CHAIN_ID"
echo "Validator: $ADDR"
echo "EVM Chain ID: 8888"
echo "Denom: $DENOM (GNX, 18 decimals)"
echo ""
echo "Performance optimizations applied:"
echo " - Optimistic Execution: enabled (code-level, SDK v0.53)"
echo " - timeout_commit: 1s (+ skip_timeout_commit=true → ~500-800ms actual)"
echo " - timeout_propose: 1.5s (reduced from 3s)"
echo " - Consensus timeouts: prevote/precommit 500ms (reduced from 1s)"
echo " - IAVL cache: 2,000,000 nodes (up from 781,250)"
echo " - Mempool size: 10,000 txs (up from 5,000)"
echo " - Mempool cache: 20,000 (up from 10,000)"
echo " - Empty blocks: DISABLED (only produce blocks when txs pending)"
echo "============================================================"