--- tags: game-of-chains --- Working genesis: https://paste.c-net.org/ChoosesPinata Getting tokens for the provider chain: https://provider-faucet.goc.earthball.xyz/ Submitting a proposal: https://github.com/hyphacoop/ics-testnets/blob/main/docs/Consumer-Chain-Start-Process.md#consumer-chain-start-process Block explorers: https://testnet.ping.pub/provider/gov https://testnet.mintscan.io/goc-provider/proposals # Duality sync ## Requirements for consumer chain launch - Binary - Build instructions - Release/tag/commit - Genesis file - denom - chain id - funded accounts - relayer: Hypha's Game of Chains account is `cosmos1rhvj25tutkld9p43y6w8pdfhcfzk270dc76tmn` From Sputnik: ``` "accounts": [ { "@type": "/cosmos.auth.v1beta1.BaseAccount", "address": "cosmos1kxrs67wldxeg8w2wwmxr4xkdg5vve5c866dnnh", "pub_key": null, "account_number": "0", "sequence": "0" } ] ``` ``` "balances": [ { "address": "cosmos1rhvj25tutkld9p43y6w8pdfhcfzk270dc76tmn", "coins": [ { "denom": "uprov", "amount": "1000000000000" } ] }, ``` - signed_blocks_window: maybe set to 8640 or something higher than 100 - admin module? will need address(es) ``` "app_state": { "adminmodule": { "admins": [ "cosmos10rrplkj8s8z8gvu950aq3qlvrrltxr09r2z5um" ] }, "auth": { "accounts": [ { ``` - Proposal - Link to a repo/site for genesis and code review (something like this: https://github.com/hyphacoop/ics-testnets/tree/main/game-of-chains-2022/neutron) - https://github.com/hyphacoop/ics-testnets/blob/main/docs/Consumer-Chain-Start-Process.md - https://github.com/hyphacoop/ics-testnets/tree/main/docs/proposals - Binary hash - Genesis file hash (without CCV state) - Spawn time - Initial height: content will change depending on the chain id For chain id `neutron`: ``` "initial_height": { "revision_height": 1 }, ``` For chain id `hero-1`: ``` "initial_height": { "revision_height": 1, "revision_number": 1 }, ``` - Coordination with other validators - Discord - Relayer info Multisig creation: ## Description This guide demonstrates how to create a multisig account using three public keys. ## Preparation * The public key for all the multisig parties must be available. ## Procedure 1. Add the keys for each multisig party to the keyring. ``` gaiad keys add alpha-multisig --pubkey '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AknThsOo1Bhlye962pSlfgQymtZ/fBCX5zTXYes2aGEY"}' - name: alpha-multisig type: offline address: cosmos15vglqlazd97ch6qtlqavmas8wh4wwpktvh7s3h pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AknThsOo1Bhlye962pSlfgQymtZ/fBCX5zTXYes2aGEY"}' mnemonic: "" ``` ``` gaiad keys add beta-multisig --pubkey '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A+9WsdM/Wv/8XIjnpwSP/fUbZZPnfH3TDg2j+cYl8are"}' - name: beta-multisig type: offline address: cosmos1mn8l6wy6wz3ujkrpz5rhvedfgpyscqcwgh39a3 pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A+9WsdM/Wv/8XIjnpwSP/fUbZZPnfH3TDg2j+cYl8are"}' mnemonic: "" ``` ``` gaiad keys add gamma-multisig --pubkey '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Avl1KpZeR9VNVmKqMnoGC+0pI4DrLxd2cwFB6tmLGoG5"}' - name: gamma-multisig type: offline address: cosmos126dex6axfu84plee22fll4llm08v5ygmaxpf67 pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Avl1KpZeR9VNVmKqMnoGC+0pI4DrLxd2cwFB6tmLGoG5"}' mnemonic: "" ``` 2. Create mulsitig account. The following command sets the threshold to 2, so only two keys are required to sign a transaction. ``` gaiad keys add multisig-abc --multisig alpha-multisig,beta-multisig,gamma-multisig --multisig-threshold 2 - name: multisig-abc type: multi address: cosmos1229h3e0hnp78gvs7jcnspjpc5pghmsyv89226g pubkey: '{"@type":"/cosmos.crypto.multisig.LegacyAminoPubKey","threshold":2,"public_keys":[{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Avl1KpZeR9VNVmKqMnoGC+0pI4DrLxd2cwFB6tmLGoG5"},{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AknThsOo1Bhlye962pSlfgQymtZ/fBCX5zTXYes2aGEY"},{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A+9WsdM/Wv/8XIjnpwSP/fUbZZPnfH3TDg2j+cYl8are"}]}' mnemonic: "" ``` Transaction with multisig: ## Description This guide demonstrates how to sign and broadcast a `bank send` transaction via a multisig account of three keys that has a threshold of two. ## Preparation * A multisig account with appropriate funds must be available. In this example, the multisig account has address `cosmos1229h3e0hnp78gvs7jcnspjpc5pghmsyv89226g`. * The private keys of enough accounts to meet the multisig threshold must be available for signing the transaction. In this example, `multisig-a` and `multisig-b` will sign the transaction. * A synced node must be available. In this example, the remote node is `sentry-01.theta-testnet.polypore.xyz`. * The recipient for the send transaction in this example is `cosmos1j7qzunvzx4cdqya80wvnrsmzyt9069d3gwhu5p`. ## Procedure 1. Generate JSON file for unsigned transaction: `multisig-tx.json`. ``` gaiad tx bank send cosmos1229h3e0hnp78gvs7jcnspjpc5pghmsyv89226g cosmos1j7qzunvzx4cdqya80wvnrsmzyt9069d3gwhu5p 1000uatom --generate-only --chain-id theta-testnet-001 > multisig-tx.json ``` 2. Sign transaction with `multisig-a`. ``` gaiad tx sign multisig-tx.json --multisig=cosmos1229h3e0hnp78gvs7jcnspjpc5pghmsyv89226g --from multisig-a --output-document=signed-tx-a.json --chain-id theta-testnet-001 --node http://sentry-01.theta-testnet.polypore.xyz:26657 ``` 3. Sign transaction with `multisig-b`. ``` gaiad tx sign multisig-tx.json --multisig=cosmos1229h3e0hnp78gvs7jcnspjpc5pghmsyv89226g --from multisig-b --output-document=signed-tx-b.json --chain-id theta-testnet-001 --node http://sentry-01.theta-testnet.polypore.xyz:26657 ``` 4. Multisign transaction: `signed-tx.json`. ``` gaiad tx multisign multisig-tx.json multisig-abc signed-tx-a.json signed-tx-b.json --node http://sentry-01.theta-testnet.polypore.xyz:26657 --chain-id theta-testnet-001 &> signed-tx.json ``` 5. Broadcast transaction. ``` gaiad tx broadcast signed-tx.json --chain-id theta-testnet-001 --node http://sentry-01.theta-testnet.polypore.xyz:26657 --gas auto --fees 250uatom ```