3.3 KiB
Hanzo sovereign-L1 — provisioning
Deploy target: DOKS hanzo-k8s, via platform.hanzo.ai / the hanzo operator
(GitOps). Namespaces hanzo-{mainnet,testnet,devnet}. Exposure: LoadBalancer →
rpc.hanzo.network / explorer.hanzo.network.
This chart deploys Hanzo's own sovereign primary network — networkID == EVM chainID (mainnet 36963 / testnet 36962 / devnet 36964). Hanzo does not run on
the Lux C-Chain (96369); that is Lux-network only. The C-Chain genesis embedded in
genesis/<env>.json activates the 0x0300 AI-mining precompile at genesis
(aiMiningConfig: {blockTimestamp: 0}) — this is what makes desktop AI-mining
verifyAndMintWork claims settle on-chain.
What's in the chart (committed, safe)
Chart.yaml,values.yaml+values-<env>.yaml— networkID=chainID, custom-networkupgradeConfig(REQUIRED — 36963/62/64 have no built-in upgrade schedule), branding.genesis/<env>.json— platform genesis: networkID + the Hanzo C-Chain genesis (chainId +aiMiningConfig) embedded ascChainGenesis.templates/— reused from the lux chart (parameterized by.Values).
What the operator MUST provision (from KMS — NEVER commit keys)
- Validator staking keys → create the
hanzo-stakingSecret (pervalues.yaml staking.secretName) from KMS-generated keys, then populate, ingenesis/<env>.json:initialStakers[]— each{nodeID, rewardAddress, delegationFee, signer:{publicKey, proofOfPossession}}(PUBLIC keys only).initialStakedFunds[]— the staked P-chain addresses. And setbootstrap.nodeIDs(invalues-<env>.yaml) to the same NodeIDs.
- Treasury / allocations →
allocations[]ingenesis/<env>.json(P-chainluxAddr- C-chain
ethAddrfunded addresses; KMS treasury). The C-Chain genesis already pre-funds the dev treasury0x9011E888251AB053B7bD1cdB598Db4f9DEd94714.
- C-chain
- Derived C-Chain blockchain ID (computed at
CreateChainTxtime, only known after the network is created) →networks.<env>.cChainIDinvalues.yaml.templates/statefulset.yamlplugin-copy lines still carry the lux C-Chain blockchain ID (mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6). Replace with Hanzo's derived C-Chain plugin/blockchain ID, or parameterize via a new.Values.cChainPluginIDbefore the second deploy.
Bring-up order
- Operator generates validator keys (KMS) →
hanzo-stakingSecret + fills genesisinitialStakers/allocations+bootstrap.nodeIDs. helm upgrade --install hanzo ./charts/hanzo -f values-mainnet.yaml -n hanzo-mainnet(via platform.hanzo.ai GitOps, nothelmby hand).- After first genesis, capture the C-Chain blockchain ID → set
cChainID+ the statefulset plugin ID → redeploy. - Point
rpc.hanzo.network/explorer.hanzo.networkLoadBalancers; verifyeth_chainId==0x9063(36963), validators healthy,0x0300responds.
Why not a one-command deploy here
Validator BLS keys and the derived blockchain ID are network-creation outputs that live in KMS / are computed by the node at genesis — they are intentionally not in git. The desktop side (chainId 36963, the Rust claim signer, the C-Chain genesis) is already committed; this chart + the operator's KMS provisioning complete the loop.