From 18be12d238ded4e5e75de564776922ab7f9b227f Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Thu, 19 Jan 2023 13:16:46 +0000 Subject: [PATCH 1/4] chore: refactoring genesis modification function to not rely on concrete types --- e2e/testconfig/testconfig.go | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/e2e/testconfig/testconfig.go b/e2e/testconfig/testconfig.go index 87b4b954b2d..b6ea74a7139 100644 --- a/e2e/testconfig/testconfig.go +++ b/e2e/testconfig/testconfig.go @@ -8,14 +8,11 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module/testutil" - genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" gogoproto "github.com/cosmos/gogoproto/proto" "github.com/strangelove-ventures/ibctest/v6/ibc" - tmjson "github.com/tendermint/tendermint/libs/json" - tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/ibc-go/e2e/semverutil" "github.com/cosmos/ibc-go/e2e/testvalues" @@ -191,41 +188,50 @@ var govGenesisFeatureReleases = semverutil.FeatureReleases{ // defaultModifyGenesis will only modify governance params to ensure the voting period and minimum deposit // are functional for e2e testing purposes. func defaultModifyGenesis() func(ibc.ChainConfig, []byte) ([]byte, error) { + const appStateKey = "app_state" return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { - genDoc, err := tmtypes.GenesisDocFromJSON(genbz) + genesisDocMap := map[string]interface{}{} + err := json.Unmarshal(genbz, &genesisDocMap) if err != nil { return nil, fmt.Errorf("failed to unmarshal genesis bytes into genesis doc: %w", err) } - var appState genutiltypes.AppMap - if err := json.Unmarshal(genDoc.AppState, &appState); err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis bytes into app state: %w", err) + appStateMap, ok := genesisDocMap[appStateKey].(map[string]interface{}) + if !ok { + return nil, fmt.Errorf("failed to extract to app_state") } - govGenBz, err := modifyGovAppState(chainConfig, appState[govtypes.ModuleName]) + govModuleBytes, err := json.Marshal(appStateMap[govtypes.ModuleName]) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to extract gov genesis bytes: %s", err) } - appState[govtypes.ModuleName] = govGenBz - - genDoc.AppState, err = json.Marshal(appState) + govModuleGenesisBytes, err := modifyGovAppState(chainConfig, govModuleBytes) if err != nil { return nil, err } - bz, err := tmjson.MarshalIndent(genDoc, "", " ") + govModuleGenesisMap := map[string]interface{}{} + err = json.Unmarshal(govModuleGenesisBytes, &govModuleGenesisMap) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal gov genesis bytes into map: %w", err) + } + + appStateMap[govtypes.ModuleName] = govModuleGenesisMap + genesisDocMap[appStateKey] = appStateMap + + finalGenesisDocBytes, err := json.MarshalIndent(genesisDocMap, "", " ") if err != nil { return nil, err } - return bz, nil + return finalGenesisDocBytes, nil } } // modifyGovAppState takes the existing gov app state and marshals it to either a govv1 GenesisState // or a govv1beta1 GenesisState depending on the simapp version. -func modifyGovAppState(chainConfig ibc.ChainConfig, govAppState json.RawMessage) ([]byte, error) { +func modifyGovAppState(chainConfig ibc.ChainConfig, govAppState []byte) ([]byte, error) { cfg := testutil.MakeTestEncodingConfig() cdc := codec.NewProtoCodec(cfg.InterfaceRegistry) From b181ee35739ba11b5b2371b0fb217c0ad13777b5 Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Thu, 19 Jan 2023 13:23:41 +0000 Subject: [PATCH 2/4] chore: adding docstring to explain why unsafe map is being used --- e2e/testconfig/testconfig.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/e2e/testconfig/testconfig.go b/e2e/testconfig/testconfig.go index b6ea74a7139..e451a617f2a 100644 --- a/e2e/testconfig/testconfig.go +++ b/e2e/testconfig/testconfig.go @@ -187,6 +187,19 @@ var govGenesisFeatureReleases = semverutil.FeatureReleases{ // defaultModifyGenesis will only modify governance params to ensure the voting period and minimum deposit // are functional for e2e testing purposes. +// Note: this function intentionally does not use the type defined here https://github.com/tendermint/tendermint/blob/64747b2b184184ecba4f4bffc54ffbcb47cfbcb0/types/genesis.go#L39 +// and uses a map[string]interface{} instead. +// this is because ibctest performs the following steps when creating the genesis.json file for chains. +// - 1. Let the chain binary create its own genesis file. +// - 2. Apply any provided functions to modify the bytes of the file. +// - 3. Overwrite the file with the new contents. +// This is a problem because when the tendermint types change, marshalling into the type will cause us to lose +// values if the types have changed in between the versis of the chain in the test and the version of tendermint +// imported by the e2e tests. +// By using a raw map[string]interface{} we preserve the values unknown to the e2e tests and can still change +// the values we care about. +// TODO: handle these genesis modifications in a way which is type safe and does not require us to rely on +// map[string]interface{} func defaultModifyGenesis() func(ibc.ChainConfig, []byte) ([]byte, error) { const appStateKey = "app_state" return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { From 02759651c9ef8788074bb37ea46bfca8678b7695 Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Fri, 20 Jan 2023 10:06:51 +0000 Subject: [PATCH 3/4] chore: PR feedback --- e2e/testconfig/testconfig.go | 7 +- genesis.json | 569 +++++++++++++++++++++++++++++++++++ 2 files changed, 573 insertions(+), 3 deletions(-) create mode 100644 genesis.json diff --git a/e2e/testconfig/testconfig.go b/e2e/testconfig/testconfig.go index e451a617f2a..573271df329 100644 --- a/e2e/testconfig/testconfig.go +++ b/e2e/testconfig/testconfig.go @@ -187,14 +187,15 @@ var govGenesisFeatureReleases = semverutil.FeatureReleases{ // defaultModifyGenesis will only modify governance params to ensure the voting period and minimum deposit // are functional for e2e testing purposes. -// Note: this function intentionally does not use the type defined here https://github.com/tendermint/tendermint/blob/64747b2b184184ecba4f4bffc54ffbcb47cfbcb0/types/genesis.go#L39 +// Note: this function intentionally does not use the type defined here https://github.com/tendermint/tendermint/blob/v0.37.0-rc2/types/genesis.go#L38-L46 // and uses a map[string]interface{} instead. -// this is because ibctest performs the following steps when creating the genesis.json file for chains. +// This approach prevents the field block.TimeIotaMs from being lost which happened when using the GenesisDoc type from tendermint version v0.37.0. +// ibctest performs the following steps when creating the genesis.json file for chains. // - 1. Let the chain binary create its own genesis file. // - 2. Apply any provided functions to modify the bytes of the file. // - 3. Overwrite the file with the new contents. // This is a problem because when the tendermint types change, marshalling into the type will cause us to lose -// values if the types have changed in between the versis of the chain in the test and the version of tendermint +// values if the types have changed in between the version of the chain in the test and the version of tendermint // imported by the e2e tests. // By using a raw map[string]interface{} we preserve the values unknown to the e2e tests and can still change // the values we care about. diff --git a/genesis.json b/genesis.json new file mode 100644 index 00000000000..dbe24f3bfd5 --- /dev/null +++ b/genesis.json @@ -0,0 +1,569 @@ +{ + "app_hash": "", + "app_state": { + "auth": { + "accounts": [ + { + "@type": "/cosmos.auth.v1beta1.BaseAccount", + "account_number": "0", + "address": "cosmos1v5pzylv4l0u538rgw5k5zex8h54540v03r2xa6", + "pub_key": null, + "sequence": "0" + }, + { + "@type": "/cosmos.auth.v1beta1.BaseAccount", + "account_number": "0", + "address": "cosmos1e8nk3gvvtelhan6t25vmgrnpehnl0cwy7f6lxl", + "pub_key": null, + "sequence": "0" + }, + { + "@type": "/cosmos.auth.v1beta1.BaseAccount", + "account_number": "0", + "address": "cosmos1x87m5pkcjk93fza9plnd9z7rrnnh22sf9tugzc", + "pub_key": null, + "sequence": "0" + }, + { + "@type": "/cosmos.auth.v1beta1.BaseAccount", + "account_number": "0", + "address": "cosmos1kxkzx8w8as59tvgzkwpyhyrllfcdj2e4cp8s9a", + "pub_key": null, + "sequence": "0" + }, + { + "@type": "/cosmos.auth.v1beta1.BaseAccount", + "account_number": "0", + "address": "cosmos17de22n09rdzqxpjhjsvfferluxuekk8xn5nx6u", + "pub_key": null, + "sequence": "0" + }, + { + "@type": "/cosmos.auth.v1beta1.BaseAccount", + "account_number": "0", + "address": "cosmos1ndaap0fklkazyfn8k70vcng9vkzwgfep2q7wez", + "pub_key": null, + "sequence": "0" + } + ], + "params": { + "max_memo_characters": "256", + "sig_verify_cost_ed25519": "590", + "sig_verify_cost_secp256k1": "1000", + "tx_sig_limit": "7", + "tx_size_cost_per_byte": "10" + } + }, + "authz": { + "authorization": [] + }, + "bank": { + "balances": [ + { + "address": "cosmos1x87m5pkcjk93fza9plnd9z7rrnnh22sf9tugzc", + "coins": [ + { + "amount": "10000000000000", + "denom": "atoma" + } + ] + }, + { + "address": "cosmos1v5pzylv4l0u538rgw5k5zex8h54540v03r2xa6", + "coins": [ + { + "amount": "10000000000000", + "denom": "atoma" + } + ] + }, + { + "address": "cosmos1ndaap0fklkazyfn8k70vcng9vkzwgfep2q7wez", + "coins": [ + { + "amount": "1000000000000", + "denom": "atoma" + } + ] + }, + { + "address": "cosmos1kxkzx8w8as59tvgzkwpyhyrllfcdj2e4cp8s9a", + "coins": [ + { + "amount": "10000000000000", + "denom": "atoma" + } + ] + }, + { + "address": "cosmos1e8nk3gvvtelhan6t25vmgrnpehnl0cwy7f6lxl", + "coins": [ + { + "amount": "10000000000000", + "denom": "atoma" + } + ] + }, + { + "address": "cosmos17de22n09rdzqxpjhjsvfferluxuekk8xn5nx6u", + "coins": [ + { + "amount": "100000000000000", + "denom": "atoma" + } + ] + } + ], + "denom_metadata": [], + "params": { + "default_send_enabled": true, + "send_enabled": [] + }, + "supply": [ + { + "amount": "141000000000000", + "denom": "atoma" + } + ] + }, + "capability": { + "index": "1", + "owners": [] + }, + "crisis": { + "constant_fee": { + "amount": "1000", + "denom": "atoma" + } + }, + "distribution": { + "delegator_starting_infos": [], + "delegator_withdraw_infos": [], + "fee_pool": { + "community_pool": [] + }, + "outstanding_rewards": [], + "params": { + "base_proposer_reward": "0.010000000000000000", + "bonus_proposer_reward": "0.040000000000000000", + "community_tax": "0.020000000000000000", + "withdraw_addr_enabled": true + }, + "previous_proposer": "", + "validator_accumulated_commissions": [], + "validator_current_rewards": [], + "validator_historical_rewards": [], + "validator_slash_events": [] + }, + "evidence": { + "evidence": [] + }, + "feegrant": { + "allowances": [] + }, + "feeibc": { + "fee_enabled_channels": [], + "forward_relayers": [], + "identified_fees": [], + "registered_counterparty_payees": [], + "registered_payees": [] + }, + "genutil": { + "gen_txs": [ + { + "auth_info": { + "fee": { + "amount": [], + "gas_limit": "200000", + "granter": "", + "payer": "" + }, + "signer_infos": [ + { + "mode_info": { + "single": { + "mode": "SIGN_MODE_DIRECT" + } + }, + "public_key": { + "@type": "/cosmos.crypto.secp256k1.PubKey", + "key": "AymwdB1PcmBKCcau2ZSLdp5yoqHGFqE23FOaCVOMDAb8" + }, + "sequence": "0" + } + ] + }, + "body": { + "extension_options": [], + "memo": "16cb188d342ae5efdb975ba9cabe87d9ee16c422@172.23.0.6:26656", + "messages": [ + { + "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", + "commission": { + "max_change_rate": "0.010000000000000000", + "max_rate": "0.200000000000000000", + "rate": "0.100000000000000000" + }, + "delegator_address": "cosmos1v5pzylv4l0u538rgw5k5zex8h54540v03r2xa6", + "description": { + "details": "", + "identity": "", + "moniker": "chain-a-val-0-TestTransferTestSuite_TestMsgTransfer_WithMemo", + "security_contact": "", + "website": "" + }, + "min_self_delegation": "1", + "pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "SKtGZ1orc8vhlEdklRvvDYhmHoOsIIVr2LppPSKsq78=" + }, + "validator_address": "cosmosvaloper1v5pzylv4l0u538rgw5k5zex8h54540v05h7n3f", + "value": { + "amount": "5000000000000", + "denom": "atoma" + } + } + ], + "non_critical_extension_options": [], + "timeout_height": "0" + }, + "signatures": [ + "G+c3KHAcmO1c5eVTZIeMJkMPJ39lqvXhEcYqyWSPOuMv/maviQle7FpYk28FnxgZF4CbD7UAmFiRPhPghCxGiA==" + ] + }, + { + "auth_info": { + "fee": { + "amount": [], + "gas_limit": "200000", + "granter": "", + "payer": "" + }, + "signer_infos": [ + { + "mode_info": { + "single": { + "mode": "SIGN_MODE_DIRECT" + } + }, + "public_key": { + "@type": "/cosmos.crypto.secp256k1.PubKey", + "key": "Ay4falaQBxAe1oqQYA/NLw7tfupXUXz198BdgEvRTIzW" + }, + "sequence": "0" + } + ] + }, + "body": { + "extension_options": [], + "memo": "21c0a65edee9294fb7e3a5143f8fb499e5373ed1@172.23.0.5:26656", + "messages": [ + { + "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", + "commission": { + "max_change_rate": "0.010000000000000000", + "max_rate": "0.200000000000000000", + "rate": "0.100000000000000000" + }, + "delegator_address": "cosmos1x87m5pkcjk93fza9plnd9z7rrnnh22sf9tugzc", + "description": { + "details": "", + "identity": "", + "moniker": "chain-a-val-2-TestTransferTestSuite_TestMsgTransfer_WithMemo", + "security_contact": "", + "website": "" + }, + "min_self_delegation": "1", + "pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "yRjJMING4nn3wq/8dG8u3YeLtTa1Hu1JNxC08KBZ61o=" + }, + "validator_address": "cosmosvaloper1x87m5pkcjk93fza9plnd9z7rrnnh22sfqlgawt", + "value": { + "amount": "5000000000000", + "denom": "atoma" + } + } + ], + "non_critical_extension_options": [], + "timeout_height": "0" + }, + "signatures": [ + "xx7gXJKFqfsla+sb2NwP//qJGTZv0CehZ8pDfzEIcH06/U2F4oDUwUBYtuI2sxUYhchgf+PQ9x/JdN4IioQttQ==" + ] + }, + { + "auth_info": { + "fee": { + "amount": [], + "gas_limit": "200000", + "granter": "", + "payer": "" + }, + "signer_infos": [ + { + "mode_info": { + "single": { + "mode": "SIGN_MODE_DIRECT" + } + }, + "public_key": { + "@type": "/cosmos.crypto.secp256k1.PubKey", + "key": "A71sRn6Yyj5rdN5IbpB1pldZxazsAVEqsoQ3SKVYYMJt" + }, + "sequence": "0" + } + ] + }, + "body": { + "extension_options": [], + "memo": "57aa595efa75ed4d12f82d4f97414e259a6f1ea2@172.23.0.4:26656", + "messages": [ + { + "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", + "commission": { + "max_change_rate": "0.010000000000000000", + "max_rate": "0.200000000000000000", + "rate": "0.100000000000000000" + }, + "delegator_address": "cosmos1e8nk3gvvtelhan6t25vmgrnpehnl0cwy7f6lxl", + "description": { + "details": "", + "identity": "", + "moniker": "chain-a-val-1-TestTransferTestSuite_TestMsgTransfer_WithMemo", + "security_contact": "", + "website": "" + }, + "min_self_delegation": "1", + "pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "eRXWDPNHvPRThKdfBV+euVHSQdWKbxZAmG+R7+iq/f8=" + }, + "validator_address": "cosmosvaloper1e8nk3gvvtelhan6t25vmgrnpehnl0cwymaw22v", + "value": { + "amount": "5000000000000", + "denom": "atoma" + } + } + ], + "non_critical_extension_options": [], + "timeout_height": "0" + }, + "signatures": [ + "fPmwsVuvREJI/svM1Q1pCCg+XMBJiD0aJfJHzcKqpBR3RIq0eW1KaaTTKa5FbnCGvTfZvufXfdYmOJ3ACNwkDw==" + ] + }, + { + "auth_info": { + "fee": { + "amount": [], + "gas_limit": "200000", + "granter": "", + "payer": "" + }, + "signer_infos": [ + { + "mode_info": { + "single": { + "mode": "SIGN_MODE_DIRECT" + } + }, + "public_key": { + "@type": "/cosmos.crypto.secp256k1.PubKey", + "key": "Av9T5q9tT15IpRWDjHjSIGxuTa3rRH0RSNjd7myGE3QR" + }, + "sequence": "0" + } + ] + }, + "body": { + "extension_options": [], + "memo": "77b91142c062d57f1856a714336d26d49f05f379@172.23.0.2:26656", + "messages": [ + { + "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", + "commission": { + "max_change_rate": "0.010000000000000000", + "max_rate": "0.200000000000000000", + "rate": "0.100000000000000000" + }, + "delegator_address": "cosmos1kxkzx8w8as59tvgzkwpyhyrllfcdj2e4cp8s9a", + "description": { + "details": "", + "identity": "", + "moniker": "chain-a-val-3-TestTransferTestSuite_TestMsgTransfer_WithMemo", + "security_contact": "", + "website": "" + }, + "min_self_delegation": "1", + "pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "kMcTDIYD/s5QVVOflTS/0G1PGMnHD0JYdHVOhbtZTlU=" + }, + "validator_address": "cosmosvaloper1kxkzx8w8as59tvgzkwpyhyrllfcdj2e4a4n9fw", + "value": { + "amount": "5000000000000", + "denom": "atoma" + } + } + ], + "non_critical_extension_options": [], + "timeout_height": "0" + }, + "signatures": [ + "8fZC20bQXIEMaZrM7F/oLjRgBOxFV8kFh/o/JZ3afgVg7bT4EnKVIhmdLtHgfyj0HdfhYMMt2BMT0hpVtbS7fg==" + ] + } + ] + }, + "gov": { + "deposit_params": { + "max_deposit_period": "172800s", + "min_deposit": [ + { + "amount": "10000000", + "denom": "atoma" + } + ] + }, + "deposits": [], + "proposals": [], + "starting_proposal_id": "1", + "tally_params": { + "quorum": "0.334000000000000000", + "threshold": "0.500000000000000000", + "veto_threshold": "0.334000000000000000" + }, + "votes": [], + "voting_params": { + "voting_period": "30s" + } + }, + "ibc": { + "channel_genesis": { + "ack_sequences": [], + "acknowledgements": [], + "channels": [], + "commitments": [], + "next_channel_sequence": "0", + "receipts": [], + "recv_sequences": [], + "send_sequences": [] + }, + "client_genesis": { + "clients": [], + "clients_consensus": [], + "clients_metadata": [], + "create_localhost": false, + "next_client_sequence": "0", + "params": { + "allowed_clients": [ + "06-solomachine", + "07-tendermint" + ] + } + }, + "connection_genesis": { + "client_connection_paths": [], + "connections": [], + "next_connection_sequence": "0", + "params": { + "max_expected_time_per_block": "30000000000" + } + } + }, + "interchainaccounts": { + "controller_genesis_state": { + "active_channels": [], + "interchain_accounts": [], + "params": { + "controller_enabled": true + }, + "ports": [] + }, + "host_genesis_state": { + "active_channels": [], + "interchain_accounts": [], + "params": { + "allow_messages": [], + "host_enabled": true + }, + "port": "icahost" + } + }, + "mint": { + "minter": { + "annual_provisions": "0.000000000000000000", + "inflation": "0.130000000000000000" + }, + "params": { + "blocks_per_year": "6311520", + "goal_bonded": "0.670000000000000000", + "inflation_max": "0.200000000000000000", + "inflation_min": "0.070000000000000000", + "inflation_rate_change": "0.130000000000000000", + "mint_denom": "atoma" + } + }, + "mock": null, + "params": null, + "slashing": { + "missed_blocks": [], + "params": { + "downtime_jail_duration": "600s", + "min_signed_per_window": "0.500000000000000000", + "signed_blocks_window": "100", + "slash_fraction_double_sign": "0.050000000000000000", + "slash_fraction_downtime": "0.010000000000000000" + }, + "signing_infos": [] + }, + "staking": { + "delegations": [], + "exported": false, + "last_total_power": "0", + "last_validator_powers": [], + "params": { + "bond_denom": "atoma", + "historical_entries": 10000, + "max_entries": 7, + "max_validators": 100, + "unbonding_time": "1814400s" + }, + "redelegations": [], + "unbonding_delegations": [], + "validators": [] + }, + "transfer": { + "denom_traces": [], + "params": { + "receive_enabled": true, + "send_enabled": true + }, + "port_id": "transfer" + }, + "upgrade": {}, + "vesting": {} + }, + "chain_id": "chain-a", + "consensus_params": { + "block": { + "max_bytes": "22020096", + "max_gas": "-1", + "time_iota_ms": "1000" + }, + "evidence": { + "max_age_duration": "172800000000000", + "max_age_num_blocks": "100000", + "max_bytes": "1048576" + }, + "validator": { + "pub_key_types": [ + "ed25519" + ] + }, + "version": {} + }, + "genesis_time": "2023-01-19T14:41:22.593182671Z", + "initial_height": "1" +} \ No newline at end of file From 128cfd974f3a4910b47bb89cc6039aa387093ba9 Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Fri, 20 Jan 2023 11:02:13 +0000 Subject: [PATCH 4/4] chore: removing accidental file --- genesis.json | 569 --------------------------------------------------- 1 file changed, 569 deletions(-) delete mode 100644 genesis.json diff --git a/genesis.json b/genesis.json deleted file mode 100644 index dbe24f3bfd5..00000000000 --- a/genesis.json +++ /dev/null @@ -1,569 +0,0 @@ -{ - "app_hash": "", - "app_state": { - "auth": { - "accounts": [ - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "cosmos1v5pzylv4l0u538rgw5k5zex8h54540v03r2xa6", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "cosmos1e8nk3gvvtelhan6t25vmgrnpehnl0cwy7f6lxl", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "cosmos1x87m5pkcjk93fza9plnd9z7rrnnh22sf9tugzc", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "cosmos1kxkzx8w8as59tvgzkwpyhyrllfcdj2e4cp8s9a", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "cosmos17de22n09rdzqxpjhjsvfferluxuekk8xn5nx6u", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "cosmos1ndaap0fklkazyfn8k70vcng9vkzwgfep2q7wez", - "pub_key": null, - "sequence": "0" - } - ], - "params": { - "max_memo_characters": "256", - "sig_verify_cost_ed25519": "590", - "sig_verify_cost_secp256k1": "1000", - "tx_sig_limit": "7", - "tx_size_cost_per_byte": "10" - } - }, - "authz": { - "authorization": [] - }, - "bank": { - "balances": [ - { - "address": "cosmos1x87m5pkcjk93fza9plnd9z7rrnnh22sf9tugzc", - "coins": [ - { - "amount": "10000000000000", - "denom": "atoma" - } - ] - }, - { - "address": "cosmos1v5pzylv4l0u538rgw5k5zex8h54540v03r2xa6", - "coins": [ - { - "amount": "10000000000000", - "denom": "atoma" - } - ] - }, - { - "address": "cosmos1ndaap0fklkazyfn8k70vcng9vkzwgfep2q7wez", - "coins": [ - { - "amount": "1000000000000", - "denom": "atoma" - } - ] - }, - { - "address": "cosmos1kxkzx8w8as59tvgzkwpyhyrllfcdj2e4cp8s9a", - "coins": [ - { - "amount": "10000000000000", - "denom": "atoma" - } - ] - }, - { - "address": "cosmos1e8nk3gvvtelhan6t25vmgrnpehnl0cwy7f6lxl", - "coins": [ - { - "amount": "10000000000000", - "denom": "atoma" - } - ] - }, - { - "address": "cosmos17de22n09rdzqxpjhjsvfferluxuekk8xn5nx6u", - "coins": [ - { - "amount": "100000000000000", - "denom": "atoma" - } - ] - } - ], - "denom_metadata": [], - "params": { - "default_send_enabled": true, - "send_enabled": [] - }, - "supply": [ - { - "amount": "141000000000000", - "denom": "atoma" - } - ] - }, - "capability": { - "index": "1", - "owners": [] - }, - "crisis": { - "constant_fee": { - "amount": "1000", - "denom": "atoma" - } - }, - "distribution": { - "delegator_starting_infos": [], - "delegator_withdraw_infos": [], - "fee_pool": { - "community_pool": [] - }, - "outstanding_rewards": [], - "params": { - "base_proposer_reward": "0.010000000000000000", - "bonus_proposer_reward": "0.040000000000000000", - "community_tax": "0.020000000000000000", - "withdraw_addr_enabled": true - }, - "previous_proposer": "", - "validator_accumulated_commissions": [], - "validator_current_rewards": [], - "validator_historical_rewards": [], - "validator_slash_events": [] - }, - "evidence": { - "evidence": [] - }, - "feegrant": { - "allowances": [] - }, - "feeibc": { - "fee_enabled_channels": [], - "forward_relayers": [], - "identified_fees": [], - "registered_counterparty_payees": [], - "registered_payees": [] - }, - "genutil": { - "gen_txs": [ - { - "auth_info": { - "fee": { - "amount": [], - "gas_limit": "200000", - "granter": "", - "payer": "" - }, - "signer_infos": [ - { - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "AymwdB1PcmBKCcau2ZSLdp5yoqHGFqE23FOaCVOMDAb8" - }, - "sequence": "0" - } - ] - }, - "body": { - "extension_options": [], - "memo": "16cb188d342ae5efdb975ba9cabe87d9ee16c422@172.23.0.6:26656", - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "commission": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "delegator_address": "cosmos1v5pzylv4l0u538rgw5k5zex8h54540v03r2xa6", - "description": { - "details": "", - "identity": "", - "moniker": "chain-a-val-0-TestTransferTestSuite_TestMsgTransfer_WithMemo", - "security_contact": "", - "website": "" - }, - "min_self_delegation": "1", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "SKtGZ1orc8vhlEdklRvvDYhmHoOsIIVr2LppPSKsq78=" - }, - "validator_address": "cosmosvaloper1v5pzylv4l0u538rgw5k5zex8h54540v05h7n3f", - "value": { - "amount": "5000000000000", - "denom": "atoma" - } - } - ], - "non_critical_extension_options": [], - "timeout_height": "0" - }, - "signatures": [ - "G+c3KHAcmO1c5eVTZIeMJkMPJ39lqvXhEcYqyWSPOuMv/maviQle7FpYk28FnxgZF4CbD7UAmFiRPhPghCxGiA==" - ] - }, - { - "auth_info": { - "fee": { - "amount": [], - "gas_limit": "200000", - "granter": "", - "payer": "" - }, - "signer_infos": [ - { - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "Ay4falaQBxAe1oqQYA/NLw7tfupXUXz198BdgEvRTIzW" - }, - "sequence": "0" - } - ] - }, - "body": { - "extension_options": [], - "memo": "21c0a65edee9294fb7e3a5143f8fb499e5373ed1@172.23.0.5:26656", - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "commission": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "delegator_address": "cosmos1x87m5pkcjk93fza9plnd9z7rrnnh22sf9tugzc", - "description": { - "details": "", - "identity": "", - "moniker": "chain-a-val-2-TestTransferTestSuite_TestMsgTransfer_WithMemo", - "security_contact": "", - "website": "" - }, - "min_self_delegation": "1", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "yRjJMING4nn3wq/8dG8u3YeLtTa1Hu1JNxC08KBZ61o=" - }, - "validator_address": "cosmosvaloper1x87m5pkcjk93fza9plnd9z7rrnnh22sfqlgawt", - "value": { - "amount": "5000000000000", - "denom": "atoma" - } - } - ], - "non_critical_extension_options": [], - "timeout_height": "0" - }, - "signatures": [ - "xx7gXJKFqfsla+sb2NwP//qJGTZv0CehZ8pDfzEIcH06/U2F4oDUwUBYtuI2sxUYhchgf+PQ9x/JdN4IioQttQ==" - ] - }, - { - "auth_info": { - "fee": { - "amount": [], - "gas_limit": "200000", - "granter": "", - "payer": "" - }, - "signer_infos": [ - { - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "A71sRn6Yyj5rdN5IbpB1pldZxazsAVEqsoQ3SKVYYMJt" - }, - "sequence": "0" - } - ] - }, - "body": { - "extension_options": [], - "memo": "57aa595efa75ed4d12f82d4f97414e259a6f1ea2@172.23.0.4:26656", - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "commission": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "delegator_address": "cosmos1e8nk3gvvtelhan6t25vmgrnpehnl0cwy7f6lxl", - "description": { - "details": "", - "identity": "", - "moniker": "chain-a-val-1-TestTransferTestSuite_TestMsgTransfer_WithMemo", - "security_contact": "", - "website": "" - }, - "min_self_delegation": "1", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "eRXWDPNHvPRThKdfBV+euVHSQdWKbxZAmG+R7+iq/f8=" - }, - "validator_address": "cosmosvaloper1e8nk3gvvtelhan6t25vmgrnpehnl0cwymaw22v", - "value": { - "amount": "5000000000000", - "denom": "atoma" - } - } - ], - "non_critical_extension_options": [], - "timeout_height": "0" - }, - "signatures": [ - "fPmwsVuvREJI/svM1Q1pCCg+XMBJiD0aJfJHzcKqpBR3RIq0eW1KaaTTKa5FbnCGvTfZvufXfdYmOJ3ACNwkDw==" - ] - }, - { - "auth_info": { - "fee": { - "amount": [], - "gas_limit": "200000", - "granter": "", - "payer": "" - }, - "signer_infos": [ - { - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "Av9T5q9tT15IpRWDjHjSIGxuTa3rRH0RSNjd7myGE3QR" - }, - "sequence": "0" - } - ] - }, - "body": { - "extension_options": [], - "memo": "77b91142c062d57f1856a714336d26d49f05f379@172.23.0.2:26656", - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "commission": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "delegator_address": "cosmos1kxkzx8w8as59tvgzkwpyhyrllfcdj2e4cp8s9a", - "description": { - "details": "", - "identity": "", - "moniker": "chain-a-val-3-TestTransferTestSuite_TestMsgTransfer_WithMemo", - "security_contact": "", - "website": "" - }, - "min_self_delegation": "1", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "kMcTDIYD/s5QVVOflTS/0G1PGMnHD0JYdHVOhbtZTlU=" - }, - "validator_address": "cosmosvaloper1kxkzx8w8as59tvgzkwpyhyrllfcdj2e4a4n9fw", - "value": { - "amount": "5000000000000", - "denom": "atoma" - } - } - ], - "non_critical_extension_options": [], - "timeout_height": "0" - }, - "signatures": [ - "8fZC20bQXIEMaZrM7F/oLjRgBOxFV8kFh/o/JZ3afgVg7bT4EnKVIhmdLtHgfyj0HdfhYMMt2BMT0hpVtbS7fg==" - ] - } - ] - }, - "gov": { - "deposit_params": { - "max_deposit_period": "172800s", - "min_deposit": [ - { - "amount": "10000000", - "denom": "atoma" - } - ] - }, - "deposits": [], - "proposals": [], - "starting_proposal_id": "1", - "tally_params": { - "quorum": "0.334000000000000000", - "threshold": "0.500000000000000000", - "veto_threshold": "0.334000000000000000" - }, - "votes": [], - "voting_params": { - "voting_period": "30s" - } - }, - "ibc": { - "channel_genesis": { - "ack_sequences": [], - "acknowledgements": [], - "channels": [], - "commitments": [], - "next_channel_sequence": "0", - "receipts": [], - "recv_sequences": [], - "send_sequences": [] - }, - "client_genesis": { - "clients": [], - "clients_consensus": [], - "clients_metadata": [], - "create_localhost": false, - "next_client_sequence": "0", - "params": { - "allowed_clients": [ - "06-solomachine", - "07-tendermint" - ] - } - }, - "connection_genesis": { - "client_connection_paths": [], - "connections": [], - "next_connection_sequence": "0", - "params": { - "max_expected_time_per_block": "30000000000" - } - } - }, - "interchainaccounts": { - "controller_genesis_state": { - "active_channels": [], - "interchain_accounts": [], - "params": { - "controller_enabled": true - }, - "ports": [] - }, - "host_genesis_state": { - "active_channels": [], - "interchain_accounts": [], - "params": { - "allow_messages": [], - "host_enabled": true - }, - "port": "icahost" - } - }, - "mint": { - "minter": { - "annual_provisions": "0.000000000000000000", - "inflation": "0.130000000000000000" - }, - "params": { - "blocks_per_year": "6311520", - "goal_bonded": "0.670000000000000000", - "inflation_max": "0.200000000000000000", - "inflation_min": "0.070000000000000000", - "inflation_rate_change": "0.130000000000000000", - "mint_denom": "atoma" - } - }, - "mock": null, - "params": null, - "slashing": { - "missed_blocks": [], - "params": { - "downtime_jail_duration": "600s", - "min_signed_per_window": "0.500000000000000000", - "signed_blocks_window": "100", - "slash_fraction_double_sign": "0.050000000000000000", - "slash_fraction_downtime": "0.010000000000000000" - }, - "signing_infos": [] - }, - "staking": { - "delegations": [], - "exported": false, - "last_total_power": "0", - "last_validator_powers": [], - "params": { - "bond_denom": "atoma", - "historical_entries": 10000, - "max_entries": 7, - "max_validators": 100, - "unbonding_time": "1814400s" - }, - "redelegations": [], - "unbonding_delegations": [], - "validators": [] - }, - "transfer": { - "denom_traces": [], - "params": { - "receive_enabled": true, - "send_enabled": true - }, - "port_id": "transfer" - }, - "upgrade": {}, - "vesting": {} - }, - "chain_id": "chain-a", - "consensus_params": { - "block": { - "max_bytes": "22020096", - "max_gas": "-1", - "time_iota_ms": "1000" - }, - "evidence": { - "max_age_duration": "172800000000000", - "max_age_num_blocks": "100000", - "max_bytes": "1048576" - }, - "validator": { - "pub_key_types": [ - "ed25519" - ] - }, - "version": {} - }, - "genesis_time": "2023-01-19T14:41:22.593182671Z", - "initial_height": "1" -} \ No newline at end of file