---
# System prepended metadata

title: Duality sync
tags: [game-of-chains]

---

---
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
```
