# Interchain Security Sandbox Setup
We will set up the following testnet in a single machine:
- 4 provider validator nodes on chain "earth"
- 4 consumer validator nodes on chain "moon"
- 1 relayer
- Both chains will have denom "stake"
- Validators:
- alpha
- alpha-provider.stg.earthball.xyz
- beta
- beta-provider.stg.earthball.xyz
- gamma
- gamma-provider.stg.earthball.xyz
- delta
- delta-provider.stg.earthball.xyz
## 1. Set up a provider chain
Set up a 4-validator provider chain.
Set up gov_testing and voting time to 1 minute.
Set up a single validator with a minimal amount of staked tokens, and airdrop tokens to a non-validator "playmaker" account that will do a lot of the delegating. In this case, the playmaker address comes from the public-facing mnemonics.
Single-validator play:
```yaml=
---
# yamllint disable rule:line-length
all:
vars:
ansible_user: root
node_user: provider-alpha
chain_home: "{{node_user_home}}/.isp"
chain_binary_name: interchain-security-pd
chain_version: tags/v0.1.4
chain_repository: https://github.com/cosmos/interchain-security.git
chain_denom: stake
chain_id: earth
chain_home_clear: true
node_service_name: "provider-alpha"
chain_create_validator: true
chain_validator_coins: "10000000"
chain_gentx_validator: "1000000"
cosmovisor_service_name: "cv-provider-alpha"
chain_gov_testing: true
chain_voting_period: 60s
chain_airdrop: true
chain_airdrop_accounts:
- cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl
reboot: false
pruning: nothing
p2p_allow_duplicate_ip: true
children:
node:
hosts:
"{{ target }}":
fast_sync: false
api_enabled: true
api_port: 26650
rpc_port: 26651
p2p_port: 26652
grpc_port: 26653
rpc_pprof_port: 26654
grpc_web_enabled: false
```
Verify that the airdrop account has funds:
```
interchain-security-pd q bank balances cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl --node http://localhost:26651
```
## 2. Join the chain with three more nodes.
Copy genesis file from first node, and collect the node ID as well as p2p port (26652 from the play above). The node id can be obtained from the genesis file by looking for "memo", or running `interchain-security-pd tendermint show-node-id` on the alpha node.
Run the "join playbook" using different ports for each node:
```yaml=
---
# yamllint disable rule:line-length
all:
vars:
ansible_user: root
chain_binary_name: interchain-security-pd
chain_version: tags/v0.1.4
chain_repository: https://github.com/cosmos/interchain-security.git
genesis_file: 'provider-genesis.json'
p2p_persistent_peers: '47652c26df2489e9e3c0c63ede8a5b7c86e05690@138.197.134.60:26652'
chain_denom: stake
chain_id: earth
chain_home_clear: true
reboot: false
pruning: nothing
p2p_allow_duplicate_ip: true
api_enabled: true
grpc_web_enabled: false
children:
node:
hosts:
beta-provider.stg.earthball.xyz:
node_user: provider-beta
chain_home: "{{node_user_home}}/.isp"
node_service_name: "provider-beta"
cosmovisor_service_name: "cv-provider-beta"
api_port: 26660
rpc_port: 26661
p2p_port: 26662
grpc_port: 26663
rpc_pprof_port: 26664
gamma-provider.stg.earthball.xyz:
node_user: provider-gamma
chain_home: "{{node_user_home}}/.isp"
node_service_name: "provider-gamma"
cosmovisor_service_name: "cv-provider-gamma"
api_port: 26670
rpc_port: 26671
p2p_port: 26672
grpc_port: 26673
rpc_pprof_port: 26674
delta-provider.stg.earthball.xyz:
node_user: provider-delta
chain_home: "{{node_user_home}}/.isp"
node_service_name: "provider-delta"
cosmovisor_service_name: "cv-provider-delta"
api_port: 26680
rpc_port: 26681
p2p_port: 26682
grpc_port: 26683
rpc_pprof_port: 26684
```
## 3. Create a new validator in each node.
beta
Create self-delegation account
```
interchain-security-pd keys add beta-validator --home ~/.isp --keyring-backend test
- name: beta-validator
type: local
address: cosmos1sc82038qv9st0tenrqnavft78gyryt0r0vsvqs
pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AzG47vQp5mzpNTtE9GFnmwwZHIWn25BLOWjO5lL0vzA5"}'
mnemonic: ""
**Important** write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.
cycle story emotion consider combine emotion walk shield early sand post useless blouse busy cry proof test neglect hundred atom fun already chicken diesel
```
gamma
Create self-delegation account
```
interchain-security-pd keys add gamma-validator --home ~/.isp --keyring-backend test
- name: gamma-validator
type: local
address: cosmos1lxnr0nvq30ulvleg3ww9rtedt6rk3dde9tw8wq
pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AjX788vp+VTYZpQ99QfKN8RLPBF8pa3taTodAFo2uwKL"}'
mnemonic: ""
**Important** write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.
card mammal leave cause clarify unknown liar sick fade cabbage upgrade limit type endorse ahead identify clutch sentence flush rough reason virtual poverty dress
```
delta
Create self-delegation account
```
interchain-security-pd keys add delta-validator --home ~/.isp --keyring-backend test
- name: delta-validator
type: local
address: cosmos167xwcvk408tmcv5tmwjau9vd7h64d2lnfxmzwe
pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AioclXNo7vnvEG8wZPm8K3cAjc0EkrCHqm81Y9GZI/tU"}'
mnemonic: ""
**Important** write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.
lend south shell chest staff great brisk wool tube metal bracket wrap uphold couple script child also spider primary capital dizzy spin dismiss seek
```
Fund all validator accounts from playmaker account.
beta
```
interchain-security-pd tx bank send cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl cosmos1sc82038qv9st0tenrqnavft78gyryt0r0vsvqs 10000000stake --home ~/.isp
```
gamma
```
interchain-security-pd tx bank send cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl cosmos1lxnr0nvq30ulvleg3ww9rtedt6rk3dde9tw8wq 10000000stake --home ~/.isp
```
delta
```
interchain-security-pd tx bank send cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl cosmos167xwcvk408tmcv5tmwjau9vd7h64d2lnfxmzwe 10000000stake --home ~/.isp
```
Get validator pubkey with and create validator:
beta
```
pubkey=$(interchain-security-pd tendermint show-validator --home ~/.isp)
interchain-security-pd tx staking create-validator --moniker "beta" --amount 1000000stake --from beta-validator --pubkey $pubkey --keyring-backend test --home ~/.isp --commission-max-change-rate 0.01 --commission-max-rate 0.2 --commission-rate 0.1 --min-self-delegation 1 -b block
```
gamma
```
pubkey=$(interchain-security-pd tendermint show-validator --home ~/.isp)
interchain-security-pd tx staking create-validator --moniker "gamma" --amount 1000000stake --from gamma-validator --pubkey $pubkey --keyring-backend test --home ~/.isp --commission-max-change-rate 0.01 --commission-max-rate 0.2 --commission-rate 0.1 --min-self-delegation 1 -b block
```
delta
```
pubkey=$(interchain-security-pd tendermint show-validator --home ~/.isp)
interchain-security-pd tx staking create-validator --moniker "delta" --amount 1000000stake --from delta-validator --pubkey $pubkey --keyring-backend test --home ~/.isp --commission-max-change-rate 0.01 --commission-max-rate 0.2 --commission-rate 0.1 --min-self-delegation 1 -b block
```
Change moniker of alpha validator to `alpha`
```
interchain-security-pd tx staking edit-validator --from validator --moniker alpha --home ~/.isp
```
We can now check the validator set here: http://alpha-provider.stg.earthball.xyz:26660/cosmos/staking/v1beta1/validators
Verify playmaker can delegate tokens.
Delegate 1000000stake more to alpha:
```
interchain-security-pd tx staking delegate cosmosvaloper15adr54hscrzuqa4c7zxhf7nlf5x65py68hac87 1000000stake --from playmaker --home ~/.isp
```
Delegate 1000000stake more to beta:
```
interchain-security-pd tx staking delegate cosmosvaloper1sc82038qv9st0tenrqnavft78gyryt0r2cyevr 1000000stake --from playmaker --home ~/.isp
```
Delegate 1000000stake more to gamma:
```
interchain-security-pd tx staking delegate cosmosvaloper1lxnr0nvq30ulvleg3ww9rtedt6rk3ddeql6jzn 1000000stake --from playmaker --home ~/.isp
```
Delegate 1000000stake more to delta:
```
interchain-security-pd tx staking delegate cosmosvaloper167xwcvk408tmcv5tmwjau9vd7h64d2lnvj0hz2 1000000stake --from playmaker --home ~/.isp
```
Check delegations from playmaker account:
```
interchain-security-pd q staking delegations cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl --home ~/.isp
```
Test redelegating 1000000stake from alpha to beta
```
interchain-security-pd tx staking redelegate cosmosvaloper15adr54hscrzuqa4c7zxhf7nlf5x65py68hac87 cosmosvaloper1sc82038qv9st0tenrqnavft78gyryt0r2cyevr 1000000stake --from playmaker --home ~/.isp
{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgBeginRedelegate","delegator_address":"cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl","validator_src_address":"cosmosvaloper15adr54hscrzuqa4c7zxhf7nlf5x65py68hac87","validator_dst_address":"cosmosvaloper1sc82038qv9st0tenrqnavft78gyryt0r2cyevr","amount":{"denom":"stake","amount":"1000000"}}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":[]}
confirm transaction before signing and broadcasting [y/N]: y
code: 0
codespace: ""
data: ""
events: []
gas_used: "0"
gas_wanted: "0"
height: "0"
info: ""
logs: []
raw_log: '[]'
timestamp: ""
tx: null
txhash: B98F1BB3971C0153826B73A80C37DC42111A151FCB103272A3F245F681603BFC
```
Check the transaction:
```
interchain-security-pd q tx --type=hash B98F1BB3971C0153826B73A80C37DC42111A151FCB103272A3F245F681603BFC --home ~/.isp
...
(metadata, events, etc.)
...
raw_log: 'out of gas in location: WriteFlat; gasWanted: 200000, gasUsed: 201607: out
of gas'
timestamp: "2022-10-21T19:04:28Z
```
Try re-delegating from alpha to beta again, this time with `--gas=auto`
```
interchain-security-pd tx staking redelegate cosmosvaloper15adr54hscrzuqa4c7zxhf7nlf5x65py68hac87 cosmosvaloper1sc82038qv9st0tenrqnavft78gyryt0r2cyevr 1000000stake --from playmaker --home ~/.isp --gas auto
```
Check delegations from playmaker account:
```
interchain-security-pd q staking delegations cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl --home ~/.isp
```
That works. Try re-delegating from beta to alpha now
```
interchain-security-pd tx staking redelegate cosmosvaloper1sc82038qv9st0tenrqnavft78gyryt0r2cyevr cosmosvaloper15adr54hscrzuqa4c7zxhf7nlf5x65py68hac87 1000000stake --from playmaker --home ~/.isp --gas auto
```
Check delegations from playmaker account:
```
interchain-security-pd q staking delegations cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl --home ~/.isp
```
Try re-delegating from alpha to gamma and back:
```
interchain-security-pd tx staking redelegate cosmosvaloper15adr54hscrzuqa4c7zxhf7nlf5x65py68hac87 cosmosvaloper1lxnr0nvq30ulvleg3ww9rtedt6rk3ddeql6jzn 500000stake --from playmaker --home ~/.isp --gas auto
interchain-security-pd tx staking redelegate cosmosvaloper1lxnr0nvq30ulvleg3ww9rtedt6rk3ddeql6jzn cosmosvaloper15adr54hscrzuqa4c7zxhf7nlf5x65py68hac87 500000stake --from playmaker --home ~/.isp --gas auto
```
## 4. Initialize the consumer chain with a validator account.
Set up a node with the consumer chain binary using the keys from the alpha validator.
The node role must be modified slightly in order for the mnemonic to be registered and cosmovisor to not start.
Run this play:
```yaml=
---
# yamllint disable rule:line-length
all:
vars:
ansible_user: root
node_user: consumer-alpha
chain_home: "{{node_user_home}}/.isc"
chain_binary_name: interchain-security-cd
chain_version: tags/v0.1.4
chain_repository: https://github.com/cosmos/interchain-security.git
chain_denom: stake
chain_id: moon2
chain_home_clear: true
node_service_name: "consumer-alpha"
chain_restore_account: true
chain_restored_coins: "1000000000000000"
cosmovisor_service_name: "cv-consumer-alpha"
reboot: false
pruning: nothing
p2p_allow_duplicate_ip: true
chain_defer_start: true
priv_validator_key_file: 'alpha-validator-key.json'
node_key_file: 'alpha-node-key.json'
children:
node:
hosts:
"{{ target }}":
fast_sync: false
api_enabled: true
api_port: 26655
rpc_port: 26656
p2p_port: 26657
grpc_port: 26658
rpc_pprof_port: 26659
grpc_web_enabled: false
```
Run the play with the mnemonic as an extra variable:
```
ansible-playbook node.yml -i examples/ics-init-consumer-chain.yml -e 'target=alpha-provider.stg.earthball.xyz restored_account_mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art"'
```
Save the genesis file to the local machine.
## 5. Increase the signed blocks window to 10000 blocks
Change the parameter under the slashing section called `"signed_blocks_window"` to `10000`.
## 6. Propose and pass the new consumer chain.
We will start a consumer chain that uses the `interchain-security-cd` binary.
Populate `consumer-proposal.json` with the relevant values:
```json
{
"title": "Create a new consumer chain",
"description": "Consumer chain ",
"chain_id": "moon2",
"initial_height": {
"revision_height": 1
},
"genesis_hash": "748e648ac57d9849ba0c03f83286453edd9885faa249340e301ad811d731526a",
"binary_hash": "5ae76b4206c0bb8f87208c6ab2b68545fde4cf2c27d53041e24218cab4b3e925",
"spawn_time": "2022-10-01T10:10:00.000000Z",
"deposit": "1stake"
}
```
Submit gov proposal from provider chain:
```bash
interchain-security-pd tx gov submit-proposal create-consumer-chain consumer-proposal.json --from validator --home ~/.isp --keyring-backend test
```
Vote on gov proposal on provider chain:
```bash
interchain-security-pd tx gov vote 2 yes --from validator --home ~/.isp --keyring-backend test -y
```
Check that the proposal passed
```
interchain-security-pd q gov proposal 2 --home ~/.isp
```
## 4. Update the genesis file
Collect CCV states in the provider chain
```bash
interchain-security-pd q provider consumer-genesis moon2 --output json --home ~/.isp > moon2_ccv_states.json
```
Copy json file to local machine
Update fresh consumer genesis file with CCV states
```bash
jq -s '.[0].app_state.ccvconsumer = .[1] | .[0]' fresh-consumer-genesis.json moon_ccv_states.json > consumer_genesis.json
```
## 5. Start the consumer chain
Collect the node id for the validator to use it in the p2p_persistent_peers variable.
Start the cosmovisor service in the first node.
Join the consumer chain with an updated inventory file that uses:
- modified genesis file
- p2p_persistent_peers
- priv_validator_key_file for each validator (copied from the provider /config folder)
- node_key_file (copied from the provider /config folder)
```yaml=
---
# yamllint disable rule:line-length
all:
vars:
ansible_user: root
chain_binary_name: interchain-security-cd
chain_version: tags/v0.1.4
chain_repository: https://github.com/cosmos/interchain-security.git
genesis_file: 'consumer_genesis.json'
p2p_persistent_peers: '47652c26df2489e9e3c0c63ede8a5b7c86e05690@138.197.134.60:26657'
chain_denom: stake
chain_id: moon2
chain_home_clear: true
reboot: false
pruning: nothing
p2p_allow_duplicate_ip: true
api_enabled: true
grpc_web_enabled: false
children:
node:
hosts:
alpha-provider.stg.earthball.xyz:
node_user: consumer-alpha
chain_home: "{{node_user_home}}/.isc"
node_service_name: "consumer-alpha"
cosmovisor_service_name: "cv-consumer-alpha"
api_port: 26655
rpc_port: 26656
p2p_port: 26657
grpc_port: 26658
rpc_pprof_port: 26659
priv_validator_key_file: alpha-validator-key.json
node_key_file: alpha-node-key.json
beta-provider.stg.earthball.xyz:
node_user: consumer-beta
chain_home: "{{node_user_home}}/.isc"
node_service_name: "consumer-beta"
cosmovisor_service_name: "cv-consumer-beta"
api_port: 26665
rpc_port: 26666
p2p_port: 26667
grpc_port: 26668
rpc_pprof_port: 26669
priv_validator_key_file: beta-validator.json
node_key_file: beta-node.json
gamma-provider.stg.earthball.xyz:
node_user: consumer-gamma
chain_home: "{{node_user_home}}/.isc"
node_service_name: "consumer-gamma"
cosmovisor_service_name: "cv-consumer-gamma"
api_port: 26675
rpc_port: 26676
p2p_port: 26677
grpc_port: 26678
rpc_pprof_port: 26679
priv_validator_key_file: gamma-validator.json
node_key_file: gamma-node.json
delta-provider.stg.earthball.xyz:
node_user: consumer-delta
chain_home: "{{node_user_home}}/.isc"
node_service_name: "consumer-delta"
cosmovisor_service_name: "cv-consumer-delta"
api_port: 26689
rpc_port: 26689
p2p_port: 26689
grpc_port: 26689
rpc_pprof_port: 26689
priv_validator_key_file: delta-validator.json
node_key_file: delta-node.json
```
Blocks should be coming in now on the consumer chain, but we need to link it to the provider chain next.
## 6. Set up the relayer between chains
- Set `hermes_order: ordered`
- Set `hermes_channel_version: '1'`
- The consumer chain must be the first chain listed (chain a)
- The port name of the consumer chain must be `consumer`
- The port name of the provider chain must be `provider`
- The client id must be specified
- Enable the channel workers for handshake completion.
Inventory file:
```yaml=
---
# yamllint disable rule:line-length
all:
vars:
chain_home_clear: true
hermes_version: v1.0.0
ansible_user: root
reboot: false
children:
hermes:
hosts:
alpha-provider.stg.earthball.xyz:
hermes_relayer_mnemonics: true
hermes_order: ordered
hermes_channel_version: '1'
hermes_chains:
moon2:
hermes_relayer_mnemonic: 'playmaker-mnemonic.txt'
hermes_port_name: consumer
hermes_chain_rpc_url_schema: http
hermes_chain_rpc_hostname: alpha-provider.stg.earthball.xyz
hermes_chain_rpc_port: 26656
hermes_chain_grpc_url_schema: http
hermes_chain_grpc_hostname: alpha-provider.stg.earthball.xyz
hermes_chain_grpc_port: 26658
hermes_chain_websocket_url_schema: ws
hermes_chain_rpc_timeout: '10s'
hermes_chain_account_prefix: 'cosmos'
hermes_chain_key_name: 'testkey'
hermes_chain_store_prefix: 'ibc'
hermes_chain_max_gas: 2000000
hermes_chain_fee_granter: ''
gas_price: "{ price = 0.00, denom = 'stake' }"
hermes_chain_gas_multiplier: 1.1
hermes_chain_clock_drift: '5s'
hermes_chain_trusting_period: '14days'
hermes_chain_trust_threshold: "{ numerator = '1', denominator = '3' }"
earth:
hermes_relayer_mnemonic: 'playmaker-mnemonic.txt'
hermes_port_name: provider
hermes_chain_rpc_url_schema: http
hermes_chain_rpc_hostname: alpha-provider.stg.earthball.xyz
hermes_chain_rpc_port: 26651
hermes_chain_grpc_url_schema: http
hermes_chain_grpc_hostname: alpha-provider.stg.earthball.xyz
hermes_chain_grpc_port: 26653
hermes_chain_websocket_url_schema: ws
hermes_chain_rpc_timeout: '10s'
hermes_chain_account_prefix: 'cosmos'
hermes_chain_key_name: 'testkey'
hermes_chain_store_prefix: 'ibc'
hermes_chain_max_gas: 2000000
hermes_chain_fee_granter: ''
gas_price: "{ price = 0.00, denom = 'stake' }"
hermes_chain_gas_multiplier: 1.1
hermes_chain_clock_drift: '5s'
hermes_chain_trusting_period: '14days'
hermes_chain_trust_threshold: "{ numerator = '1', denominator = '3' }"
```
The hermes play because the unbonding period is too short. We need to increase it to 21 days again (or more than 1209600s). We can do that with a gov proposal:
The IBC connection could not be created due to a handshake timeout on the moon chain.
We will attempt to re-start another consumer chain.
We have also changed the app proxy port to 26648 in the consumer alpha node and 26638 in the provider alpha node.
The hermes play errored out during connection creation, so we ran this command in the hermes machine afterwards:
```bash=
hermes create connection --a-chain moon2 --a-client 07-tendermint-0 --b-client 07-tendermint-1
...
SUCCESS Connection {
delay_period: 0ns,
a_side: ConnectionSide {
chain: BaseChainHandle {
chain_id: ChainId {
id: "moon2",
version: 0,
},
runtime_sender: Sender { .. },
},
client_id: ClientId(
"07-tendermint-0",
),
connection_id: Some(
ConnectionId(
"connection-0",
),
),
},
b_side: ConnectionSide {
chain: BaseChainHandle {
chain_id: ChainId {
id: "earth",
version: 0,
},
runtime_sender: Sender { .. },
},
client_id: ClientId(
"07-tendermint-1",
),
connection_id: Some(
ConnectionId(
"connection-0",
),
),
},
}
```
That seemed to work. Next we can create the channel.
```
hermes create channel --a-chain moon2 --a-port consumer --b-port provider --order ordered --a-connection connection-0 --channel-version 1
...
SUCCESS Channel {
ordering: Ordered,
a_side: ChannelSide {
chain: BaseChainHandle {
chain_id: ChainId {
id: "moon2",
version: 0,
},
runtime_sender: Sender { .. },
},
client_id: ClientId(
"07-tendermint-0",
),
connection_id: ConnectionId(
"connection-0",
),
port_id: PortId(
"consumer",
),
channel_id: Some(
ChannelId(
"channel-0",
),
),
version: Some(
Version(
"1",
),
),
},
b_side: ChannelSide {
chain: BaseChainHandle {
chain_id: ChainId {
id: "earth",
version: 0,
},
runtime_sender: Sender { .. },
},
client_id: ClientId(
"07-tendermint-1",
),
connection_id: ConnectionId(
"connection-0",
),
port_id: PortId(
"provider",
),
channel_id: Some(
ChannelId(
"channel-0",
),
),
version: Some(
Version(
"1",
),
),
},
connection_delay: 0ns,
}
```
That also seemed to work.
Start the hermes service (because the play errored out before setting it up).
## 7. Check the validator set matches between chains.
On earth:
```
interchain-security-pd q tendermint-validator-set --home ~/.isp
block_height: "40104"
total: "4"
validators:
- address: cosmosvalcons1jep6hexugh70cultnd5hwarzvdfpayu45h89az
proposer_priority: "-14413"
pub_key:
type: tendermint/PubKeyEd25519
value: q+sy4tVCZ80VjCMiwYWCKAXfoJXuFfGrRtOshzm15w8=
voting_power: "20999"
- address: cosmosvalcons1vqf7st30jsje4qx7spf8vkzfmm6j35hy287l2c
proposer_priority: "127"
pub_key:
type: tendermint/PubKeyEd25519
value: 3LPkv6rfr6n0girXCGUZ2X5/lSLBVKbaO5Kkop1g2OU=
voting_power: "20998"
- address: cosmosvalcons1p9ze7ntpfu2gm0g5qqpl0japlcfdl7untltmm4
proposer_priority: "23099"
pub_key:
type: tendermint/PubKeyEd25519
value: 7qC/rP6wueX+2Jeza6pc15EksixyvCGmMc79zGA9FUQ=
voting_power: "20997"
- address: cosmosvalcons147amlw2uzmvkhm96ffgcr33v5hz882znu425as
proposer_priority: "-8813"
pub_key:
type: tendermint/PubKeyEd25519
value: yEzuV/fjUQXDMwTC/ZjsmaoE7UYzs8vt+pSCW09Ce8s=
voting_power: "20816"
```
On moon2:
```
interchain-security-cd q tendermint-validator-set --home ~/.isc
block_height: "735"
total: "4"
validators:
- address: cosmosvalcons1jep6hexugh70cultnd5hwarzvdfpayu45h89az
proposer_priority: "17212"
pub_key:
type: tendermint/PubKeyEd25519
value: q+sy4tVCZ80VjCMiwYWCKAXfoJXuFfGrRtOshzm15w8=
voting_power: "20999"
- address: cosmosvalcons1vqf7st30jsje4qx7spf8vkzfmm6j35hy287l2c
proposer_priority: "-3956"
pub_key:
type: tendermint/PubKeyEd25519
value: 3LPkv6rfr6n0girXCGUZ2X5/lSLBVKbaO5Kkop1g2OU=
voting_power: "20998"
- address: cosmosvalcons1p9ze7ntpfu2gm0g5qqpl0japlcfdl7untltmm4
proposer_priority: "-4988"
pub_key:
type: tendermint/PubKeyEd25519
value: 7qC/rP6wueX+2Jeza6pc15EksixyvCGmMc79zGA9FUQ=
voting_power: "20997"
- address: cosmosvalcons147amlw2uzmvkhm96ffgcr33v5hz882znu425as
proposer_priority: "-8266"
pub_key:
type: tendermint/PubKeyEd25519
value: yEzuV/fjUQXDMwTC/ZjsmaoE7UYzs8vt+pSCW09Ce8s=
voting_power: "20816"
```