From 0b52addc2b10951053cc4e33ab163168c923c3cc Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Sat, 27 Nov 2021 13:59:36 -0500 Subject: [PATCH] Add domain types (updated) and fix integration tests for Tendermint v0.35.0 (#1022) * tendermint: add From for Error * Use hex for AppHash Debug formatting * Regenerate protobuf types using tools/proto-compiler. * Regenerate protos against tendermint v0.35.0-rc3. * Remove SetOption-related code in tendermint-abci. * Update imports to reflect protobuf movements. The BlockParams and ConsensusParams structs moved out of the ABCI protos. * Update tendermint-abci to reflect upstream proto changes. * p2p: treat all non-Ed25519 keys as unsupported This fixes a compile error introduced by upstream proto changes that add an Sr25519 variant. * Improve ABCI response code modeling with NonZeroU32 The previous data modeling allowed a user to construct an `Err(0)` value that would be serialized and deserialized as `Ok`. * Use the Bytes type in ABCI protos. * Add conversions between protobuf and chrono types. * tendermint: define Serde for Block in terms of RawBlock This changes the Serialize/Deserialize implementations for Block to convert to/from the proto-generated `RawBlock`, and use the derived serialization for that type. This is much cleaner and more maintainable than keeping Serde annotations for each sub-member of the data structure, because all of the serialization code is kept in one place, and there's only one validation path (the TryFrom conversion from RawBlock to Block) that applies to both kinds of serialization. * tendermint: simpler transaction modeling in Block This changes the Block type to hold the transactions as a plain `Vec>`, rather than as a custom `abci::transaction::Data` type (which is itself a wrapper for an `Option>`, the `Transaction` type being a wrapper for a `Vec`). This also updates the `Block` getter functions; it's not clear (to me) why they're there, since they access the public fields and aren't used anywhere else. * rpc: take over tendermint::abci The existing contents of the `tendermint::abci` module note that they're only for the purpose of implementing the RPC endpoints, not a general ABCI implementation. Moving that code from the `tendermint` crate to the `tendermint-rpc` crate decouples the RPC interface from improvements to the ABCI domain modeling. Eventually, it would be good to eliminate this code and align it with the new ABCI domain types. * tendermint: add ABCI domain types. These types mirror the generated types in tendermint_proto, but have better naming. The documentation for each request type is adapted from the ABCI Methods and Types spec document. However, the same logical request may appear three times, as a struct with the request data, as a Request variant, and as a CategoryRequest variant. To avoid duplication, this PR uses the `#[doc = include_str!(...)]` functionality stabilized in Rust 1.54 to keep common definitions of the documentation. * tendermint: eliminate &'static str errors in ABCI domain types. * Merge `abci::params::ConsensusParams` with `consensus::Params`. The code in the `abci` module had more complete documentation from the ABCI docs, so I copied it onto the existing structure. * Add hex encoding Serde attribute to Sr25519 keys. * Replace integers with `block::Height`, `vote::Power` * Replace integer with block::Round * Fix tools build by using correct imports Signed-off-by: Thane Thomson * Fix clippy complaints in tools Signed-off-by: Thane Thomson * Fix clippy warning Signed-off-by: Thane Thomson * Fix clippy lints Signed-off-by: Thane Thomson * Fix more clippy lints Signed-off-by: Thane Thomson * Fix deprecation notices from ed25519 crate Signed-off-by: Thane Thomson * Regenerate protos for Tendermint v0.35.0 Signed-off-by: Thane Thomson * Fix raw bytes conversion in tests/docs Signed-off-by: Thane Thomson * Add Tendermint v0.35.0 Docker config Signed-off-by: Thane Thomson * Add Tendermint v0.35.0 Docker image for ABCI integration testing Signed-off-by: Thane Thomson * Remove RPC deserialization tests The support files for these tests were manually generated some time ago. We should rather favour testing with the `kvstore_fixtures` tests, whose fixtures are automatically generated by our rpc-probe tool. Signed-off-by: Thane Thomson * Reformat Docker folder readme Signed-off-by: Thane Thomson * Bump version of Tendermint used in ABCI integration test Signed-off-by: Thane Thomson * Bump version of Tendermint used in rpc probe Signed-off-by: Thane Thomson * Bump version of Tendermint used in kvstore integration test Signed-off-by: Thane Thomson * Bump version of Tendermint used in proto-compiler Signed-off-by: Thane Thomson * Regenerate kvstore fixtures with rpc-probe for Tendermint v0.35.0 Signed-off-by: Thane Thomson * Update kvstore integration test to accommodate newly generated fixtures Signed-off-by: Thane Thomson * Update RPC tests and data structures to accommodate Tendermint v0.35.0 changes Signed-off-by: Thane Thomson * Update ABCI encoding scheme to accommodate breaking change in https://github.com/tendermint/tendermint/issues/5783 Signed-off-by: Thane Thomson * Bump Tendermint version in GitHub Actions kvstore integration test Signed-off-by: Thane Thomson * Add changelog entries to capture breaking changes Signed-off-by: Thane Thomson * Change tx hash encoding from base64 to hex and update tests Signed-off-by: Thane Thomson * Add changelog entry for /tx endpoint change Signed-off-by: Thane Thomson Co-authored-by: Henry de Valence Co-authored-by: Henry de Valence --- .../breaking-changes/862-035-tendermint.md | 2 + .../breaking-changes/862-abci-domain-types.md | 2 + .../862-abci-wire-protocol.md | 3 + .../breaking-changes/862-rpc-event-events.md | 5 + .../breaking-changes/862-rpc-tx-hash-hex.md | 3 + .github/workflows/test.yml | 2 +- abci/src/application.rs | 11 +- abci/src/application/kvstore.rs | 43 +- abci/src/client.rs | 12 +- abci/src/codec.rs | 17 +- abci/tests/kvstore_app.rs | 6 +- light-client/src/evidence.rs | 2 +- light-client/src/tests.rs | 2 +- p2p/src/secret_connection.rs | 2 +- proto/Cargo.toml | 2 +- proto/src/chrono.rs | 53 + proto/src/lib.rs | 1 + proto/src/prost/tendermint.abci.rs | 193 +- ....blockchain.rs => tendermint.blocksync.rs} | 0 proto/src/prost/tendermint.crypto.rs | 5 +- proto/src/prost/tendermint.p2p.rs | 85 +- proto/src/prost/tendermint.privval.rs | 10 + proto/src/prost/tendermint.statesync.rs | 32 +- proto/src/prost/tendermint.store.rs | 7 - proto/src/prost/tendermint.types.rs | 136 +- proto/src/prost/tendermint.version.rs | 10 - proto/src/tendermint.rs | 10 +- rpc/Cargo.toml | 1 + rpc/src/abci.rs | 34 + {tendermint => rpc}/src/abci/code.rs | 12 +- {tendermint => rpc}/src/abci/data.rs | 2 +- {tendermint => rpc}/src/abci/gas.rs | 2 +- {tendermint => rpc}/src/abci/info.rs | 0 {tendermint => rpc}/src/abci/log.rs | 0 {tendermint => rpc}/src/abci/path.rs | 2 +- {tendermint => rpc}/src/abci/responses.rs | 2 +- {tendermint => rpc}/src/abci/tag.rs | 32 +- {tendermint => rpc}/src/abci/transaction.rs | 0 .../src/abci/transaction/hash.rs | 2 +- rpc/src/client.rs | 2 +- rpc/src/client/bin/main.rs | 3 +- rpc/src/client/transport/mock.rs | 24 +- rpc/src/client/transport/router.rs | 10 +- rpc/src/client/transport/websocket.rs | 14 +- rpc/src/endpoint/abci_info.rs | 7 +- rpc/src/endpoint/abci_query.rs | 2 +- rpc/src/endpoint/block_results.rs | 3 +- rpc/src/endpoint/broadcast/tx_async.rs | 2 +- rpc/src/endpoint/broadcast/tx_commit.rs | 8 +- rpc/src/endpoint/broadcast/tx_sync.rs | 2 +- rpc/src/endpoint/evidence.rs | 3 +- rpc/src/endpoint/net_info.rs | 2 +- rpc/src/endpoint/tx.rs | 8 +- rpc/src/event.rs | 9 +- rpc/src/lib.rs | 1 + rpc/tests/kvstore_fixtures.rs | 266 +- .../kvstore_fixtures/incoming/abci_info.json | 4 +- .../abci_query_with_existing_key.json | 4 +- .../abci_query_with_non_existent_key.json | 4 +- .../incoming/block_at_height_0.json | 8 +- .../incoming/block_at_height_1.json | 14 +- .../incoming/block_at_height_10.json | 30 +- .../incoming/block_results_at_height_10.json | 3 +- .../incoming/block_search.json | 546 +- .../incoming/blockchain_from_1_to_10.json | 188 +- .../incoming/broadcast_tx_async.json | 5 +- .../incoming/broadcast_tx_commit.json | 25 +- .../incoming/broadcast_tx_sync.json | 5 +- .../incoming/commit_at_height_10.json | 28 +- .../incoming/consensus_params.json | 9 +- .../incoming/consensus_state.json | 8 +- .../kvstore_fixtures/incoming/genesis.json | 12 +- .../kvstore_fixtures/incoming/net_info.json | 4 +- .../kvstore_fixtures/incoming/status.json | 34 +- .../incoming/subscribe_malformed.json | 2 +- .../incoming/subscribe_newblock_0.json | 59 +- .../incoming/subscribe_newblock_1.json | 57 +- .../incoming/subscribe_newblock_2.json | 57 +- .../incoming/subscribe_newblock_3.json | 57 +- .../incoming/subscribe_newblock_4.json | 57 +- .../incoming/subscribe_txs.json | 2 +- .../incoming/subscribe_txs_0.json | 103 +- .../incoming/subscribe_txs_1.json | 103 +- .../incoming/subscribe_txs_2.json | 103 +- .../incoming/subscribe_txs_3.json | 103 +- .../incoming/subscribe_txs_4.json | 103 +- .../subscribe_txs_broadcast_tx_0.json | 5 +- .../subscribe_txs_broadcast_tx_1.json | 5 +- .../subscribe_txs_broadcast_tx_2.json | 5 +- .../subscribe_txs_broadcast_tx_3.json | 5 +- .../subscribe_txs_broadcast_tx_4.json | 5 +- .../subscribe_txs_broadcast_tx_5.json | 5 +- .../incoming/{tx.json => tx_no_prove.json} | 26 +- .../kvstore_fixtures/incoming/tx_prove.json | 58 + .../incoming/tx_search_no_prove.json | 146 +- .../incoming/tx_search_with_prove.json | 146 +- .../kvstore_fixtures/outgoing/abci_info.json | 2 +- .../abci_query_with_existing_key.json | 2 +- .../abci_query_with_non_existent_key.json | 2 +- .../outgoing/block_at_height_0.json | 2 +- .../outgoing/block_at_height_1.json | 2 +- .../outgoing/block_at_height_10.json | 2 +- .../outgoing/block_results_at_height_10.json | 2 +- .../outgoing/block_search.json | 2 +- .../outgoing/blockchain_from_1_to_10.json | 2 +- .../outgoing/broadcast_tx_async.json | 2 +- .../outgoing/broadcast_tx_commit.json | 2 +- .../outgoing/broadcast_tx_sync.json | 2 +- .../outgoing/commit_at_height_10.json | 2 +- .../outgoing/consensus_params.json | 2 +- .../outgoing/consensus_state.json | 2 +- .../kvstore_fixtures/outgoing/genesis.json | 2 +- .../kvstore_fixtures/outgoing/net_info.json | 2 +- .../kvstore_fixtures/outgoing/status.json | 2 +- .../outgoing/subscribe_malformed.json | 2 +- .../outgoing/subscribe_newblock.json | 2 +- .../outgoing/subscribe_txs.json | 2 +- .../subscribe_txs_broadcast_tx_0.json | 2 +- .../subscribe_txs_broadcast_tx_1.json | 2 +- .../subscribe_txs_broadcast_tx_2.json | 2 +- .../subscribe_txs_broadcast_tx_3.json | 2 +- .../subscribe_txs_broadcast_tx_4.json | 2 +- .../subscribe_txs_broadcast_tx_5.json | 2 +- rpc/tests/kvstore_fixtures/outgoing/tx.json | 9 - .../outgoing/tx_no_prove.json | 9 + .../kvstore_fixtures/outgoing/tx_prove.json | 9 + .../outgoing/tx_search_no_prove.json | 2 +- .../outgoing/tx_search_with_prove.json | 2 +- rpc/tests/parse_response.rs | 512 - rpc/tests/support/abci_info.json | 13 - rpc/tests/support/abci_query.json | 28 - rpc/tests/support/block.json | 65 - rpc/tests/support/block_empty_block_id.json | 120 - rpc/tests/support/block_results.json | 118 - rpc/tests/support/block_with_evidences.json | 112 - rpc/tests/support/blockchain.json | 389 - rpc/tests/support/broadcast_tx_async.json | 10 - rpc/tests/support/broadcast_tx_commit.json | 104 - .../broadcast_tx_commit_null_data.json | 18 - rpc/tests/support/broadcast_tx_sync.json | 10 - rpc/tests/support/broadcast_tx_sync_int.json | 10 - rpc/tests/support/commit.json | 53 - rpc/tests/support/commit_1.json | 53 - rpc/tests/support/consensus_state.json | 32 - rpc/tests/support/error.json | 9 - rpc/tests/support/event_new_block_1.json | 73 - rpc/tests/support/event_new_block_2.json | 73 - rpc/tests/support/event_new_block_3.json | 73 - rpc/tests/support/first_block.json | 58 - rpc/tests/support/genesis.json | 19185 ---------------- rpc/tests/support/health.json | 5 - rpc/tests/support/net_info.json | 238 - rpc/tests/support/status.json | 38 - rpc/tests/support/tx_no_prove.json | 101 - rpc/tests/support/tx_search_no_prove.json | 345 - rpc/tests/support/tx_search_with_prove.json | 437 - rpc/tests/support/tx_with_prove.json | 111 - rpc/tests/support/validators.json | 595 - tendermint/Cargo.toml | 2 +- tendermint/src/abci.rs | 68 +- .../abci/doc/request-applysnapshotchunk.md | 21 + tendermint/src/abci/doc/request-beginblock.md | 6 + tendermint/src/abci/doc/request-checktx.md | 11 + tendermint/src/abci/doc/request-commit.md | 4 + tendermint/src/abci/doc/request-delivertx.md | 3 + tendermint/src/abci/doc/request-echo.md | 3 + tendermint/src/abci/doc/request-endblock.md | 5 + tendermint/src/abci/doc/request-flush.md | 3 + tendermint/src/abci/doc/request-info.md | 3 + tendermint/src/abci/doc/request-initchain.md | 3 + .../src/abci/doc/request-listsnapshots.md | 3 + .../src/abci/doc/request-loadsnapshotchunk.md | 3 + .../src/abci/doc/request-offersnapshot.md | 20 + tendermint/src/abci/doc/request-query.md | 3 + .../abci/doc/response-applysnapshotchunk.md | 7 + .../src/abci/doc/response-beginblock.md | 3 + tendermint/src/abci/doc/response-checktx.md | 3 + tendermint/src/abci/doc/response-commit.md | 3 + tendermint/src/abci/doc/response-delivertx.md | 4 + tendermint/src/abci/doc/response-echo.md | 3 + tendermint/src/abci/doc/response-endblock.md | 3 + tendermint/src/abci/doc/response-exception.md | 1 + tendermint/src/abci/doc/response-flush.md | 3 + tendermint/src/abci/doc/response-info.md | 3 + tendermint/src/abci/doc/response-initchain.md | 3 + .../src/abci/doc/response-listsnapshots.md | 3 + .../abci/doc/response-loadsnapshotchunk.md | 3 + .../src/abci/doc/response-offersnapshot.md | 7 + tendermint/src/abci/doc/response-query.md | 3 + tendermint/src/abci/event.rs | 183 + tendermint/src/abci/kind.rs | 23 + tendermint/src/abci/request.rs | 306 + .../src/abci/request/apply_snapshot_chunk.rs | 70 + tendermint/src/abci/request/begin_block.rs | 78 + tendermint/src/abci/request/check_tx.rs | 71 + tendermint/src/abci/request/deliver_tx.rs | 34 + tendermint/src/abci/request/echo.rs | 36 + tendermint/src/abci/request/end_block.rs | 36 + tendermint/src/abci/request/info.rs | 48 + tendermint/src/abci/request/init_chain.rs | 74 + .../src/abci/request/load_snapshot_chunk.rs | 44 + tendermint/src/abci/request/offer_snapshot.rs | 52 + tendermint/src/abci/request/query.rs | 63 + tendermint/src/abci/response.rs | 289 + .../src/abci/response/apply_snapshot_chunk.rs | 88 + tendermint/src/abci/response/begin_block.rs | 42 + tendermint/src/abci/response/check_tx.rs | 92 + tendermint/src/abci/response/commit.rs | 45 + tendermint/src/abci/response/deliver_tx.rs | 80 + tendermint/src/abci/response/echo.rs | 36 + tendermint/src/abci/response/end_block.rs | 63 + tendermint/src/abci/response/exception.rs | 36 + tendermint/src/abci/response/info.rs | 55 + tendermint/src/abci/response/init_chain.rs | 62 + .../src/abci/response/list_snapshots.rs | 46 + .../src/abci/response/load_snapshot_chunk.rs | 41 + .../src/abci/response/offer_snapshot.rs | 63 + tendermint/src/abci/response/query.rs | 81 + tendermint/src/abci/types.rs | 310 + tendermint/src/block.rs | 15 +- tendermint/src/block/size.rs | 2 +- tendermint/src/consensus/params.rs | 27 +- tendermint/src/error.rs | 63 +- tendermint/src/evidence.rs | 17 +- tendermint/src/hash.rs | 6 +- tendermint/src/prelude.rs | 3 + tendermint/src/serializers.rs | 1 - tendermint/src/serializers/hash_base64.rs | 33 - tools/abci-test/Makefile.toml | 15 +- tools/abci-test/src/main.rs | 2 +- tools/docker/README.md | 64 +- tools/docker/abci-harness-0.35.0/.gitignore | 1 + tools/docker/abci-harness-0.35.0/Dockerfile | 44 + tools/docker/abci-harness-0.35.0/entrypoint | 39 + tools/docker/tendermint-0.35.0/.gitignore | 1 + tools/docker/tendermint-0.35.0/Dockerfile | 33 + tools/docker/tendermint-0.35.0/entrypoint | 22 + tools/kvstore-test/Makefile.toml | 2 +- tools/kvstore-test/tests/light-client.rs | 7 +- tools/kvstore-test/tests/tendermint.rs | 13 +- tools/proto-compiler/src/constants.rs | 9 +- tools/proto-compiler/src/functions.rs | 16 +- tools/proto-compiler/src/main.rs | 6 +- tools/rpc-probe/Makefile.toml | 4 +- tools/rpc-probe/src/client.rs | 17 +- tools/rpc-probe/src/error.rs | 18 +- tools/rpc-probe/src/kvstore.rs | 11 + tools/rpc-probe/src/plan.rs | 8 +- tools/rpc-probe/src/quick.rs | 10 + 249 files changed, 5206 insertions(+), 24390 deletions(-) create mode 100644 .changelog/unreleased/breaking-changes/862-035-tendermint.md create mode 100644 .changelog/unreleased/breaking-changes/862-abci-domain-types.md create mode 100644 .changelog/unreleased/breaking-changes/862-abci-wire-protocol.md create mode 100644 .changelog/unreleased/breaking-changes/862-rpc-event-events.md create mode 100644 .changelog/unreleased/breaking-changes/862-rpc-tx-hash-hex.md create mode 100644 proto/src/chrono.rs rename proto/src/prost/{tendermint.blockchain.rs => tendermint.blocksync.rs} (100%) delete mode 100644 proto/src/prost/tendermint.store.rs create mode 100644 rpc/src/abci.rs rename {tendermint => rpc}/src/abci/code.rs (91%) rename {tendermint => rpc}/src/abci/data.rs (94%) rename {tendermint => rpc}/src/abci/gas.rs (98%) rename {tendermint => rpc}/src/abci/info.rs (100%) rename {tendermint => rpc}/src/abci/log.rs (100%) rename {tendermint => rpc}/src/abci/path.rs (94%) rename {tendermint => rpc}/src/abci/responses.rs (98%) rename {tendermint => rpc}/src/abci/tag.rs (60%) rename {tendermint => rpc}/src/abci/transaction.rs (100%) rename {tendermint => rpc}/src/abci/transaction/hash.rs (98%) rename rpc/tests/kvstore_fixtures/incoming/{tx.json => tx_no_prove.json} (50%) create mode 100644 rpc/tests/kvstore_fixtures/incoming/tx_prove.json delete mode 100644 rpc/tests/kvstore_fixtures/outgoing/tx.json create mode 100644 rpc/tests/kvstore_fixtures/outgoing/tx_no_prove.json create mode 100644 rpc/tests/kvstore_fixtures/outgoing/tx_prove.json delete mode 100644 rpc/tests/parse_response.rs delete mode 100644 rpc/tests/support/abci_info.json delete mode 100644 rpc/tests/support/abci_query.json delete mode 100644 rpc/tests/support/block.json delete mode 100644 rpc/tests/support/block_empty_block_id.json delete mode 100644 rpc/tests/support/block_results.json delete mode 100644 rpc/tests/support/block_with_evidences.json delete mode 100644 rpc/tests/support/blockchain.json delete mode 100644 rpc/tests/support/broadcast_tx_async.json delete mode 100644 rpc/tests/support/broadcast_tx_commit.json delete mode 100644 rpc/tests/support/broadcast_tx_commit_null_data.json delete mode 100644 rpc/tests/support/broadcast_tx_sync.json delete mode 100644 rpc/tests/support/broadcast_tx_sync_int.json delete mode 100644 rpc/tests/support/commit.json delete mode 100644 rpc/tests/support/commit_1.json delete mode 100644 rpc/tests/support/consensus_state.json delete mode 100644 rpc/tests/support/error.json delete mode 100644 rpc/tests/support/event_new_block_1.json delete mode 100644 rpc/tests/support/event_new_block_2.json delete mode 100644 rpc/tests/support/event_new_block_3.json delete mode 100644 rpc/tests/support/first_block.json delete mode 100644 rpc/tests/support/genesis.json delete mode 100644 rpc/tests/support/health.json delete mode 100644 rpc/tests/support/net_info.json delete mode 100644 rpc/tests/support/status.json delete mode 100644 rpc/tests/support/tx_no_prove.json delete mode 100644 rpc/tests/support/tx_search_no_prove.json delete mode 100644 rpc/tests/support/tx_search_with_prove.json delete mode 100644 rpc/tests/support/tx_with_prove.json delete mode 100644 rpc/tests/support/validators.json create mode 100644 tendermint/src/abci/doc/request-applysnapshotchunk.md create mode 100644 tendermint/src/abci/doc/request-beginblock.md create mode 100644 tendermint/src/abci/doc/request-checktx.md create mode 100644 tendermint/src/abci/doc/request-commit.md create mode 100644 tendermint/src/abci/doc/request-delivertx.md create mode 100644 tendermint/src/abci/doc/request-echo.md create mode 100644 tendermint/src/abci/doc/request-endblock.md create mode 100644 tendermint/src/abci/doc/request-flush.md create mode 100644 tendermint/src/abci/doc/request-info.md create mode 100644 tendermint/src/abci/doc/request-initchain.md create mode 100644 tendermint/src/abci/doc/request-listsnapshots.md create mode 100644 tendermint/src/abci/doc/request-loadsnapshotchunk.md create mode 100644 tendermint/src/abci/doc/request-offersnapshot.md create mode 100644 tendermint/src/abci/doc/request-query.md create mode 100644 tendermint/src/abci/doc/response-applysnapshotchunk.md create mode 100644 tendermint/src/abci/doc/response-beginblock.md create mode 100644 tendermint/src/abci/doc/response-checktx.md create mode 100644 tendermint/src/abci/doc/response-commit.md create mode 100644 tendermint/src/abci/doc/response-delivertx.md create mode 100644 tendermint/src/abci/doc/response-echo.md create mode 100644 tendermint/src/abci/doc/response-endblock.md create mode 100644 tendermint/src/abci/doc/response-exception.md create mode 100644 tendermint/src/abci/doc/response-flush.md create mode 100644 tendermint/src/abci/doc/response-info.md create mode 100644 tendermint/src/abci/doc/response-initchain.md create mode 100644 tendermint/src/abci/doc/response-listsnapshots.md create mode 100644 tendermint/src/abci/doc/response-loadsnapshotchunk.md create mode 100644 tendermint/src/abci/doc/response-offersnapshot.md create mode 100644 tendermint/src/abci/doc/response-query.md create mode 100644 tendermint/src/abci/event.rs create mode 100644 tendermint/src/abci/kind.rs create mode 100644 tendermint/src/abci/request.rs create mode 100644 tendermint/src/abci/request/apply_snapshot_chunk.rs create mode 100644 tendermint/src/abci/request/begin_block.rs create mode 100644 tendermint/src/abci/request/check_tx.rs create mode 100644 tendermint/src/abci/request/deliver_tx.rs create mode 100644 tendermint/src/abci/request/echo.rs create mode 100644 tendermint/src/abci/request/end_block.rs create mode 100644 tendermint/src/abci/request/info.rs create mode 100644 tendermint/src/abci/request/init_chain.rs create mode 100644 tendermint/src/abci/request/load_snapshot_chunk.rs create mode 100644 tendermint/src/abci/request/offer_snapshot.rs create mode 100644 tendermint/src/abci/request/query.rs create mode 100644 tendermint/src/abci/response.rs create mode 100644 tendermint/src/abci/response/apply_snapshot_chunk.rs create mode 100644 tendermint/src/abci/response/begin_block.rs create mode 100644 tendermint/src/abci/response/check_tx.rs create mode 100644 tendermint/src/abci/response/commit.rs create mode 100644 tendermint/src/abci/response/deliver_tx.rs create mode 100644 tendermint/src/abci/response/echo.rs create mode 100644 tendermint/src/abci/response/end_block.rs create mode 100644 tendermint/src/abci/response/exception.rs create mode 100644 tendermint/src/abci/response/info.rs create mode 100644 tendermint/src/abci/response/init_chain.rs create mode 100644 tendermint/src/abci/response/list_snapshots.rs create mode 100644 tendermint/src/abci/response/load_snapshot_chunk.rs create mode 100644 tendermint/src/abci/response/offer_snapshot.rs create mode 100644 tendermint/src/abci/response/query.rs create mode 100644 tendermint/src/abci/types.rs delete mode 100644 tendermint/src/serializers/hash_base64.rs create mode 100644 tools/docker/abci-harness-0.35.0/.gitignore create mode 100644 tools/docker/abci-harness-0.35.0/Dockerfile create mode 100755 tools/docker/abci-harness-0.35.0/entrypoint create mode 100644 tools/docker/tendermint-0.35.0/.gitignore create mode 100644 tools/docker/tendermint-0.35.0/Dockerfile create mode 100755 tools/docker/tendermint-0.35.0/entrypoint diff --git a/.changelog/unreleased/breaking-changes/862-035-tendermint.md b/.changelog/unreleased/breaking-changes/862-035-tendermint.md new file mode 100644 index 000000000..2aca57362 --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-035-tendermint.md @@ -0,0 +1,2 @@ +- Updated integration testing to test against Tendermint v0.35.0 + ([#862](https://github.com/informalsystems/tendermint-rs/issues/862)) \ No newline at end of file diff --git a/.changelog/unreleased/breaking-changes/862-abci-domain-types.md b/.changelog/unreleased/breaking-changes/862-abci-domain-types.md new file mode 100644 index 000000000..220b52dc6 --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-abci-domain-types.md @@ -0,0 +1,2 @@ +- `[tendermint]` Added domain types for ABCI + ([#862](https://github.com/informalsystems/tendermint-rs/issues/862)) \ No newline at end of file diff --git a/.changelog/unreleased/breaking-changes/862-abci-wire-protocol.md b/.changelog/unreleased/breaking-changes/862-abci-wire-protocol.md new file mode 100644 index 000000000..48248614a --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-abci-wire-protocol.md @@ -0,0 +1,3 @@ +- `[tendermint-abci]` Changed low-level wire encoding protocol to + accommodate + ([#862](https://github.com/informalsystems/tendermint-rs/issues/862)) \ No newline at end of file diff --git a/.changelog/unreleased/breaking-changes/862-rpc-event-events.md b/.changelog/unreleased/breaking-changes/862-rpc-event-events.md new file mode 100644 index 000000000..9b35a6b37 --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-rpc-event-events.md @@ -0,0 +1,5 @@ +- `[tendermint-rpc]` The `event::Event::events` field is now represented as + `Option>` as opposed to `Option>>` to accommodate breaking change in Tendermint v0.35.0 + subscription interface ([#862](https://github.com/informalsystems/tendermint- + rs/issues/862)) \ No newline at end of file diff --git a/.changelog/unreleased/breaking-changes/862-rpc-tx-hash-hex.md b/.changelog/unreleased/breaking-changes/862-rpc-tx-hash-hex.md new file mode 100644 index 000000000..bfaf2d85b --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-rpc-tx-hash-hex.md @@ -0,0 +1,3 @@ +- `[tendermint-rpc]` The `/tx` endpoint now encodes + the `hash` parameter as hexadecimal instead of base64 + ([#862](https://github.com/informalsystems/tendermint-rs/issues/862)) \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8ad3e8ea8..fe25cb29f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -125,7 +125,7 @@ jobs: runs-on: ubuntu-latest services: tendermint: - image: informaldev/tendermint:0.34.13 + image: informaldev/tendermint:0.35.0 ports: - 26656:26656 - 26657:26657 diff --git a/abci/src/application.rs b/abci/src/application.rs index b4a848608..5cfe154d6 100644 --- a/abci/src/application.rs +++ b/abci/src/application.rs @@ -9,11 +9,11 @@ use tendermint_proto::abci::request::Value; use tendermint_proto::abci::{ response, Request, RequestApplySnapshotChunk, RequestBeginBlock, RequestCheckTx, RequestDeliverTx, RequestEcho, RequestEndBlock, RequestInfo, RequestInitChain, - RequestLoadSnapshotChunk, RequestOfferSnapshot, RequestQuery, RequestSetOption, Response, + RequestLoadSnapshotChunk, RequestOfferSnapshot, RequestQuery, Response, ResponseApplySnapshotChunk, ResponseBeginBlock, ResponseCheckTx, ResponseCommit, ResponseDeliverTx, ResponseEcho, ResponseEndBlock, ResponseFlush, ResponseInfo, ResponseInitChain, ResponseListSnapshots, ResponseLoadSnapshotChunk, ResponseOfferSnapshot, - ResponseQuery, ResponseSetOption, + ResponseQuery, }; /// An ABCI application. @@ -77,12 +77,6 @@ pub trait Application: Send + Clone + 'static { Default::default() } - /// Allows the Tendermint node to request that the application set an - /// option to a particular value. - fn set_option(&self, _request: RequestSetOption) -> ResponseSetOption { - Default::default() - } - /// Used during state sync to discover available snapshots on peers. fn list_snapshots(&self) -> ResponseListSnapshots { Default::default() @@ -124,7 +118,6 @@ impl RequestDispatcher for A { Value::Echo(req) => response::Value::Echo(self.echo(req)), Value::Flush(_) => response::Value::Flush(self.flush()), Value::Info(req) => response::Value::Info(self.info(req)), - Value::SetOption(req) => response::Value::SetOption(self.set_option(req)), Value::InitChain(req) => response::Value::InitChain(self.init_chain(req)), Value::Query(req) => response::Value::Query(self.query(req)), Value::BeginBlock(req) => response::Value::BeginBlock(self.begin_block(req)), diff --git a/abci/src/application/kvstore.rs b/abci/src/application/kvstore.rs index 57a687345..5547f2a86 100644 --- a/abci/src/application/kvstore.rs +++ b/abci/src/application/kvstore.rs @@ -1,6 +1,6 @@ //! In-memory key/value store ABCI application. -use crate::codec::{encode_varint, MAX_VARINT_LENGTH}; +use crate::codec::MAX_VARINT_LENGTH; use crate::{Application, Error}; use bytes::BytesMut; use std::collections::HashMap; @@ -44,7 +44,7 @@ use tracing::{debug, info}; /// // Deliver a transaction and then commit the transaction /// client /// .deliver_tx(RequestDeliverTx { -/// tx: "test-key=test-value".as_bytes().to_owned(), +/// tx: "test-key=test-value".into(), /// }) /// .unwrap(); /// client.commit().unwrap(); @@ -52,7 +52,7 @@ use tracing::{debug, info}; /// // We should be able to query for the data we just delivered above /// let res = client /// .query(RequestQuery { -/// data: "test-key".as_bytes().to_owned(), +/// data: "test-key".into(), /// path: "".to_string(), /// height: 0, /// prove: false, @@ -123,17 +123,17 @@ impl Application for KeyValueStoreApp { version: "0.1.0".to_string(), app_version: 1, last_block_height, - last_block_app_hash, + last_block_app_hash: last_block_app_hash.into(), } } fn query(&self, request: RequestQuery) -> ResponseQuery { - let key = match String::from_utf8(request.data.clone()) { + let key = match std::str::from_utf8(&request.data) { Ok(s) => s, Err(e) => panic!("Failed to intepret key as UTF-8: {}", e), }; debug!("Attempting to get key: {}", key); - match self.get(key.clone()) { + match self.get(key) { Ok((height, value_opt)) => match value_opt { Some(value) => ResponseQuery { code: 0, @@ -141,7 +141,7 @@ impl Application for KeyValueStoreApp { info: "".to_string(), index: 0, key: request.data, - value: value.into_bytes(), + value: value.into_bytes().into(), proof_ops: None, height, codespace: "".to_string(), @@ -152,7 +152,7 @@ impl Application for KeyValueStoreApp { info: "".to_string(), index: 0, key: request.data, - value: vec![], + value: Default::default(), proof_ops: None, height, codespace: "".to_string(), @@ -165,28 +165,31 @@ impl Application for KeyValueStoreApp { fn check_tx(&self, _request: RequestCheckTx) -> ResponseCheckTx { ResponseCheckTx { code: 0, - data: vec![], + data: Default::default(), log: "".to_string(), info: "".to_string(), gas_wanted: 1, gas_used: 0, events: vec![], codespace: "".to_string(), + mempool_error: "".to_string(), + priority: 0, + sender: "".to_string(), } } fn deliver_tx(&self, request: RequestDeliverTx) -> ResponseDeliverTx { - let tx = String::from_utf8(request.tx).unwrap(); + let tx = std::str::from_utf8(&request.tx).unwrap(); let tx_parts = tx.split('=').collect::>(); let (key, value) = if tx_parts.len() == 2 { (tx_parts[0], tx_parts[1]) } else { - (tx.as_ref(), tx.as_ref()) + (tx, tx) }; let _ = self.set(key, value).unwrap(); ResponseDeliverTx { code: 0, - data: vec![], + data: Default::default(), log: "".to_string(), info: "".to_string(), gas_wanted: 0, @@ -195,18 +198,18 @@ impl Application for KeyValueStoreApp { r#type: "app".to_string(), attributes: vec![ EventAttribute { - key: "key".as_bytes().to_owned(), - value: key.as_bytes().to_owned(), + key: "key".to_string(), + value: key.to_string(), index: true, }, EventAttribute { - key: "index_key".as_bytes().to_owned(), - value: "index is working".as_bytes().to_owned(), + key: "index_key".to_string(), + value: "index is working".to_string(), index: true, }, EventAttribute { - key: "noindex_key".as_bytes().to_owned(), - value: "index is working".as_bytes().to_owned(), + key: "noindex_key".to_string(), + value: "index is working".to_string(), index: false, }, ], @@ -221,7 +224,7 @@ impl Application for KeyValueStoreApp { let (height, app_hash) = channel_recv(&result_rx).unwrap(); info!("Committed height {}", height); ResponseCommit { - data: app_hash, + data: app_hash.into(), retain_height: height - 1, } } @@ -278,7 +281,7 @@ impl KeyValueStoreDriver { // As in the Go-based key/value store, simply encode the number of // items as the "app hash" let mut app_hash = BytesMut::with_capacity(MAX_VARINT_LENGTH); - encode_varint(self.store.len() as u64, &mut app_hash); + prost::encoding::encode_varint(self.store.len() as u64, &mut app_hash); self.app_hash = app_hash.to_vec(); self.height += 1; channel_send(&result_tx, (self.height, self.app_hash.clone())) diff --git a/abci/src/client.rs b/abci/src/client.rs index c5146f88a..c2e11ddba 100644 --- a/abci/src/client.rs +++ b/abci/src/client.rs @@ -7,10 +7,9 @@ use tendermint_proto::abci::{ request, response, RequestApplySnapshotChunk, RequestBeginBlock, RequestCheckTx, RequestCommit, RequestDeliverTx, RequestEndBlock, RequestFlush, RequestInfo, RequestInitChain, RequestListSnapshots, RequestLoadSnapshotChunk, RequestOfferSnapshot, RequestQuery, - RequestSetOption, ResponseApplySnapshotChunk, ResponseBeginBlock, ResponseCheckTx, - ResponseCommit, ResponseDeliverTx, ResponseEndBlock, ResponseFlush, ResponseInfo, - ResponseInitChain, ResponseListSnapshots, ResponseLoadSnapshotChunk, ResponseOfferSnapshot, - ResponseQuery, ResponseSetOption, + ResponseApplySnapshotChunk, ResponseBeginBlock, ResponseCheckTx, ResponseCommit, + ResponseDeliverTx, ResponseEndBlock, ResponseFlush, ResponseInfo, ResponseInitChain, + ResponseListSnapshots, ResponseLoadSnapshotChunk, ResponseOfferSnapshot, ResponseQuery, }; use tendermint_proto::abci::{Request, RequestEcho, ResponseEcho}; @@ -113,11 +112,6 @@ impl Client { perform!(self, Commit, RequestCommit {}) } - /// Request that the application set an option to a particular value. - pub fn set_option(&mut self, req: RequestSetOption) -> Result { - perform!(self, SetOption, req) - } - /// Used during state sync to discover available snapshots on peers. pub fn list_snapshots(&mut self) -> Result { perform!(self, ListSnapshots, RequestListSnapshots {}) diff --git a/abci/src/codec.rs b/abci/src/codec.rs index 170d384e6..25d702d31 100644 --- a/abci/src/codec.rs +++ b/abci/src/codec.rs @@ -127,7 +127,7 @@ where message.encode(&mut buf).map_err(Error::encode)?; let buf = buf.freeze(); - encode_varint(buf.len() as u64, &mut dst); + prost::encoding::encode_varint(buf.len() as u64, &mut dst); dst.put(buf); Ok(()) } @@ -139,11 +139,11 @@ where { let src_len = src.len(); let mut tmp = src.clone().freeze(); - let encoded_len = match decode_varint(&mut tmp) { + let encoded_len = match prost::encoding::decode_varint(&mut tmp) { Ok(len) => len, // We've potentially only received a partial length delimiter Err(_) if src_len <= MAX_VARINT_LENGTH => return Ok(None), - Err(e) => return Err(e), + Err(e) => return Err(Error::decode(e)), }; let remaining = tmp.remaining() as u64; if remaining < encoded_len { @@ -161,14 +161,3 @@ where Ok(Some(res)) } } - -// encode_varint and decode_varint will be removed once -// https://github.com/tendermint/tendermint/issues/5783 lands in Tendermint. -pub fn encode_varint(val: u64, mut buf: &mut B) { - prost::encoding::encode_varint(val << 1, &mut buf); -} - -pub fn decode_varint(mut buf: &mut B) -> Result { - let len = prost::encoding::decode_varint(&mut buf).map_err(Error::decode)?; - Ok(len >> 1) -} diff --git a/abci/tests/kvstore_app.rs b/abci/tests/kvstore_app.rs index 62a1c51d6..8b415556a 100644 --- a/abci/tests/kvstore_app.rs +++ b/abci/tests/kvstore_app.rs @@ -24,19 +24,19 @@ mod kvstore_app_integration { client .deliver_tx(RequestDeliverTx { - tx: "test-key=test-value".as_bytes().to_owned(), + tx: "test-key=test-value".into(), }) .unwrap(); client.commit().unwrap(); let res = client .query(RequestQuery { - data: "test-key".as_bytes().to_owned(), + data: "test-key".into(), path: "".to_string(), height: 0, prove: false, }) .unwrap(); - assert_eq!(res.value, "test-value".as_bytes().to_owned()); + assert_eq!(res.value, "test-value".as_bytes()); } } diff --git a/light-client/src/evidence.rs b/light-client/src/evidence.rs index 279fb9501..3da3538d1 100644 --- a/light-client/src/evidence.rs +++ b/light-client/src/evidence.rs @@ -2,7 +2,7 @@ use crate::{components::io::IoError, types::PeerId}; -use tendermint::abci::transaction::Hash; +use tendermint_rpc::abci::transaction::Hash; use contracts::contract_trait; diff --git a/light-client/src/tests.rs b/light-client/src/tests.rs index 660c09a8b..093d4fa79 100644 --- a/light-client/src/tests.rs +++ b/light-client/src/tests.rs @@ -3,8 +3,8 @@ use crate::types::{Height, LightBlock, PeerId, SignedHeader, Time, TrustThreshold, ValidatorSet}; use serde::{Deserialize, Serialize}; -use tendermint::abci::transaction::Hash; use tendermint_rpc as rpc; +use tendermint_rpc::abci::transaction::Hash; use crate::components::clock::Clock; use crate::components::io::{AtHeight, Io, IoError}; diff --git a/p2p/src/secret_connection.rs b/p2p/src/secret_connection.rs index 18581a1b6..28c165891 100644 --- a/p2p/src/secret_connection.rs +++ b/p2p/src/secret_connection.rs @@ -185,7 +185,7 @@ impl Handshake { proto::crypto::public_key::Sum::Ed25519(ref bytes) => { ed25519::PublicKey::from_bytes(bytes).map_err(Error::signature) } - proto::crypto::public_key::Sum::Secp256k1(_) => Err(Error::unsupported_key()), + _ => Err(Error::unsupported_key()), }?; let remote_sig = diff --git a/proto/Cargo.toml b/proto/Cargo.toml index 6fdede136..3b836564e 100644 --- a/proto/Cargo.toml +++ b/proto/Cargo.toml @@ -19,7 +19,7 @@ all-features = true [dependencies] prost = { version = "0.9", default-features = false } prost-types = { version = "0.9", default-features = false } -bytes = { version = "1.0", default-features = false } +bytes = { version = "1.0", default-features = false, features = ["serde"] } serde = { version = "1.0", default-features = false, features = ["derive"] } serde_bytes = { version = "0.11", default-features = false, features = ["alloc"] } subtle-encoding = { version = "0.5", default-features = false, features = ["hex", "base64", "alloc"] } diff --git a/proto/src/chrono.rs b/proto/src/chrono.rs new file mode 100644 index 000000000..3b969f0f0 --- /dev/null +++ b/proto/src/chrono.rs @@ -0,0 +1,53 @@ +use core::convert::TryInto; + +use chrono::{DateTime, Duration, TimeZone, Utc}; + +use crate::google::protobuf as pb; + +impl From> for pb::Timestamp { + fn from(dt: DateTime) -> pb::Timestamp { + pb::Timestamp { + seconds: dt.timestamp(), + // This can exceed 1_000_000_000 in the case of a leap second, but + // even with a leap second it should be under 2_147_483_647. + nanos: dt + .timestamp_subsec_nanos() + .try_into() + .expect("timestamp_subsec_nanos bigger than i32::MAX"), + } + } +} + +impl From for DateTime { + fn from(ts: pb::Timestamp) -> DateTime { + Utc.timestamp(ts.seconds, ts.nanos as u32) + } +} + +// Note: we convert a protobuf::Duration into a chrono::Duration, not a +// std::time::Duration, because std::time::Durations are unsigned, but the +// protobuf duration is signed. + +impl From for pb::Duration { + fn from(d: Duration) -> pb::Duration { + // chrono's Duration stores the fractional part as `nanos: i32` + // internally but doesn't provide a way to access it, only a way to get + // the *total* number of nanoseconds. so we have to do this cool and fun + // hoop-jumping maneuver + let seconds = d.num_seconds(); + let nanos = (d - Duration::seconds(seconds)) + .num_nanoseconds() + .expect("we computed the fractional part, so there's no overflow") + .try_into() + .expect("the fractional part fits in i32"); + + pb::Duration { seconds, nanos } + } +} + +impl From for Duration { + fn from(d: pb::Duration) -> Duration { + // there's no constructor that supplies both at once + Duration::seconds(d.seconds) + Duration::nanoseconds(d.nanos as i64) + } +} diff --git a/proto/src/lib.rs b/proto/src/lib.rs index 018ea6216..f306f87ab 100644 --- a/proto/src/lib.rs +++ b/proto/src/lib.rs @@ -20,6 +20,7 @@ pub mod google { } } +mod chrono; mod error; #[allow(warnings)] mod tendermint; diff --git a/proto/src/prost/tendermint.abci.rs b/proto/src/prost/tendermint.abci.rs index 4e5142286..2a42bbd53 100644 --- a/proto/src/prost/tendermint.abci.rs +++ b/proto/src/prost/tendermint.abci.rs @@ -7,7 +7,7 @@ #[derive(Clone, PartialEq, ::prost::Message)] pub struct Request { - #[prost(oneof="request::Value", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15")] + #[prost(oneof="request::Value", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14")] pub value: ::core::option::Option, } /// Nested message and enum types in `Request`. @@ -21,28 +21,26 @@ pub mod request { #[prost(message, tag="3")] Info(super::RequestInfo), #[prost(message, tag="4")] - SetOption(super::RequestSetOption), - #[prost(message, tag="5")] InitChain(super::RequestInitChain), - #[prost(message, tag="6")] + #[prost(message, tag="5")] Query(super::RequestQuery), - #[prost(message, tag="7")] + #[prost(message, tag="6")] BeginBlock(super::RequestBeginBlock), - #[prost(message, tag="8")] + #[prost(message, tag="7")] CheckTx(super::RequestCheckTx), - #[prost(message, tag="9")] + #[prost(message, tag="8")] DeliverTx(super::RequestDeliverTx), - #[prost(message, tag="10")] + #[prost(message, tag="9")] EndBlock(super::RequestEndBlock), - #[prost(message, tag="11")] + #[prost(message, tag="10")] Commit(super::RequestCommit), - #[prost(message, tag="12")] + #[prost(message, tag="11")] ListSnapshots(super::RequestListSnapshots), - #[prost(message, tag="13")] + #[prost(message, tag="12")] OfferSnapshot(super::RequestOfferSnapshot), - #[prost(message, tag="14")] + #[prost(message, tag="13")] LoadSnapshotChunk(super::RequestLoadSnapshotChunk), - #[prost(message, tag="15")] + #[prost(message, tag="14")] ApplySnapshotChunk(super::RequestApplySnapshotChunk), } } @@ -62,14 +60,8 @@ pub struct RequestInfo { pub block_version: u64, #[prost(uint64, tag="3")] pub p2p_version: u64, -} -/// nondeterministic -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct RequestSetOption { - #[prost(string, tag="1")] - pub key: ::prost::alloc::string::String, - #[prost(string, tag="2")] - pub value: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub abci_version: ::prost::alloc::string::String, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestInitChain { @@ -78,18 +70,18 @@ pub struct RequestInitChain { #[prost(string, tag="2")] pub chain_id: ::prost::alloc::string::String, #[prost(message, optional, tag="3")] - pub consensus_params: ::core::option::Option, + pub consensus_params: ::core::option::Option, #[prost(message, repeated, tag="4")] pub validators: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="5")] - pub app_state_bytes: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="5")] + pub app_state_bytes: ::prost::bytes::Bytes, #[prost(int64, tag="6")] pub initial_height: i64, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestQuery { - #[prost(bytes="vec", tag="1")] - pub data: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub data: ::prost::bytes::Bytes, #[prost(string, tag="2")] pub path: ::prost::alloc::string::String, #[prost(int64, tag="3")] @@ -99,8 +91,8 @@ pub struct RequestQuery { } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestBeginBlock { - #[prost(bytes="vec", tag="1")] - pub hash: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub hash: ::prost::bytes::Bytes, #[prost(message, optional, tag="2")] pub header: ::core::option::Option, #[prost(message, optional, tag="3")] @@ -110,15 +102,15 @@ pub struct RequestBeginBlock { } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestCheckTx { - #[prost(bytes="vec", tag="1")] - pub tx: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub tx: ::prost::bytes::Bytes, #[prost(enumeration="CheckTxType", tag="2")] pub r#type: i32, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestDeliverTx { - #[prost(bytes="vec", tag="1")] - pub tx: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub tx: ::prost::bytes::Bytes, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestEndBlock { @@ -139,8 +131,8 @@ pub struct RequestOfferSnapshot { #[prost(message, optional, tag="1")] pub snapshot: ::core::option::Option, /// light client-verified app hash for snapshot height - #[prost(bytes="vec", tag="2")] - pub app_hash: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub app_hash: ::prost::bytes::Bytes, } /// loads a snapshot chunk #[derive(Clone, PartialEq, ::prost::Message)] @@ -157,8 +149,8 @@ pub struct RequestLoadSnapshotChunk { pub struct RequestApplySnapshotChunk { #[prost(uint32, tag="1")] pub index: u32, - #[prost(bytes="vec", tag="2")] - pub chunk: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub chunk: ::prost::bytes::Bytes, #[prost(string, tag="3")] pub sender: ::prost::alloc::string::String, } @@ -167,7 +159,7 @@ pub struct RequestApplySnapshotChunk { #[derive(Clone, PartialEq, ::prost::Message)] pub struct Response { - #[prost(oneof="response::Value", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16")] + #[prost(oneof="response::Value", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15")] pub value: ::core::option::Option, } /// Nested message and enum types in `Response`. @@ -183,28 +175,26 @@ pub mod response { #[prost(message, tag="4")] Info(super::ResponseInfo), #[prost(message, tag="5")] - SetOption(super::ResponseSetOption), - #[prost(message, tag="6")] InitChain(super::ResponseInitChain), - #[prost(message, tag="7")] + #[prost(message, tag="6")] Query(super::ResponseQuery), - #[prost(message, tag="8")] + #[prost(message, tag="7")] BeginBlock(super::ResponseBeginBlock), - #[prost(message, tag="9")] + #[prost(message, tag="8")] CheckTx(super::ResponseCheckTx), - #[prost(message, tag="10")] + #[prost(message, tag="9")] DeliverTx(super::ResponseDeliverTx), - #[prost(message, tag="11")] + #[prost(message, tag="10")] EndBlock(super::ResponseEndBlock), - #[prost(message, tag="12")] + #[prost(message, tag="11")] Commit(super::ResponseCommit), - #[prost(message, tag="13")] + #[prost(message, tag="12")] ListSnapshots(super::ResponseListSnapshots), - #[prost(message, tag="14")] + #[prost(message, tag="13")] OfferSnapshot(super::ResponseOfferSnapshot), - #[prost(message, tag="15")] + #[prost(message, tag="14")] LoadSnapshotChunk(super::ResponseLoadSnapshotChunk), - #[prost(message, tag="16")] + #[prost(message, tag="15")] ApplySnapshotChunk(super::ResponseApplySnapshotChunk), } } @@ -227,6 +217,7 @@ pub struct ResponseFlush { pub struct ResponseInfo { #[prost(string, tag="1")] pub data: ::prost::alloc::string::String, + /// this is the software version of the application. TODO: remove? #[prost(string, tag="2")] pub version: ::prost::alloc::string::String, #[prost(uint64, tag="3")] @@ -235,29 +226,18 @@ pub struct ResponseInfo { #[prost(int64, tag="4")] #[serde(with = "crate::serializers::from_str")] pub last_block_height: i64, - #[prost(bytes="vec", tag="5")] - #[serde(skip_serializing_if = "::prost::alloc::vec::Vec::is_empty", with = "serde_bytes")] - pub last_block_app_hash: ::prost::alloc::vec::Vec, -} -/// nondeterministic -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ResponseSetOption { - #[prost(uint32, tag="1")] - pub code: u32, - /// bytes data = 2; - #[prost(string, tag="3")] - pub log: ::prost::alloc::string::String, - #[prost(string, tag="4")] - pub info: ::prost::alloc::string::String, + #[prost(bytes="bytes", tag="5")] + #[serde(skip_serializing_if = "bytes::Bytes::is_empty")] + pub last_block_app_hash: ::prost::bytes::Bytes, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseInitChain { #[prost(message, optional, tag="1")] - pub consensus_params: ::core::option::Option, + pub consensus_params: ::core::option::Option, #[prost(message, repeated, tag="2")] pub validators: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="3")] - pub app_hash: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="3")] + pub app_hash: ::prost::bytes::Bytes, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseQuery { @@ -273,10 +253,10 @@ pub struct ResponseQuery { pub info: ::prost::alloc::string::String, #[prost(int64, tag="5")] pub index: i64, - #[prost(bytes="vec", tag="6")] - pub key: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="7")] - pub value: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="6")] + pub key: ::prost::bytes::Bytes, + #[prost(bytes="bytes", tag="7")] + pub value: ::prost::bytes::Bytes, #[prost(message, optional, tag="8")] pub proof_ops: ::core::option::Option, #[prost(int64, tag="9")] @@ -293,8 +273,8 @@ pub struct ResponseBeginBlock { pub struct ResponseCheckTx { #[prost(uint32, tag="1")] pub code: u32, - #[prost(bytes="vec", tag="2")] - pub data: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub data: ::prost::bytes::Bytes, /// nondeterministic #[prost(string, tag="3")] pub log: ::prost::alloc::string::String, @@ -309,13 +289,21 @@ pub struct ResponseCheckTx { pub events: ::prost::alloc::vec::Vec, #[prost(string, tag="8")] pub codespace: ::prost::alloc::string::String, + #[prost(string, tag="9")] + pub sender: ::prost::alloc::string::String, + #[prost(int64, tag="10")] + pub priority: i64, + /// mempool_error is set by Tendermint. + /// ABCI applictions creating a ResponseCheckTX should not set mempool_error. + #[prost(string, tag="11")] + pub mempool_error: ::prost::alloc::string::String, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseDeliverTx { #[prost(uint32, tag="1")] pub code: u32, - #[prost(bytes="vec", tag="2")] - pub data: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub data: ::prost::bytes::Bytes, /// nondeterministic #[prost(string, tag="3")] pub log: ::prost::alloc::string::String, @@ -337,15 +325,15 @@ pub struct ResponseEndBlock { #[prost(message, repeated, tag="1")] pub validator_updates: ::prost::alloc::vec::Vec, #[prost(message, optional, tag="2")] - pub consensus_param_updates: ::core::option::Option, + pub consensus_param_updates: ::core::option::Option, #[prost(message, repeated, tag="3")] pub events: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseCommit { /// reserve 1 - #[prost(bytes="vec", tag="2")] - pub data: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub data: ::prost::bytes::Bytes, #[prost(int64, tag="3")] pub retain_height: i64, } @@ -380,8 +368,8 @@ pub mod response_offer_snapshot { } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseLoadSnapshotChunk { - #[prost(bytes="vec", tag="1")] - pub chunk: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub chunk: ::prost::bytes::Bytes, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseApplySnapshotChunk { @@ -416,29 +404,6 @@ pub mod response_apply_snapshot_chunk { //---------------------------------------- // Misc. -/// ConsensusParams contains all consensus-relevant parameters -/// that can be adjusted by the abci app -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ConsensusParams { - #[prost(message, optional, tag="1")] - pub block: ::core::option::Option, - #[prost(message, optional, tag="2")] - pub evidence: ::core::option::Option, - #[prost(message, optional, tag="3")] - pub validator: ::core::option::Option, - #[prost(message, optional, tag="4")] - pub version: ::core::option::Option, -} -/// BlockParams contains limits on the block size. -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlockParams { - /// Note: must be greater than 0 - #[prost(int64, tag="1")] - pub max_bytes: i64, - /// Note: must be greater or equal to -1 - #[prost(int64, tag="2")] - pub max_gas: i64, -} #[derive(Clone, PartialEq, ::prost::Message)] pub struct LastCommitInfo { #[prost(int32, tag="1")] @@ -459,10 +424,10 @@ pub struct Event { /// EventAttribute is a single key-value pair, associated with an event. #[derive(Clone, PartialEq, ::prost::Message)] pub struct EventAttribute { - #[prost(bytes="vec", tag="1")] - pub key: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="2")] - pub value: ::prost::alloc::vec::Vec, + #[prost(string, tag="1")] + pub key: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub value: ::prost::alloc::string::String, /// nondeterministic #[prost(bool, tag="3")] pub index: bool, @@ -476,8 +441,8 @@ pub struct TxResult { pub height: i64, #[prost(uint32, tag="2")] pub index: u32, - #[prost(bytes="vec", tag="3")] - pub tx: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="3")] + pub tx: ::prost::bytes::Bytes, #[prost(message, optional, tag="4")] pub result: ::core::option::Option, } @@ -488,8 +453,8 @@ pub struct TxResult { #[derive(Clone, PartialEq, ::prost::Message)] pub struct Validator { /// The first 20 bytes of SHA256(public key) - #[prost(bytes="vec", tag="1")] - pub address: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub address: ::prost::bytes::Bytes, /// PubKey pub_key = 2 \[(gogoproto.nullable)=false\]; /// /// The voting power @@ -546,11 +511,11 @@ pub struct Snapshot { #[prost(uint32, tag="3")] pub chunks: u32, /// Arbitrary snapshot hash, equal only if identical - #[prost(bytes="vec", tag="4")] - pub hash: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="4")] + pub hash: ::prost::bytes::Bytes, /// Arbitrary application metadata - #[prost(bytes="vec", tag="5")] - pub metadata: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="5")] + pub metadata: ::prost::bytes::Bytes, } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] diff --git a/proto/src/prost/tendermint.blockchain.rs b/proto/src/prost/tendermint.blocksync.rs similarity index 100% rename from proto/src/prost/tendermint.blockchain.rs rename to proto/src/prost/tendermint.blocksync.rs diff --git a/proto/src/prost/tendermint.crypto.rs b/proto/src/prost/tendermint.crypto.rs index 4b47ef593..507e7866c 100644 --- a/proto/src/prost/tendermint.crypto.rs +++ b/proto/src/prost/tendermint.crypto.rs @@ -2,7 +2,7 @@ #[derive(::serde::Deserialize, ::serde::Serialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PublicKey { - #[prost(oneof="public_key::Sum", tags="1, 2")] + #[prost(oneof="public_key::Sum", tags="1, 2, 3")] pub sum: ::core::option::Option, } /// Nested message and enum types in `PublicKey`. @@ -17,6 +17,9 @@ pub mod public_key { #[prost(bytes, tag="2")] #[serde(rename = "tendermint/PubKeySecp256k1", with = "crate::serializers::bytes::base64string")] Secp256k1(::prost::alloc::vec::Vec), + #[prost(bytes, tag="3")] + #[serde(rename = "tendermint/PubKeySr25519", with = "crate::serializers::bytes::base64string")] + Sr25519(::prost::alloc::vec::Vec), } } #[derive(::serde::Deserialize, ::serde::Serialize)] diff --git a/proto/src/prost/tendermint.p2p.rs b/proto/src/prost/tendermint.p2p.rs index 8ed7b702f..2f809edd5 100644 --- a/proto/src/prost/tendermint.p2p.rs +++ b/proto/src/prost/tendermint.p2p.rs @@ -1,5 +1,5 @@ #[derive(Clone, PartialEq, ::prost::Message)] -pub struct NetAddress { +pub struct PexAddress { #[prost(string, tag="1")] pub id: ::prost::alloc::string::String, #[prost(string, tag="2")] @@ -8,6 +8,46 @@ pub struct NetAddress { pub port: u32, } #[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexRequest { +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexResponse { + #[prost(message, repeated, tag="1")] + pub addresses: ::prost::alloc::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexAddressV2 { + #[prost(string, tag="1")] + pub url: ::prost::alloc::string::String, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexRequestV2 { +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexResponseV2 { + #[prost(message, repeated, tag="1")] + pub addresses: ::prost::alloc::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexMessage { + #[prost(oneof="pex_message::Sum", tags="1, 2, 3, 4")] + pub sum: ::core::option::Option, +} +/// Nested message and enum types in `PexMessage`. +pub mod pex_message { + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Sum { + #[prost(message, tag="1")] + PexRequest(super::PexRequest), + #[prost(message, tag="2")] + PexResponse(super::PexResponse), + #[prost(message, tag="3")] + PexRequestV2(super::PexRequestV2), + #[prost(message, tag="4")] + PexResponseV2(super::PexResponseV2), + } +} +#[derive(Clone, PartialEq, ::prost::Message)] pub struct ProtocolVersion { #[prost(uint64, tag="1")] pub p2p: u64, @@ -17,11 +57,11 @@ pub struct ProtocolVersion { pub app: u64, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DefaultNodeInfo { +pub struct NodeInfo { #[prost(message, optional, tag="1")] pub protocol_version: ::core::option::Option, #[prost(string, tag="2")] - pub default_node_id: ::prost::alloc::string::String, + pub node_id: ::prost::alloc::string::String, #[prost(string, tag="3")] pub listen_addr: ::prost::alloc::string::String, #[prost(string, tag="4")] @@ -33,37 +73,34 @@ pub struct DefaultNodeInfo { #[prost(string, tag="7")] pub moniker: ::prost::alloc::string::String, #[prost(message, optional, tag="8")] - pub other: ::core::option::Option, + pub other: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DefaultNodeInfoOther { +pub struct NodeInfoOther { #[prost(string, tag="1")] pub tx_index: ::prost::alloc::string::String, #[prost(string, tag="2")] pub rpc_address: ::prost::alloc::string::String, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct PexRequest { -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct PexAddrs { - #[prost(message, repeated, tag="1")] - pub addrs: ::prost::alloc::vec::Vec, +pub struct PeerInfo { + #[prost(string, tag="1")] + pub id: ::prost::alloc::string::String, + #[prost(message, repeated, tag="2")] + pub address_info: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="3")] + pub last_connected: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct Message { - #[prost(oneof="message::Sum", tags="1, 2")] - pub sum: ::core::option::Option, -} -/// Nested message and enum types in `Message`. -pub mod message { - #[derive(Clone, PartialEq, ::prost::Oneof)] - pub enum Sum { - #[prost(message, tag="1")] - PexRequest(super::PexRequest), - #[prost(message, tag="2")] - PexAddrs(super::PexAddrs), - } +pub struct PeerAddressInfo { + #[prost(string, tag="1")] + pub address: ::prost::alloc::string::String, + #[prost(message, optional, tag="2")] + pub last_dial_success: ::core::option::Option, + #[prost(message, optional, tag="3")] + pub last_dial_failure: ::core::option::Option, + #[prost(uint32, tag="4")] + pub dial_failures: u32, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct PacketPing { diff --git a/proto/src/prost/tendermint.privval.rs b/proto/src/prost/tendermint.privval.rs index 8a86b3369..04fac20e6 100644 --- a/proto/src/prost/tendermint.privval.rs +++ b/proto/src/prost/tendermint.privval.rs @@ -86,6 +86,16 @@ pub mod message { PingResponse(super::PingResponse), } } +/// AuthSigMessage is duplicated from p2p prior to the P2P refactor. +/// It is used for the SecretConnection until we migrate privval to gRPC. +/// +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AuthSigMessage { + #[prost(message, optional, tag="1")] + pub pub_key: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub sig: ::prost::alloc::vec::Vec, +} #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] pub enum Errors { diff --git a/proto/src/prost/tendermint.statesync.rs b/proto/src/prost/tendermint.statesync.rs index 593bd0222..c7e8d7f8a 100644 --- a/proto/src/prost/tendermint.statesync.rs +++ b/proto/src/prost/tendermint.statesync.rs @@ -1,6 +1,6 @@ #[derive(Clone, PartialEq, ::prost::Message)] pub struct Message { - #[prost(oneof="message::Sum", tags="1, 2, 3, 4")] + #[prost(oneof="message::Sum", tags="1, 2, 3, 4, 5, 6, 7, 8")] pub sum: ::core::option::Option, } /// Nested message and enum types in `Message`. @@ -15,6 +15,14 @@ pub mod message { ChunkRequest(super::ChunkRequest), #[prost(message, tag="4")] ChunkResponse(super::ChunkResponse), + #[prost(message, tag="5")] + LightBlockRequest(super::LightBlockRequest), + #[prost(message, tag="6")] + LightBlockResponse(super::LightBlockResponse), + #[prost(message, tag="7")] + ParamsRequest(super::ParamsRequest), + #[prost(message, tag="8")] + ParamsResponse(super::ParamsResponse), } } #[derive(Clone, PartialEq, ::prost::Message)] @@ -55,3 +63,25 @@ pub struct ChunkResponse { #[prost(bool, tag="5")] pub missing: bool, } +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct LightBlockRequest { + #[prost(uint64, tag="1")] + pub height: u64, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct LightBlockResponse { + #[prost(message, optional, tag="1")] + pub light_block: ::core::option::Option, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ParamsRequest { + #[prost(uint64, tag="1")] + pub height: u64, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ParamsResponse { + #[prost(uint64, tag="1")] + pub height: u64, + #[prost(message, optional, tag="2")] + pub consensus_params: ::core::option::Option, +} diff --git a/proto/src/prost/tendermint.store.rs b/proto/src/prost/tendermint.store.rs deleted file mode 100644 index a4c2799d9..000000000 --- a/proto/src/prost/tendermint.store.rs +++ /dev/null @@ -1,7 +0,0 @@ -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlockStoreState { - #[prost(int64, tag="1")] - pub base: i64, - #[prost(int64, tag="2")] - pub height: i64, -} diff --git a/proto/src/prost/tendermint.types.rs b/proto/src/prost/tendermint.types.rs index 61c23229e..4bc95203e 100644 --- a/proto/src/prost/tendermint.types.rs +++ b/proto/src/prost/tendermint.types.rs @@ -276,71 +276,6 @@ pub enum SignedMsgType { /// Proposals Proposal = 32, } -#[derive(::serde::Deserialize, ::serde::Serialize)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct CanonicalBlockId { - #[prost(bytes="vec", tag="1")] - pub hash: ::prost::alloc::vec::Vec, - #[prost(message, optional, tag="2")] - #[serde(alias = "parts")] - pub part_set_header: ::core::option::Option, -} -#[derive(::serde::Deserialize, ::serde::Serialize)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct CanonicalPartSetHeader { - #[prost(uint32, tag="1")] - pub total: u32, - #[prost(bytes="vec", tag="2")] - pub hash: ::prost::alloc::vec::Vec, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct CanonicalProposal { - /// type alias for byte - #[prost(enumeration="SignedMsgType", tag="1")] - pub r#type: i32, - /// canonicalization requires fixed size encoding here - #[prost(sfixed64, tag="2")] - pub height: i64, - /// canonicalization requires fixed size encoding here - #[prost(sfixed64, tag="3")] - pub round: i64, - #[prost(int64, tag="4")] - pub pol_round: i64, - #[prost(message, optional, tag="5")] - pub block_id: ::core::option::Option, - #[prost(message, optional, tag="6")] - pub timestamp: ::core::option::Option, - #[prost(string, tag="7")] - pub chain_id: ::prost::alloc::string::String, -} -#[derive(::serde::Deserialize, ::serde::Serialize)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct CanonicalVote { - /// type alias for byte - #[prost(enumeration="SignedMsgType", tag="1")] - pub r#type: i32, - /// canonicalization requires fixed size encoding here - #[prost(sfixed64, tag="2")] - pub height: i64, - /// canonicalization requires fixed size encoding here - #[prost(sfixed64, tag="3")] - pub round: i64, - #[prost(message, optional, tag="4")] - pub block_id: ::core::option::Option, - #[prost(message, optional, tag="5")] - pub timestamp: ::core::option::Option, - #[prost(string, tag="6")] - pub chain_id: ::prost::alloc::string::String, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct EventDataRoundState { - #[prost(int64, tag="1")] - pub height: i64, - #[prost(int32, tag="2")] - pub round: i32, - #[prost(string, tag="3")] - pub step: ::prost::alloc::string::String, -} /// ConsensusParams contains consensus critical parameters that determine the /// validity of blocks. #[derive(Clone, PartialEq, ::prost::Message)] @@ -365,12 +300,6 @@ pub struct BlockParams { /// Note: must be greater or equal to -1 #[prost(int64, tag="2")] pub max_gas: i64, - /// Minimum time increment between consecutive blocks (in milliseconds) If the - /// block header timestamp is ahead of the system clock, decrease this value. - /// - /// Not exposed to the application. - #[prost(int64, tag="3")] - pub time_iota_ms: i64, } /// EvidenceParams determine how we handle evidence of malfeasance. #[derive(::serde::Deserialize, ::serde::Serialize)] @@ -420,6 +349,71 @@ pub struct HashedParams { pub block_max_gas: i64, } #[derive(::serde::Deserialize, ::serde::Serialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanonicalBlockId { + #[prost(bytes="vec", tag="1")] + pub hash: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="2")] + #[serde(alias = "parts")] + pub part_set_header: ::core::option::Option, +} +#[derive(::serde::Deserialize, ::serde::Serialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanonicalPartSetHeader { + #[prost(uint32, tag="1")] + pub total: u32, + #[prost(bytes="vec", tag="2")] + pub hash: ::prost::alloc::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanonicalProposal { + /// type alias for byte + #[prost(enumeration="SignedMsgType", tag="1")] + pub r#type: i32, + /// canonicalization requires fixed size encoding here + #[prost(sfixed64, tag="2")] + pub height: i64, + /// canonicalization requires fixed size encoding here + #[prost(sfixed64, tag="3")] + pub round: i64, + #[prost(int64, tag="4")] + pub pol_round: i64, + #[prost(message, optional, tag="5")] + pub block_id: ::core::option::Option, + #[prost(message, optional, tag="6")] + pub timestamp: ::core::option::Option, + #[prost(string, tag="7")] + pub chain_id: ::prost::alloc::string::String, +} +#[derive(::serde::Deserialize, ::serde::Serialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanonicalVote { + /// type alias for byte + #[prost(enumeration="SignedMsgType", tag="1")] + pub r#type: i32, + /// canonicalization requires fixed size encoding here + #[prost(sfixed64, tag="2")] + pub height: i64, + /// canonicalization requires fixed size encoding here + #[prost(sfixed64, tag="3")] + pub round: i64, + #[prost(message, optional, tag="4")] + pub block_id: ::core::option::Option, + #[prost(message, optional, tag="5")] + pub timestamp: ::core::option::Option, + #[prost(string, tag="6")] + pub chain_id: ::prost::alloc::string::String, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EventDataRoundState { + #[prost(int64, tag="1")] + pub height: i64, + #[prost(int32, tag="2")] + pub round: i32, + #[prost(string, tag="3")] + pub step: ::prost::alloc::string::String, +} +#[derive(::serde::Deserialize, ::serde::Serialize)] #[serde(from = "crate::serializers::evidence::EvidenceVariant", into = "crate::serializers::evidence::EvidenceVariant")] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Evidence { diff --git a/proto/src/prost/tendermint.version.rs b/proto/src/prost/tendermint.version.rs index bd1227266..f9b227c15 100644 --- a/proto/src/prost/tendermint.version.rs +++ b/proto/src/prost/tendermint.version.rs @@ -1,13 +1,3 @@ -/// App includes the protocol and software version for the application. -/// This information is included in ResponseInfo. The App.Protocol can be -/// updated in ResponseEndBlock. -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct App { - #[prost(uint64, tag="1")] - pub protocol: u64, - #[prost(string, tag="2")] - pub software: ::prost::alloc::string::String, -} /// Consensus captures the consensus rules for processing a block in the blockchain, /// including all blockchain data structures and the rules of the application's /// state transition machine. diff --git a/proto/src/tendermint.rs b/proto/src/tendermint.rs index 335cb2877..a65841e3b 100644 --- a/proto/src/tendermint.rs +++ b/proto/src/tendermint.rs @@ -18,10 +18,6 @@ pub mod rpc { } } -pub mod blockchain { - include!("prost/tendermint.blockchain.rs"); -} - pub mod libs { pub mod bits { include!("prost/tendermint.libs.bits.rs"); @@ -36,8 +32,8 @@ pub mod version { include!("prost/tendermint.version.rs"); } -pub mod store { - include!("prost/tendermint.store.rs"); +pub mod blocksync { + include!("prost/tendermint.blocksync.rs"); } pub mod privval { @@ -62,5 +58,5 @@ pub mod crypto { pub mod meta { pub const REPOSITORY: &str = "https://github.com/tendermint/tendermint"; - pub const COMMITISH: &str = "v0.34.9"; + pub const COMMITISH: &str = "v0.35.0"; } diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index d97e62813..753b983ce 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -78,6 +78,7 @@ subtle-encoding = { version = "0.5", default-features = false, features = ["bech url = { version = "2.2", default-features = false } walkdir = { version = "2.3", default-features = false } flex-error = { version = "0.4.4", default-features = false } +subtle = { version = "2", default-features = false } # Optional dependencies async-trait = { version = "0.1", optional = true, default-features = false } diff --git a/rpc/src/abci.rs b/rpc/src/abci.rs new file mode 100644 index 000000000..2cbb63df4 --- /dev/null +++ b/rpc/src/abci.rs @@ -0,0 +1,34 @@ +//! Old ABCI structures, formerly defined in `tendermint::abci`. +//! +//! The original contents of `tendermint::abci` were created only to model RPC +//! responses, not to model ABCI itself: +//! +//! > NOTE: This module contains types for ABCI responses as consumed from RPC +//! endpoints. It does not contain an ABCI protocol implementation. +//! +//! The old types should be eliminated and +//! merged with the new ABCI domain types. Moving them here in the meantime +//! disentangles improving the ABCI domain modeling from changes to the RPC +//! interface. + +mod code; +mod data; +mod gas; +mod info; +mod log; +mod path; + +pub mod responses; +pub mod tag; +pub mod transaction; + +pub use self::{ + code::Code, + data::Data, + gas::Gas, + info::Info, + log::Log, + path::Path, + responses::{DeliverTx, Event, Responses}, + transaction::Transaction, +}; diff --git a/tendermint/src/abci/code.rs b/rpc/src/abci/code.rs similarity index 91% rename from tendermint/src/abci/code.rs rename to rpc/src/abci/code.rs index 5a10dedfc..ccc53958a 100644 --- a/tendermint/src/abci/code.rs +++ b/rpc/src/abci/code.rs @@ -1,4 +1,4 @@ -use core::fmt; +use core::{fmt, num::NonZeroU32}; use serde::de::{Deserialize, Deserializer, Visitor}; use serde::{Serialize, Serializer}; @@ -15,7 +15,7 @@ pub enum Code { Ok, /// Error codes - Err(u32), + Err(NonZeroU32), } impl Default for Code { @@ -46,9 +46,9 @@ impl Code { impl From for Code { fn from(value: u32) -> Code { - match value { - 0 => Code::Ok, - err => Code::Err(err), + match NonZeroU32::new(value) { + Some(value) => Code::Err(value), + None => Code::Ok, } } } @@ -57,7 +57,7 @@ impl From for u32 { fn from(code: Code) -> u32 { match code { Code::Ok => 0, - Code::Err(err) => err, + Code::Err(err) => err.get(), } } } diff --git a/tendermint/src/abci/data.rs b/rpc/src/abci/data.rs similarity index 94% rename from tendermint/src/abci/data.rs rename to rpc/src/abci/data.rs index 5fc93f00f..a2c47bf32 100644 --- a/tendermint/src/abci/data.rs +++ b/rpc/src/abci/data.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; /// application-specific rules. #[derive(Clone, Debug, Eq, PartialEq, Default, Serialize, Deserialize)] #[serde(transparent)] -pub struct Data(#[serde(with = "crate::serializers::bytes::base64string")] Vec); +pub struct Data(#[serde(with = "tendermint::serializers::bytes::base64string")] Vec); impl From> for Data { fn from(value: Vec) -> Self { diff --git a/tendermint/src/abci/gas.rs b/rpc/src/abci/gas.rs similarity index 98% rename from tendermint/src/abci/gas.rs rename to rpc/src/abci/gas.rs index af7721d27..d6fe98e9d 100644 --- a/tendermint/src/abci/gas.rs +++ b/rpc/src/abci/gas.rs @@ -5,13 +5,13 @@ //! //! -use crate::error::Error; use crate::prelude::*; use core::{ fmt::{self, Display}, str::FromStr, }; use serde::{de::Error as _, Deserialize, Deserializer, Serialize, Serializer}; +use tendermint::error::Error; /// Gas: representation of transaction processing resource costs #[derive(Copy, Clone, Debug, Default, Eq, PartialEq, PartialOrd, Ord)] diff --git a/tendermint/src/abci/info.rs b/rpc/src/abci/info.rs similarity index 100% rename from tendermint/src/abci/info.rs rename to rpc/src/abci/info.rs diff --git a/tendermint/src/abci/log.rs b/rpc/src/abci/log.rs similarity index 100% rename from tendermint/src/abci/log.rs rename to rpc/src/abci/log.rs diff --git a/tendermint/src/abci/path.rs b/rpc/src/abci/path.rs similarity index 94% rename from tendermint/src/abci/path.rs rename to rpc/src/abci/path.rs index a49eabc3b..b5b3c8ff2 100644 --- a/tendermint/src/abci/path.rs +++ b/rpc/src/abci/path.rs @@ -1,12 +1,12 @@ //! Paths to ABCI data -use crate::error::Error; use crate::prelude::*; use core::{ fmt::{self, Display}, str::FromStr, }; use serde::{Deserialize, Serialize}; +use tendermint::error::Error; /// Path to ABCI data #[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] diff --git a/tendermint/src/abci/responses.rs b/rpc/src/abci/responses.rs similarity index 98% rename from tendermint/src/abci/responses.rs rename to rpc/src/abci/responses.rs index 4a112fcfa..614e1f447 100644 --- a/tendermint/src/abci/responses.rs +++ b/rpc/src/abci/responses.rs @@ -2,9 +2,9 @@ use super::{code::Code, data::Data, gas::Gas, info::Info, log::Log, tag::Tag}; use crate::prelude::*; -use crate::{consensus, serializers, validator}; use core::fmt::{self, Display}; use serde::{Deserialize, Deserializer, Serialize}; +use tendermint::{consensus, serializers, validator}; /// Responses for ABCI calls which occur during block processing. /// diff --git a/tendermint/src/abci/tag.rs b/rpc/src/abci/tag.rs similarity index 60% rename from tendermint/src/abci/tag.rs rename to rpc/src/abci/tag.rs index 50601c5dd..98f868a1b 100644 --- a/tendermint/src/abci/tag.rs +++ b/rpc/src/abci/tag.rs @@ -1,10 +1,9 @@ //! Tags -use crate::error::Error; use crate::prelude::*; use core::{fmt, str::FromStr}; use serde::{Deserialize, Serialize}; -use tendermint_proto::serializers::bytes::base64string; +use tendermint::error::Error; /// Tags #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] @@ -18,13 +17,7 @@ pub struct Tag { /// Tag keys #[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize)] -pub struct Key( - #[serde( - serialize_with = "base64string::serialize", - deserialize_with = "base64string::deserialize_to_string" - )] - String, -); +pub struct Key(String); impl AsRef for Key { fn as_ref(&self) -> &str { @@ -48,13 +41,7 @@ impl fmt::Display for Key { /// Tag values #[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] -pub struct Value( - #[serde( - serialize_with = "base64string::serialize", - deserialize_with = "base64string::deserialize_to_string" - )] - String, -); +pub struct Value(String); impl AsRef for Value { fn as_ref(&self) -> &str { @@ -75,16 +62,3 @@ impl fmt::Display for Value { write!(f, "{}", &self.0) } } - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn tag_serde() { - let json = r#"{"key": "cGFja2V0X3RpbWVvdXRfaGVpZ2h0", "value": "MC00ODQw"}"#; - let tag: Tag = serde_json::from_str(json).unwrap(); - assert_eq!("packet_timeout_height", tag.key.0); - assert_eq!("0-4840", tag.value.0); - } -} diff --git a/tendermint/src/abci/transaction.rs b/rpc/src/abci/transaction.rs similarity index 100% rename from tendermint/src/abci/transaction.rs rename to rpc/src/abci/transaction.rs diff --git a/tendermint/src/abci/transaction/hash.rs b/rpc/src/abci/transaction/hash.rs similarity index 98% rename from tendermint/src/abci/transaction/hash.rs rename to rpc/src/abci/transaction/hash.rs index b9b00136f..5e0c47c2d 100644 --- a/tendermint/src/abci/transaction/hash.rs +++ b/rpc/src/abci/transaction/hash.rs @@ -1,6 +1,5 @@ //! Transaction hashes -use crate::error::Error; use crate::prelude::*; use core::{ fmt::{self, Debug, Display}, @@ -9,6 +8,7 @@ use core::{ use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; use subtle::{self, ConstantTimeEq}; use subtle_encoding::hex; +use tendermint::error::Error; /// Size of a transaction hash in bytes pub const LENGTH: usize = 32; diff --git a/rpc/src/client.rs b/rpc/src/client.rs index a1ce9ad3a..150bf42a3 100644 --- a/rpc/src/client.rs +++ b/rpc/src/client.rs @@ -14,6 +14,7 @@ pub use transport::websocket::{ WebSocketClient, WebSocketClientDriver, WebSocketClientUrl, WebSocketConfig, }; +use crate::abci::{self, Transaction}; use crate::endpoint::validators::DEFAULT_VALIDATORS_PER_PAGE; use crate::endpoint::*; use crate::paging::Paging; @@ -22,7 +23,6 @@ use crate::query::Query; use crate::{Error, Order, SimpleRequest}; use async_trait::async_trait; use core::time::Duration; -use tendermint::abci::{self, Transaction}; use tendermint::block::Height; use tendermint::evidence::Evidence; use tendermint::Genesis; diff --git a/rpc/src/client/bin/main.rs b/rpc/src/client/bin/main.rs index eab7664f0..b6f559a15 100644 --- a/rpc/src/client/bin/main.rs +++ b/rpc/src/client/bin/main.rs @@ -3,8 +3,7 @@ use core::str::FromStr; use futures::StreamExt; use structopt::StructOpt; -use tendermint::abci::transaction::Hash; -use tendermint::abci::{Path, Transaction}; +use tendermint_rpc::abci::{transaction::Hash, Path, Transaction}; use tendermint_rpc::query::Query; use tendermint_rpc::{ Client, Error, HttpClient, Order, Paging, Scheme, Subscription, SubscriptionClient, Url, diff --git a/rpc/src/client/transport/mock.rs b/rpc/src/client/transport/mock.rs index f600b5c31..0949f17dd 100644 --- a/rpc/src/client/transport/mock.rs +++ b/rpc/src/client/transport/mock.rs @@ -247,9 +247,11 @@ mod test { use tokio::fs; async fn read_json_fixture(name: &str) -> String { - fs::read_to_string(PathBuf::from("./tests/support/").join(name.to_owned() + ".json")) - .await - .unwrap() + fs::read_to_string( + PathBuf::from("./tests/kvstore_fixtures").join(name.to_owned() + ".json"), + ) + .await + .unwrap() } async fn read_event(name: &str) -> Event { @@ -258,8 +260,8 @@ mod test { #[tokio::test] async fn mock_client() { - let abci_info_fixture = read_json_fixture("abci_info").await; - let block_fixture = read_json_fixture("block").await; + let abci_info_fixture = read_json_fixture("incoming/abci_info").await; + let block_fixture = read_json_fixture("incoming/block_at_height_10").await; let matcher = MockRequestMethodMatcher::default() .map(Method::AbciInfo, Ok(abci_info_fixture)) .map(Method::Block, Ok(block_fixture)); @@ -267,12 +269,12 @@ mod test { let driver_hdl = tokio::spawn(async move { driver.run().await }); let abci_info = client.abci_info().await.unwrap(); - assert_eq!("GaiaApp".to_string(), abci_info.data); - assert_eq!(Height::from(488120_u32), abci_info.last_block_height); + assert_eq!("{\"size\":0}".to_string(), abci_info.data); + assert_eq!(Height::from(6_u32), abci_info.last_block_height); let block = client.block(Height::from(10_u32)).await.unwrap().block; assert_eq!(Height::from(10_u32), block.header.height); - assert_eq!("cosmoshub-2".parse::().unwrap(), block.header.chain_id); + assert_eq!("dockerchain".parse::().unwrap(), block.header.chain_id); client.close(); driver_hdl.await.unwrap().unwrap(); @@ -283,9 +285,9 @@ mod test { let (client, driver) = MockClient::new(MockRequestMethodMatcher::default()); let driver_hdl = tokio::spawn(async move { driver.run().await }); - let event1 = read_event("event_new_block_1").await; - let event2 = read_event("event_new_block_2").await; - let event3 = read_event("event_new_block_3").await; + let event1 = read_event("incoming/subscribe_newblock_0").await; + let event2 = read_event("incoming/subscribe_newblock_1").await; + let event3 = read_event("incoming/subscribe_newblock_2").await; let events = vec![event1, event2, event3]; let subs1 = client.subscribe(EventType::NewBlock.into()).await.unwrap(); diff --git a/rpc/src/client/transport/router.rs b/rpc/src/client/transport/router.rs index c699717c3..d8b24712b 100644 --- a/rpc/src/client/transport/router.rs +++ b/rpc/src/client/transport/router.rs @@ -155,9 +155,11 @@ mod test { use tokio::time::{self, Duration}; async fn read_json_fixture(name: &str) -> String { - fs::read_to_string(PathBuf::from("./tests/support/").join(name.to_owned() + ".json")) - .await - .unwrap() + fs::read_to_string( + PathBuf::from("./tests/kvstore_fixtures/").join(name.to_owned() + ".json"), + ) + .await + .unwrap() } async fn read_event(name: &str) -> Event { @@ -201,7 +203,7 @@ mod test { // Another subscription with a different query router.add(subs3_id, "query2", subs3_event_tx); - let mut ev = read_event("event_new_block_1").await; + let mut ev = read_event("incoming/subscribe_newblock_0").await; ev.query = "query1".into(); router.publish_event(ev.clone()); diff --git a/rpc/src/client/transport/websocket.rs b/rpc/src/client/transport/websocket.rs index f086910c3..2722ca67a 100644 --- a/rpc/src/client/transport/websocket.rs +++ b/rpc/src/client/transport/websocket.rs @@ -1094,9 +1094,11 @@ mod test { } async fn read_json_fixture(name: &str) -> String { - fs::read_to_string(PathBuf::from("./tests/support/").join(name.to_owned() + ".json")) - .await - .unwrap() + fs::read_to_string( + PathBuf::from("./tests/kvstore_fixtures/").join(name.to_owned() + ".json"), + ) + .await + .unwrap() } async fn read_event(name: &str) -> Event { @@ -1105,9 +1107,9 @@ mod test { #[tokio::test] async fn websocket_client_happy_path() { - let event1 = read_event("event_new_block_1").await; - let event2 = read_event("event_new_block_2").await; - let event3 = read_event("event_new_block_3").await; + let event1 = read_event("incoming/subscribe_newblock_0").await; + let event2 = read_event("incoming/subscribe_newblock_1").await; + let event3 = read_event("incoming/subscribe_newblock_2").await; let test_events = vec![event1, event2, event3]; println!("Starting WebSocket server..."); diff --git a/rpc/src/endpoint/abci_info.rs b/rpc/src/endpoint/abci_info.rs index 37e6fd90a..212d58a4c 100644 --- a/rpc/src/endpoint/abci_info.rs +++ b/rpc/src/endpoint/abci_info.rs @@ -1,8 +1,9 @@ //! `/abci_info` endpoint JSON-RPC wrapper -use serde::{Deserialize, Serialize}; - use core::convert::{TryFrom, TryInto}; + +use bytes::Bytes; +use serde::{Deserialize, Serialize}; use tendermint::block; use tendermint::Error; use tendermint_proto::abci::ResponseInfo; @@ -49,7 +50,7 @@ pub struct AbciInfo { pub last_block_height: block::Height, /// Last app hash for the block - pub last_block_app_hash: Vec, + pub last_block_app_hash: Bytes, } impl TryFrom for AbciInfo { diff --git a/rpc/src/endpoint/abci_query.rs b/rpc/src/endpoint/abci_query.rs index c4dacc5fc..cd4841895 100644 --- a/rpc/src/endpoint/abci_query.rs +++ b/rpc/src/endpoint/abci_query.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; -use tendermint::abci::{Code, Log, Path}; +use crate::abci::{Code, Log, Path}; use tendermint::block; use tendermint::merkle::proof::Proof; use tendermint::serializers; diff --git a/rpc/src/endpoint/block_results.rs b/rpc/src/endpoint/block_results.rs index 0f2c8fcb6..8bf8df1f3 100644 --- a/rpc/src/endpoint/block_results.rs +++ b/rpc/src/endpoint/block_results.rs @@ -2,7 +2,8 @@ use serde::{Deserialize, Serialize}; -use tendermint::{abci, block, consensus, validator}; +use crate::abci; +use tendermint::{block, consensus, validator}; use crate::prelude::*; diff --git a/rpc/src/endpoint/broadcast/tx_async.rs b/rpc/src/endpoint/broadcast/tx_async.rs index 2cd5bd8ae..0de93113e 100644 --- a/rpc/src/endpoint/broadcast/tx_async.rs +++ b/rpc/src/endpoint/broadcast/tx_async.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; -use tendermint::abci::{transaction, Code, Data, Log, Transaction}; +use crate::abci::{transaction, Code, Data, Log, Transaction}; /// `/broadcast_tx_async`: broadcast a transaction and return immediately. #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] diff --git a/rpc/src/endpoint/broadcast/tx_commit.rs b/rpc/src/endpoint/broadcast/tx_commit.rs index bb4cf93a5..4e0a60bfb 100644 --- a/rpc/src/endpoint/broadcast/tx_commit.rs +++ b/rpc/src/endpoint/broadcast/tx_commit.rs @@ -3,12 +3,10 @@ use serde::{Deserialize, Serialize}; -use tendermint::abci::responses::Codespace; -use tendermint::abci::{Event, Gas, Info}; -use tendermint::{ - abci::{transaction, Code, Data, Log, Transaction}, - block, +use crate::abci::{ + responses::Codespace, transaction, Code, Data, Event, Gas, Info, Log, Transaction, }; +use tendermint::block; use crate::prelude::*; diff --git a/rpc/src/endpoint/broadcast/tx_sync.rs b/rpc/src/endpoint/broadcast/tx_sync.rs index 706d9d125..e188525a4 100644 --- a/rpc/src/endpoint/broadcast/tx_sync.rs +++ b/rpc/src/endpoint/broadcast/tx_sync.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; -use tendermint::abci::{transaction, Code, Data, Log, Transaction}; +use crate::abci::{transaction, Code, Data, Log, Transaction}; /// `/broadcast_tx_sync`: returns with the response from `CheckTx`. #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] diff --git a/rpc/src/endpoint/evidence.rs b/rpc/src/endpoint/evidence.rs index 98bcb3158..c9e387b81 100644 --- a/rpc/src/endpoint/evidence.rs +++ b/rpc/src/endpoint/evidence.rs @@ -2,8 +2,9 @@ use crate::Method; +use crate::abci::transaction; use serde::{Deserialize, Serialize}; -use tendermint::{abci::transaction, evidence::Evidence}; +use tendermint::evidence::Evidence; /// `/broadcast_evidence`: broadcast an evidence. #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] diff --git a/rpc/src/endpoint/net_info.rs b/rpc/src/endpoint/net_info.rs index c3a7787c7..b28164a93 100644 --- a/rpc/src/endpoint/net_info.rs +++ b/rpc/src/endpoint/net_info.rs @@ -37,7 +37,7 @@ pub struct Response { pub n_peers: u64, /// Peer information - pub peers: Vec, + pub peers: Option>, } impl crate::Response for Response {} diff --git a/rpc/src/endpoint/tx.rs b/rpc/src/endpoint/tx.rs index e3de3ebb5..e97967c08 100644 --- a/rpc/src/endpoint/tx.rs +++ b/rpc/src/endpoint/tx.rs @@ -1,8 +1,9 @@ //! `/tx` endpoint JSON-RPC wrapper +use crate::abci; use crate::Method; use serde::{Deserialize, Serialize}; -use tendermint::{abci, block}; +use tendermint::block; use tendermint_proto::types::TxProof; /// Request for finding a transaction by its hash. @@ -10,9 +11,8 @@ use tendermint_proto::types::TxProof; pub struct Request { /// The hash of the transaction we want to find. /// - /// Serialized internally into a base64-encoded string before sending to - /// the RPC server. - #[serde(with = "tendermint::serializers::hash_base64")] + /// Serialized internally into a hexadecimal-encoded string before sending + /// to the RPC server. pub hash: abci::transaction::Hash, /// Whether or not to include the proofs of the transaction's inclusion in /// the block. diff --git a/rpc/src/event.rs b/rpc/src/event.rs index cae0c62fd..4dce1bec3 100644 --- a/rpc/src/event.rs +++ b/rpc/src/event.rs @@ -1,8 +1,7 @@ //! RPC subscription event-related data structures. -use alloc::collections::BTreeMap as HashMap; +use crate::abci::responses::{BeginBlock, EndBlock}; use serde::{Deserialize, Serialize}; -use tendermint::abci::responses::{BeginBlock, EndBlock}; use tendermint::Block; use crate::prelude::*; @@ -18,8 +17,8 @@ pub struct Event { pub query: String, /// The data associated with the event. pub data: EventData, - /// Event type and attributes map. - pub events: Option>>, + /// Event type and attributes list. + pub events: Option>, } impl Response for Event {} @@ -73,5 +72,5 @@ pub struct TxResult { pub log: Option, pub gas_wanted: Option, pub gas_used: Option, - pub events: Vec, + pub events: Vec, } diff --git a/rpc/src/lib.rs b/rpc/src/lib.rs index 9ab6b672f..dbbd4c804 100644 --- a/rpc/src/lib.rs +++ b/rpc/src/lib.rs @@ -45,6 +45,7 @@ pub use client::{HttpClient, HttpClientUrl}; #[cfg(feature = "websocket-client")] pub use client::{WebSocketClient, WebSocketClientDriver, WebSocketClientUrl, WebSocketConfig}; +pub mod abci; pub mod endpoint; pub mod error; pub mod event; diff --git a/rpc/tests/kvstore_fixtures.rs b/rpc/tests/kvstore_fixtures.rs index 1fb40251d..d8915b3cc 100644 --- a/rpc/tests/kvstore_fixtures.rs +++ b/rpc/tests/kvstore_fixtures.rs @@ -3,10 +3,10 @@ use core::str::FromStr; use std::{fs, path::PathBuf}; use subtle_encoding::{base64, hex}; -use tendermint::abci::transaction::Hash; use tendermint::evidence::Duration; use tendermint::public_key; use tendermint_config::net::Address; +use tendermint_rpc::abci::transaction::Hash; use tendermint_rpc::{ endpoint, error::{Error, ErrorDetail}, @@ -252,15 +252,28 @@ fn outgoing_fixtures() { base64::decode("dHg1PXZhbHVl").unwrap() ); } - "tx" => { + "tx_prove" => { let wrapped = serde_json::from_str::>(&content) .unwrap(); assert_eq!( wrapped.params().hash, Hash::new([ - 214, 63, 156, 35, 121, 30, 97, 4, 16, 181, 118, 216, 194, 123, 181, 174, - 172, 147, 204, 26, 88, 82, 36, 40, 167, 179, 42, 18, 118, 8, 88, 96 + 252, 184, 111, 113, 196, 239, 244, 62, 19, 197, 31, 161, 39, 145, 246, 221, + 29, 219, 134, 0, 165, 17, 49, 190, 34, 137, 97, 77, 104, 130, 246, 190 + ]) + ); + assert!(wrapped.params().prove); + } + "tx_no_prove" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!( + wrapped.params().hash, + Hash::new([ + 252, 184, 111, 113, 196, 239, 244, 62, 19, 197, 31, 161, 39, 145, 246, 221, + 29, 219, 134, 0, 165, 17, 49, 190, 34, 137, 97, 77, 104, 130, 246, 190 ]) ); assert!(!wrapped.params().prove); @@ -318,7 +331,7 @@ fn incoming_fixtures() { let result = endpoint::abci_info::Response::from_string(content).unwrap(); assert_eq!(result.response.app_version, 1); assert_eq!(result.response.data, "{\"size\":0}"); - assert_eq!(result.response.last_block_app_hash, b"AAAAAAAAAAA="); + assert_eq!(result.response.last_block_app_hash, b"AAAAAAAAAAA="[..]); assert_eq!(result.response.version, "0.17.0"); } "abci_query_with_existing_key" => { @@ -352,11 +365,11 @@ fn incoming_fixtures() { match res { Err(Error(ErrorDetail::Response(e), _)) => { let response = e.source; - assert_eq!(response.code(), Code::InternalError); - assert_eq!(response.message(), "Internal error"); + assert_eq!(response.code(), Code::InvalidRequest); + assert_eq!(response.message(), "Invalid Request"); assert_eq!( response.data(), - Some("height must be greater than 0, but got 0") + Some("height must be greater than zero (requested height: 0)") ); } _ => panic!("expected Response error"), @@ -364,7 +377,7 @@ fn incoming_fixtures() { } "block_at_height_1" => { let result = endpoint::block::Response::from_string(content).unwrap(); - assert!(result.block.data.iter().next().is_none()); + assert!(result.block.data.get(0).is_none()); assert!(result.block.evidence.iter().next().is_none()); assert!(result.block.header.app_hash.value().is_empty()); assert_eq!(result.block.header.chain_id.as_str(), CHAIN_ID); @@ -405,7 +418,7 @@ fn incoming_fixtures() { } "block_at_height_10" => { let result = endpoint::block::Response::from_string(content).unwrap(); - assert!(result.block.data.iter().next().is_none()); + assert!(result.block.data.get(0).is_none()); assert!(result.block.evidence.iter().next().is_none()); assert_eq!(result.block.header.app_hash.value(), [0u8; 8]); assert_eq!(result.block.header.chain_id.as_str(), CHAIN_ID); @@ -462,43 +475,8 @@ fn incoming_fixtures() { "block_search" => { let result = endpoint::block_search::Response::from_string(content).unwrap(); assert_eq!(result.total_count as usize, result.blocks.len()); - // Test a few selected attributes of the results. - for block in result.blocks { - assert!(block.block.data.iter().next().is_none()); - assert!(block.block.evidence.iter().next().is_none()); - assert_eq!(block.block.header.app_hash.value(), [0u8; 8]); - assert_eq!(block.block.header.chain_id.as_str(), CHAIN_ID); - assert!(!block.block.header.consensus_hash.is_empty()); - assert!(block.block.header.data_hash.is_none()); - assert!(block.block.header.evidence_hash.is_none()); - assert_eq!(block.block.header.height.value(), 10); - assert!(block.block.header.last_block_id.is_some()); - assert_eq!(block.block.header.last_commit_hash, empty_merkle_root_hash); - assert_eq!(block.block.header.last_results_hash, empty_merkle_root_hash); - assert!(!block.block.header.next_validators_hash.is_empty()); - assert_ne!( - block.block.header.proposer_address.as_bytes(), - [0u8; tendermint::account::LENGTH] - ); - assert!( - block - .block - .header - .time - .duration_since(informal_epoch) - .unwrap() - .as_secs() - > 0 - ); - assert!(!block.block.header.validators_hash.is_empty()); - assert_eq!( - block.block.header.version, - tendermint::block::header::Version { block: 10, app: 1 } - ); - assert!(block.block.last_commit.is_some()); - assert!(!block.block_id.hash.is_empty()); - assert!(!block.block_id.part_set_header.hash.is_empty()); - assert_eq!(block.block_id.part_set_header.total, 1); + for response in result.blocks { + assert!(response.block.header.height.value() > 1); } } "blockchain_from_1_to_10" => { @@ -550,21 +528,21 @@ fn incoming_fixtures() { } "broadcast_tx_async" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "broadcast_tx_commit" => { let result = endpoint::broadcast::tx_commit::Response::from_string(content).unwrap(); - assert_eq!(result.check_tx.code, tendermint::abci::Code::Ok); + assert_eq!(result.check_tx.code, tendermint_rpc::abci::Code::Ok); assert_eq!( result.check_tx.codespace, - tendermint::abci::responses::Codespace::default() + tendermint_rpc::abci::responses::Codespace::default() ); assert!(result.check_tx.data.is_none()); assert!(result.check_tx.events.is_empty()); @@ -573,10 +551,10 @@ fn incoming_fixtures() { //assert_eq!(result.check_tx.gas_wanted.value(), 1); assert!(result.check_tx.info.to_string().is_empty()); assert!(result.check_tx.log.value().is_empty()); - assert_eq!(result.deliver_tx.code, tendermint::abci::Code::Ok); + assert_eq!(result.deliver_tx.code, tendermint_rpc::abci::Code::Ok); assert_eq!( result.deliver_tx.codespace, - tendermint::abci::responses::Codespace::default() + tendermint_rpc::abci::responses::Codespace::default() ); assert!(result.deliver_tx.data.is_none()); assert_eq!(result.deliver_tx.events.len(), 1); @@ -644,16 +622,16 @@ fn incoming_fixtures() { assert!(result.deliver_tx.log.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); } "broadcast_tx_sync" => { let result = endpoint::broadcast::tx_sync::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } @@ -708,7 +686,7 @@ fn incoming_fixtures() { assert_eq!(u64::from(result.block_height), 10_u64); assert_eq!(result.consensus_params.block.max_bytes, 22020096_u64); assert_eq!(result.consensus_params.block.max_gas, -1_i64); - assert_eq!(result.consensus_params.block.time_iota_ms, 500_i64); + assert_eq!(result.consensus_params.block.time_iota_ms, 1000_i64); assert_eq!( result.consensus_params.evidence.max_age_duration, Duration(core::time::Duration::from_nanos(172800000000000_u64)) @@ -789,7 +767,7 @@ fn incoming_fixtures() { assert_eq!(result.listeners[0].to_string(), "Listener(@)"); assert!(result.listening); assert_eq!(result.n_peers, 0); - assert!(result.peers.is_empty()); + assert!(result.peers.is_none()); } "status" => { let result = endpoint::status::Response::from_string(content).unwrap(); @@ -815,9 +793,12 @@ fn incoming_fixtures() { app: 1 } ); - assert_eq!(result.node_info.version.to_string(), "v0.34.9"); + assert_eq!(result.node_info.version.to_string(), "0.35.0-unreleased"); assert!(!result.sync_info.catching_up); - assert_eq!(result.sync_info.latest_app_hash.value(), [0; 8]); + assert_eq!( + result.sync_info.latest_app_hash.value(), + [6, 0, 0, 0, 0, 0, 0, 0] + ); assert!(!result.sync_info.latest_block_hash.is_empty()); assert!( result @@ -862,7 +843,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -917,7 +898,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -972,7 +953,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -1027,7 +1008,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -1082,7 +1063,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -1160,19 +1141,7 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx0"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + check_event_attrs(&result.events.unwrap(), "tx0", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_1" => { @@ -1204,19 +1173,8 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx1"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + + check_event_attrs(&result.events.unwrap(), "tx1", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_2" => { @@ -1248,19 +1206,7 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx2"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + check_event_attrs(&result.events.unwrap(), "tx2", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_3" => { @@ -1292,19 +1238,7 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx3"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + check_event_attrs(&result.events.unwrap(), "tx3", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_4" => { @@ -1336,91 +1270,101 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx4"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + check_event_attrs(&result.events.unwrap(), "tx4", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_broadcast_tx_0" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_1" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_2" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_3" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_4" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_5" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } - "tx" => { + "tx_prove" => { + let result = endpoint::tx::Response::from_string(content).unwrap(); + assert_eq!( + result.hash, + Hash::new([ + 252, 184, 111, 113, 196, 239, 244, 62, 19, 197, 31, 161, 39, 145, 246, 221, + 29, 219, 134, 0, 165, 17, 49, 190, 34, 137, 97, 77, 104, 130, 246, 190 + ]) + ); + assert_eq!(result.height.value(), 20); + assert!(result.proof.is_some()); + let proof = result.proof.unwrap(); + assert_eq!( + proof.root_hash, + vec![ + 199, 124, 183, 99, 203, 39, 4, 138, 141, 159, 9, 218, 112, 123, 122, 25, + 236, 244, 180, 12, 150, 122, 87, 207, 22, 206, 222, 225, 165, 19, 10, 143 + ] + ); + assert_eq!(proof.proof.unwrap().total, 2); + } + "tx_no_prove" => { let result = endpoint::tx::Response::from_string(content).unwrap(); assert_eq!( result.hash, Hash::new([ - 214, 63, 156, 35, 121, 30, 97, 4, 16, 181, 118, 216, 194, 123, 181, 174, - 172, 147, 204, 26, 88, 82, 36, 40, 167, 179, 42, 18, 118, 8, 88, 96 + 252, 184, 111, 113, 196, 239, 244, 62, 19, 197, 31, 161, 39, 145, 246, 221, + 29, 219, 134, 0, 165, 17, 49, 190, 34, 137, 97, 77, 104, 130, 246, 190 ]) ); - assert_eq!(u64::from(result.height), 12u64); + assert_eq!(result.height.value(), 20); + assert!(result.proof.is_none()); } "tx_search_no_prove" => { let result = endpoint::tx_search::Response::from_string(content).unwrap(); @@ -1428,7 +1372,7 @@ fn incoming_fixtures() { // Test a few selected attributes of the results. for tx in result.txs { assert_ne!(tx.hash.as_bytes(), [0; 32]); - assert_eq!(tx.tx_result.code, tendermint::abci::Code::Ok); + assert_eq!(tx.tx_result.code, tendermint_rpc::abci::Code::Ok); assert_eq!(tx.tx_result.events.len(), 1); assert_eq!(tx.tx_result.events[0].type_str, "app"); assert_eq!(tx.tx_result.gas_used.value(), 0); @@ -1444,7 +1388,7 @@ fn incoming_fixtures() { // Test a few selected attributes of the results. for tx in result.txs { assert_ne!(tx.hash.as_bytes(), [0; 32]); - assert_eq!(tx.tx_result.code, tendermint::abci::Code::Ok); + assert_eq!(tx.tx_result.code, tendermint_rpc::abci::Code::Ok); assert_eq!(tx.tx_result.events.len(), 1); assert_eq!(tx.tx_result.events[0].type_str, "app"); assert_eq!(tx.tx_result.gas_used.value(), 0); @@ -1463,3 +1407,29 @@ fn incoming_fixtures() { } } } + +fn check_event_attrs(events: &[tendermint_rpc::abci::Event], app_key: &str, height: i64) { + for event in events { + for attr in &event.attributes { + match event.type_str.as_ref() { + "app" => match attr.key.as_ref() { + "creator" => assert_eq!(attr.value.as_ref(), "Cosmoshi Netowoko"), + "index_key" => assert_eq!(attr.value.as_ref(), "index is working"), + "key" => assert_eq!(attr.value.as_ref(), app_key), + "noindex_key" => assert_eq!(attr.value.as_ref(), "index is working"), + _ => panic!("unrecognized app attribute found \"{}\"", attr.key), + }, + "tx" => match attr.key.as_ref() { + "hash" => assert_eq!(attr.value.as_ref().len(), 64), + "height" => assert_eq!(attr.value.as_ref(), height.to_string()), + _ => panic!("unrecognized tx attribute found \"{}\"", attr.key), + }, + "tm" => match attr.key.as_ref() { + "event" => assert_eq!(attr.value.as_ref(), "Tx"), + _ => panic!("unrecognized tm attribute found \"{}\"", attr.key), + }, + _ => panic!("unrecognized event type found \"{}\"", event.type_str), + } + } + } +} diff --git a/rpc/tests/kvstore_fixtures/incoming/abci_info.json b/rpc/tests/kvstore_fixtures/incoming/abci_info.json index a94f499fa..97355e2b8 100644 --- a/rpc/tests/kvstore_fixtures/incoming/abci_info.json +++ b/rpc/tests/kvstore_fixtures/incoming/abci_info.json @@ -1,12 +1,12 @@ { - "id": "48e82c4a-4018-433e-9557-c40ac927676f", + "id": "332cf099-c4d1-46b6-beaa-cce28a940e48", "jsonrpc": "2.0", "result": { "response": { "app_version": "1", "data": "{\"size\":0}", "last_block_app_hash": "AAAAAAAAAAA=", - "last_block_height": "32", + "last_block_height": "6", "version": "0.17.0" } } diff --git a/rpc/tests/kvstore_fixtures/incoming/abci_query_with_existing_key.json b/rpc/tests/kvstore_fixtures/incoming/abci_query_with_existing_key.json index fee2a734a..d1798fe0f 100644 --- a/rpc/tests/kvstore_fixtures/incoming/abci_query_with_existing_key.json +++ b/rpc/tests/kvstore_fixtures/incoming/abci_query_with_existing_key.json @@ -1,11 +1,11 @@ { - "id": "ae5b4026-3be4-46ea-876e-2177b74e79a7", + "id": "95375ef6-6ca4-4d14-b28e-24deb522b968", "jsonrpc": "2.0", "result": { "response": { "code": 0, "codespace": "", - "height": "44", + "height": "22", "index": "0", "info": "", "key": "dHgw", diff --git a/rpc/tests/kvstore_fixtures/incoming/abci_query_with_non_existent_key.json b/rpc/tests/kvstore_fixtures/incoming/abci_query_with_non_existent_key.json index 3bda4fb05..5e1c9a210 100644 --- a/rpc/tests/kvstore_fixtures/incoming/abci_query_with_non_existent_key.json +++ b/rpc/tests/kvstore_fixtures/incoming/abci_query_with_non_existent_key.json @@ -1,11 +1,11 @@ { - "id": "a8a36384-95f9-481f-8fc5-4a820176e869", + "id": "cb61fc5e-5207-4e5e-bf37-9d4d1a0f21a9", "jsonrpc": "2.0", "result": { "response": { "code": 0, "codespace": "", - "height": "32", + "height": "6", "index": "0", "info": "", "key": "bm9uX2V4aXN0ZW50X2tleQ==", diff --git a/rpc/tests/kvstore_fixtures/incoming/block_at_height_0.json b/rpc/tests/kvstore_fixtures/incoming/block_at_height_0.json index 5ab877e36..89f0c70e5 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_at_height_0.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_at_height_0.json @@ -1,9 +1,9 @@ { "error": { - "code": -32603, - "data": "height must be greater than 0, but got 0", - "message": "Internal error" + "code": -32600, + "data": "height must be greater than zero (requested height: 0)", + "message": "Invalid Request" }, - "id": "c0ba0ff6-0afd-4d18-bc15-0891696d42f2", + "id": "f887795a-4940-4152-9460-1c6bb3f87a5a", "jsonrpc": "2.0" } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/block_at_height_1.json b/rpc/tests/kvstore_fixtures/incoming/block_at_height_1.json index 2635e49aa..5a2aa0458 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_at_height_1.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_at_height_1.json @@ -1,5 +1,5 @@ { - "id": "0166b641-4967-4b3c-a36a-73ea4e5a737a", + "id": "a37bcc8e-6a32-4157-9200-a26be9981bbd", "jsonrpc": "2.0", "result": { "block": { @@ -25,10 +25,10 @@ }, "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:29.232984022Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:33.387236819Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -48,9 +48,9 @@ } }, "block_id": { - "hash": "44C37753BF31FD4238227E19213F042699F62416D4E5422BBA59095FC4BEE039", + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", "parts": { - "hash": "13EEDAF51D61F7FF513FCD1B6387E0A3E306E49E5DCEA43CAFE77FB7B951DD4B", + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", "total": 1 } } diff --git a/rpc/tests/kvstore_fixtures/incoming/block_at_height_10.json b/rpc/tests/kvstore_fixtures/incoming/block_at_height_10.json index f085fcfe5..975884a09 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_at_height_10.json @@ -1,5 +1,5 @@ { - "id": "d01f0a06-172c-48b8-a9ce-5db74af08ad1", + "id": "988f944f-4d85-486f-ad27-2f3574c2a4a3", "jsonrpc": "2.0", "result": { "block": { @@ -17,18 +17,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "10", "last_block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, - "last_commit_hash": "515DAA8790FBC39D93EA23229826BA45205DAF178F8BD9A7D4835AA07C663C68", + "last_commit_hash": "B194E4E363E010ED4F80860FAF452B45D81C77D7C68C753424F44596A229D692", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:33.997760354Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:38.160820316Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -36,9 +36,9 @@ }, "last_commit": { "block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, @@ -47,17 +47,17 @@ "signatures": [ { "block_id_flag": 2, - "signature": "V0pC4gdCnBBhIoidoAPEuUWP9QTYtTc7EN5VZuXUdSDmYhM8NCcezy9+IxGXqAd7TUBV1aPT/SVv8KFH98u9Ag==", - "timestamp": "2021-07-16T12:16:33.997760354Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "5yClL8UlPdvb2tzNguZu3UaTH5X5S8S635u9nBQjZQw3NFhrZklXm6Aw7Mxvhn3y7CL0yKHdRmH0FnPh8cs2Cg==", + "timestamp": "2021-11-25T17:04:38.160820316Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, "block_id": { - "hash": "223B6924AC98CE99678027C712954C565D4359507C3DECFF9D2D5B5A9E4231F6", + "hash": "BCF3DB412E80A396D10BF5B5E6D3E63D3B06DEB25AA958BCB8CE18D023838042", "parts": { - "hash": "F2FC723B88EFD18C4599BDF9441AA962F19C146C8601ED0854973189D11816DE", + "hash": "7F02924A557B6B6AEB9390183F5458C88EAC02956AFDCCAAFC09B59A80D1EEA8", "total": 1 } } diff --git a/rpc/tests/kvstore_fixtures/incoming/block_results_at_height_10.json b/rpc/tests/kvstore_fixtures/incoming/block_results_at_height_10.json index 8e928660c..d1a81c6de 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_results_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_results_at_height_10.json @@ -1,11 +1,12 @@ { - "id": "421a030f-0b5d-4adb-bb17-537d11228040", + "id": "f3ef9de0-d9af-4708-8c17-6679eea49c35", "jsonrpc": "2.0", "result": { "begin_block_events": null, "consensus_param_updates": null, "end_block_events": null, "height": "10", + "total_gas_used": "0", "txs_results": null, "validator_updates": null } diff --git a/rpc/tests/kvstore_fixtures/incoming/block_search.json b/rpc/tests/kvstore_fixtures/incoming/block_search.json index cbd74b5d7..1204189b7 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_search.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_search.json @@ -1,70 +1,558 @@ { + "id": "41ddde55-c7d2-4273-9a8d-2c8a68d006b7", "jsonrpc": "2.0", - "id": "", "result": { "blocks": [ { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "2", + "last_block_id": { + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", + "parts": { + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", + "total": 1 + } + }, + "last_commit_hash": "F3DD07E01C87D4C2743B86BCD0A3841060D6672F5E267B1E559CEABA3CB2925F", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:33.973579036Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", + "parts": { + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", + "total": 1 + } + }, + "height": "1", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "m6+9UqkWOXwxLbEB7/Jd2z+u7bxMjkHHQejlJ5oW4JIGttiTqki+RwJQCrBQ5I7lW/ttPNfgxpB55BQoGwNbCA==", + "timestamp": "2021-11-25T17:04:33.973579036Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, "block_id": { - "hash": "4FFD15F274758E474898498A191EB8CA6FC6C466576255DA132908A12AC1674C", - "part_set_header": { - "total": 1, - "hash": "BBA710736635FA20CDB4F48732563869E90871D31FE9E7DE3D900CD4334D8775" + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", + "parts": { + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "3", + "last_block_id": { + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", + "parts": { + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", + "total": 1 + } + }, + "last_commit_hash": "5687A75F20F3DFAF579565DF912BA7524A80EAD0F022874E3F9E1DA19DBCE2ED", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:34.498501389Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", + "parts": { + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", + "total": 1 + } + }, + "height": "2", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "EZnkAJdSrp/hJsqfZq41drTOpTYYfZo6dmqhgu7IPSzqxdGCrlYndiGoq/Ju2YaA2f2lgULUe+J40+Mo2xprDA==", + "timestamp": "2021-11-25T17:04:34.498501389Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] } }, + "block_id": { + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", + "parts": { + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", + "total": 1 + } + } + }, + { "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "4", + "last_block_id": { + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", + "parts": { + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", + "total": 1 + } + }, + "last_commit_hash": "BC093B8E6089D8C9359B2B23B57A687A462BDE5E1832D5EA0C65C4CDE9F128EA", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:35.023377724Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { - "block": "10", - "app": "1" + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", + "parts": { + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", + "total": 1 + } }, + "height": "3", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "nNJp/GUijIQqIjBVDitX75JvIU8Og6jerI9tZ7bjUMuhQe0SpGauqArFsvVXSMKiH/PYT01dibuDovzQCeyaAA==", + "timestamp": "2021-11-25T17:04:35.023377724Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", + "parts": { + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", "chain_id": "dockerchain", - "height": "10", - "time": "2020-03-15T16:57:08.151Z", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "5", "last_block_id": { - "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "part_set_header": { - "total": 1, - "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", + "parts": { + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", + "total": 1 + } + }, + "last_commit_hash": "A61865B92400BDB797CFFAE747642966FE299DF955C663B51A5AF84F1B19E092", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:35.549543409Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", + "parts": { + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", + "total": 1 } }, - "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "data_hash": "", - "validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "next_validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", + "height": "4", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "TnRCx236/uZVCqyKz4+nsz2fvcXaNQEu0LHLeRYKnzlWYqNg/SCoAWaO8I866ZyZ0i9pY3QwrO/Z95OSmrn1Bw==", + "timestamp": "2021-11-25T17:04:35.549543409Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", + "parts": { + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "6", + "last_block_id": { + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", + "parts": { + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", + "total": 1 + } + }, + "last_commit_hash": "38A1FDC48C2D5B8E14DDF138F96011C23DA97B7D0211AC3397B81529C61F7AC1", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:36.068793865Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", + "parts": { + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", + "total": 1 + } + }, + "height": "5", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "l0oNqn1W1+g++ekWb1b/RSMOxNIAY4R9K/gHdVNMCzaukCB1G3zu8hQRfcLxJyj2YwV2weIZmEnDs0du/chxDQ==", + "timestamp": "2021-11-25T17:04:36.068793865Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", + "parts": { + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "7", + "last_block_id": { + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", + "parts": { + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", + "total": 1 + } + }, + "last_commit_hash": "B9358CD1EE4E9B16BBB2DAE8BB17708D8099E54DE6850323DE06B7E1E8F912E3", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "", - "proposer_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3" + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:36.594528638Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } }, + "last_commit": { + "block_id": { + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", + "parts": { + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", + "total": 1 + } + }, + "height": "6", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "VWW3WrbL2ASnyge5sATYuVqxZiBSJwH4oOzZFEd1oizpDy4p6VD13fHqfkYfdpjjJRg/dDZkJg06yJoKasLOBw==", + "timestamp": "2021-11-25T17:04:36.594528638Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", + "parts": { + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", + "total": 1 + } + } + }, + { + "block": { "data": { - "txs": null + "txs": [] }, "evidence": { - "evidence": null + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "8", + "last_block_id": { + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", + "parts": { + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", + "total": 1 + } + }, + "last_commit_hash": "C92C8DDA8D9DBB0E46B89FA33A190181BF43D1330D6A7BCC66927B7372AE269C", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:37.112815661Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } }, "last_commit": { + "block_id": { + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", + "parts": { + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", + "total": 1 + } + }, + "height": "7", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "GaH5Ob0j72yzugyhc++7TeY8eodiLXrTCwW8+M9/xolnDxPB1GnzgmAVHyRPeAcHEL7/ArZFQeEQF+nwe+M+Bw==", + "timestamp": "2021-11-25T17:04:37.112815661Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", + "parts": { + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "9", + "last_block_id": { + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", + "parts": { + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", + "total": 1 + } + }, + "last_commit_hash": "9BDF7B30A10ACF5B16D815E45A77BA7FA81917C9B360FD4D35D4BFC1755A8CDD", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:37.636885394Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", + "parts": { + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", + "total": 1 + } + }, + "height": "8", "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "TPhGWTaCM5iRtuZHQNvP8sQ23vd+A/diFwZkRhYxQzGSHCiS5jIjoyF+EaPypza6sFr63hN09eW5PYBljvMzBg==", + "timestamp": "2021-11-25T17:04:37.636885394Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", + "parts": { + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "10", + "last_block_id": { + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", + "parts": { + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", + "total": 1 + } + }, + "last_commit_hash": "B194E4E363E010ED4F80860FAF452B45D81C77D7C68C753424F44596A229D692", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:38.160820316Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { "block_id": { - "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "part_set_header": { - "total": 1, - "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", + "parts": { + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", + "total": 1 } }, + "height": "9", + "round": 0, "signatures": [ { "block_id_flag": 2, - "validator_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3", - "timestamp": "2020-03-15T16:57:08.151Z", - "signature": "GRBX/UNaf19vs5byJfAuXk2FQ05soOHmaMFCbrNBhHdNZtFKHp6J9eFwZrrG+YCxKMdqPn2tQWAes6X8kpd1DA==" + "signature": "5yClL8UlPdvb2tzNguZu3UaTH5X5S8S635u9nBQjZQw3NFhrZklXm6Aw7Mxvhn3y7CL0yKHdRmH0FnPh8cs2Cg==", + "timestamp": "2021-11-25T17:04:38.160820316Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } + }, + "block_id": { + "hash": "BCF3DB412E80A396D10BF5B5E6D3E63D3B06DEB25AA958BCB8CE18D023838042", + "parts": { + "hash": "7F02924A557B6B6AEB9390183F5458C88EAC02956AFDCCAAFC09B59A80D1EEA8", + "total": 1 + } } } ], - "total_count": "1" + "total_count": "9" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/blockchain_from_1_to_10.json b/rpc/tests/kvstore_fixtures/incoming/blockchain_from_1_to_10.json index b7d8e0ae4..432d7a2c5 100644 --- a/rpc/tests/kvstore_fixtures/incoming/blockchain_from_1_to_10.json +++ b/rpc/tests/kvstore_fixtures/incoming/blockchain_from_1_to_10.json @@ -1,17 +1,17 @@ { - "id": "7f156511-df54-4ede-8821-d6932c878ca2", + "id": "b49a0551-ac45-42ce-85da-dfc2ffc0385b", "jsonrpc": "2.0", "result": { "block_metas": [ { "block_id": { - "hash": "223B6924AC98CE99678027C712954C565D4359507C3DECFF9D2D5B5A9E4231F6", + "hash": "BCF3DB412E80A396D10BF5B5E6D3E63D3B06DEB25AA958BCB8CE18D023838042", "parts": { - "hash": "F2FC723B88EFD18C4599BDF9441AA962F19C146C8601ED0854973189D11816DE", + "hash": "7F02924A557B6B6AEB9390183F5458C88EAC02956AFDCCAAFC09B59A80D1EEA8", "total": 1 } }, - "block_size": "571", + "block_size": "569", "header": { "app_hash": "0000000000000000", "chain_id": "dockerchain", @@ -20,18 +20,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "10", "last_block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, - "last_commit_hash": "515DAA8790FBC39D93EA23229826BA45205DAF178F8BD9A7D4835AA07C663C68", + "last_commit_hash": "B194E4E363E010ED4F80860FAF452B45D81C77D7C68C753424F44596A229D692", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:33.997760354Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:38.160820316Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -41,9 +41,9 @@ }, { "block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, @@ -56,18 +56,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "9", "last_block_id": { - "hash": "10D7A9EF7E80D0F8DF3E77E95D7C35017CA19E48515038CAC6DC5BC926D6EA7C", + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", "parts": { - "hash": "A96E9C8E2759D7A95FBAB150DDA26A4ECFC3D656D9545F373833172FDCB1B191", + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", "total": 1 } }, - "last_commit_hash": "0A8375B1547930A7AD121381359A0D43384E04B14EC07FB8BF3E6A3124E455BA", + "last_commit_hash": "9BDF7B30A10ACF5B16D815E45A77BA7FA81917C9B360FD4D35D4BFC1755A8CDD", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:33.479129116Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:37.636885394Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -77,13 +77,13 @@ }, { "block_id": { - "hash": "10D7A9EF7E80D0F8DF3E77E95D7C35017CA19E48515038CAC6DC5BC926D6EA7C", + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", "parts": { - "hash": "A96E9C8E2759D7A95FBAB150DDA26A4ECFC3D656D9545F373833172FDCB1B191", + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", "total": 1 } }, - "block_size": "571", + "block_size": "569", "header": { "app_hash": "0000000000000000", "chain_id": "dockerchain", @@ -92,18 +92,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "8", "last_block_id": { - "hash": "7BBDEBAACD6175DC04ED02E00CA187B47AA2BA31E14B56F1EDD81711EA2D0E9E", + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", "parts": { - "hash": "47F94ADC5CC798B665E963B38FD92CE0A5028B776C3F8CB8A888DB9BCB135255", + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", "total": 1 } }, - "last_commit_hash": "68BA536B3600124E7B34E2B5655143A9FBE492D2EB801BD6B707E775C704F7AC", + "last_commit_hash": "C92C8DDA8D9DBB0E46B89FA33A190181BF43D1330D6A7BCC66927B7372AE269C", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:32.960708562Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:37.112815661Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -113,9 +113,9 @@ }, { "block_id": { - "hash": "7BBDEBAACD6175DC04ED02E00CA187B47AA2BA31E14B56F1EDD81711EA2D0E9E", + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", "parts": { - "hash": "47F94ADC5CC798B665E963B38FD92CE0A5028B776C3F8CB8A888DB9BCB135255", + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", "total": 1 } }, @@ -128,18 +128,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "7", "last_block_id": { - "hash": "8937F69C6E345E565B0CA1903B47B0F7870D28054330C8DFFF8FC62A4A669E71", + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", "parts": { - "hash": "63FFACB6E280BE2A4F7BF4D0067F3ADB7EFA9A28B9A5CD3A9DCE39376E184611", + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", "total": 1 } }, - "last_commit_hash": "06AA328E6DEBDCDEDB3289AC1AF5CAD14C129E2EDBB10DC5E4DD2299DD68DE1F", + "last_commit_hash": "B9358CD1EE4E9B16BBB2DAE8BB17708D8099E54DE6850323DE06B7E1E8F912E3", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:32.441854222Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:36.594528638Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -149,13 +149,13 @@ }, { "block_id": { - "hash": "8937F69C6E345E565B0CA1903B47B0F7870D28054330C8DFFF8FC62A4A669E71", + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", "parts": { - "hash": "63FFACB6E280BE2A4F7BF4D0067F3ADB7EFA9A28B9A5CD3A9DCE39376E184611", + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", "total": 1 } }, - "block_size": "571", + "block_size": "569", "header": { "app_hash": "0000000000000000", "chain_id": "dockerchain", @@ -164,18 +164,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "6", "last_block_id": { - "hash": "85789949436D56D8A68944C59B3604F48FE87DA4A437EBB8735EA57B2CC84199", + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", "parts": { - "hash": "D5545141E42C0EBBF174EDD2601C8589C2116111D11EFF270B9D467E7E86E7F5", + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", "total": 1 } }, - "last_commit_hash": "1DB4A22544F7794F63034F983540FC08766CACF4A26F7983EA217AE537512282", + "last_commit_hash": "38A1FDC48C2D5B8E14DDF138F96011C23DA97B7D0211AC3397B81529C61F7AC1", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:31.914193769Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:36.068793865Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -185,9 +185,9 @@ }, { "block_id": { - "hash": "85789949436D56D8A68944C59B3604F48FE87DA4A437EBB8735EA57B2CC84199", + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", "parts": { - "hash": "D5545141E42C0EBBF174EDD2601C8589C2116111D11EFF270B9D467E7E86E7F5", + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", "total": 1 } }, @@ -200,18 +200,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "5", "last_block_id": { - "hash": "C61290C168222DF1A8DE7835BFF17B10C61E4ED9277F122442FA4046A960635A", + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", "parts": { - "hash": "A674EB61DCDE24F367A742F15DA620D3A66E6496FB257EB0676C893E56AEBE38", + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", "total": 1 } }, - "last_commit_hash": "38BF789B0DF166078B7EB4AEF33C83730E2B051D72985C30535128200F047B6A", + "last_commit_hash": "A61865B92400BDB797CFFAE747642966FE299DF955C663B51A5AF84F1B19E092", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:31.388034944Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:35.549543409Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -221,13 +221,13 @@ }, { "block_id": { - "hash": "C61290C168222DF1A8DE7835BFF17B10C61E4ED9277F122442FA4046A960635A", + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", "parts": { - "hash": "A674EB61DCDE24F367A742F15DA620D3A66E6496FB257EB0676C893E56AEBE38", + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", "total": 1 } }, - "block_size": "571", + "block_size": "569", "header": { "app_hash": "0000000000000000", "chain_id": "dockerchain", @@ -236,18 +236,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "4", "last_block_id": { - "hash": "2C2BA16F686527DC10F0A3CCCA2215CB45B56ED6F51A28E74F7657048CEB3CBF", + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", "parts": { - "hash": "5E44D35FBB14FDD5D3320D7FDDBA077CC3D8AAE9491D67D52D304B41BBA671CA", + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", "total": 1 } }, - "last_commit_hash": "8312F3A5282B121B1C118F44B3448F440B749D4555777641416ED3EB17600FF9", + "last_commit_hash": "BC093B8E6089D8C9359B2B23B57A687A462BDE5E1832D5EA0C65C4CDE9F128EA", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:30.863905197Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:35.023377724Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -257,9 +257,9 @@ }, { "block_id": { - "hash": "2C2BA16F686527DC10F0A3CCCA2215CB45B56ED6F51A28E74F7657048CEB3CBF", + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", "parts": { - "hash": "5E44D35FBB14FDD5D3320D7FDDBA077CC3D8AAE9491D67D52D304B41BBA671CA", + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", "total": 1 } }, @@ -272,18 +272,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "3", "last_block_id": { - "hash": "0636CC84AB264C5A91852C21A8C337C216A3F98184489A28F329B378DE301691", + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", "parts": { - "hash": "92B62BF5935DCE75CBE38CD522F4372AF07A4F36DD09DCC9BE516D11719B9748", + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", "total": 1 } }, - "last_commit_hash": "F5B94D8A51A6627FBBB0EFA45C3FF6981B8F80EAA753A21ECCE51BD9CEAFAC93", + "last_commit_hash": "5687A75F20F3DFAF579565DF912BA7524A80EAD0F022874E3F9E1DA19DBCE2ED", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:30.340443692Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:34.498501389Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -293,9 +293,9 @@ }, { "block_id": { - "hash": "0636CC84AB264C5A91852C21A8C337C216A3F98184489A28F329B378DE301691", + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", "parts": { - "hash": "92B62BF5935DCE75CBE38CD522F4372AF07A4F36DD09DCC9BE516D11719B9748", + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", "total": 1 } }, @@ -308,18 +308,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "2", "last_block_id": { - "hash": "44C37753BF31FD4238227E19213F042699F62416D4E5422BBA59095FC4BEE039", + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", "parts": { - "hash": "13EEDAF51D61F7FF513FCD1B6387E0A3E306E49E5DCEA43CAFE77FB7B951DD4B", + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", "total": 1 } }, - "last_commit_hash": "FFD940CAE430CC36EF47D79A2A4D82ECE4B6148EBFD57718676E63A430728090", + "last_commit_hash": "F3DD07E01C87D4C2743B86BCD0A3841060D6672F5E267B1E559CEABA3CB2925F", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:29.814665301Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:33.973579036Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -329,13 +329,13 @@ }, { "block_id": { - "hash": "44C37753BF31FD4238227E19213F042699F62416D4E5422BBA59095FC4BEE039", + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", "parts": { - "hash": "13EEDAF51D61F7FF513FCD1B6387E0A3E306E49E5DCEA43CAFE77FB7B951DD4B", + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", "total": 1 } }, - "block_size": "311", + "block_size": "312", "header": { "app_hash": "", "chain_id": "dockerchain", @@ -352,10 +352,10 @@ }, "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:29.232984022Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:33.387236819Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -364,6 +364,6 @@ "num_txs": "0" } ], - "last_height": "33" + "last_height": "10" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_async.json b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_async.json index 628b32193..23a57ae05 100644 --- a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_async.json +++ b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_async.json @@ -1,11 +1,12 @@ { - "id": "4efd497c-5b42-458f-b136-b101e764071d", + "id": "fb725d9a-923a-4fd2-99c0-1b7a9bfdc401", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_commit.json b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_commit.json index f553bae58..104325614 100644 --- a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_commit.json +++ b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_commit.json @@ -1,5 +1,5 @@ { - "id": "c32535b9-bec5-4549-9f90-7aa25d6d6a12", + "id": "c3a4ce32-070f-4e72-be11-96dcd6f4615b", "jsonrpc": "2.0", "result": { "check_tx": { @@ -10,7 +10,10 @@ "gas_used": "0", "gas_wanted": "1", "info": "", - "log": "" + "log": "", + "mempoolError": "", + "priority": "0", + "sender": "" }, "deliver_tx": { "code": 0, @@ -21,23 +24,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" + "key": "key", + "value": "commit-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -49,6 +52,6 @@ "log": "" }, "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "34" + "height": "11" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_sync.json b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_sync.json index c84bbc76a..2b9ba9105 100644 --- a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_sync.json +++ b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_sync.json @@ -1,11 +1,12 @@ { - "id": "59795aed-7cb3-4997-803e-f747b8f2cc2f", + "id": "493d43ec-3e1d-476e-928c-faef50754837", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/commit_at_height_10.json b/rpc/tests/kvstore_fixtures/incoming/commit_at_height_10.json index 33a44fadd..f2b9695e7 100644 --- a/rpc/tests/kvstore_fixtures/incoming/commit_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/incoming/commit_at_height_10.json @@ -1,14 +1,14 @@ { - "id": "21ad34a1-45a5-4766-a917-d5492b24f941", + "id": "6f54a0c9-cc78-4d15-8952-a4f61d757774", "jsonrpc": "2.0", "result": { - "canonical": true, + "canonical": false, "signed_header": { "commit": { "block_id": { - "hash": "223B6924AC98CE99678027C712954C565D4359507C3DECFF9D2D5B5A9E4231F6", + "hash": "BCF3DB412E80A396D10BF5B5E6D3E63D3B06DEB25AA958BCB8CE18D023838042", "parts": { - "hash": "F2FC723B88EFD18C4599BDF9441AA962F19C146C8601ED0854973189D11816DE", + "hash": "7F02924A557B6B6AEB9390183F5458C88EAC02956AFDCCAAFC09B59A80D1EEA8", "total": 1 } }, @@ -17,9 +17,9 @@ "signatures": [ { "block_id_flag": 2, - "signature": "XcYXbxMIxFjL5s+oD4XGi7KkzPAFHH1j6IWcX8odqWKgZkjxAk/ACDufwCqA3CwiQDO946qTo2dhZ7B2Ull3DA==", - "timestamp": "2021-07-16T12:16:34.512439966Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "ldPa+x1U/7eXfzm07bhFr29lpi1HEr/uRQSnFhhr87IaMzDuUKQDqRf4GXpSDMDdmUu67eZlGzoXaVHZNq7QDg==", + "timestamp": "2021-11-25T17:04:38.684352646Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] }, @@ -31,18 +31,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "10", "last_block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, - "last_commit_hash": "515DAA8790FBC39D93EA23229826BA45205DAF178F8BD9A7D4835AA07C663C68", + "last_commit_hash": "B194E4E363E010ED4F80860FAF452B45D81C77D7C68C753424F44596A229D692", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:33.997760354Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:38.160820316Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" diff --git a/rpc/tests/kvstore_fixtures/incoming/consensus_params.json b/rpc/tests/kvstore_fixtures/incoming/consensus_params.json index 7ad12b60b..82af3d71f 100644 --- a/rpc/tests/kvstore_fixtures/incoming/consensus_params.json +++ b/rpc/tests/kvstore_fixtures/incoming/consensus_params.json @@ -1,13 +1,12 @@ { - "id": "6c5641b5-079a-4d2d-9009-f7d4ce20b2ec", + "id": "e7ef4782-f290-42a1-94fd-bc8e84e76b53", "jsonrpc": "2.0", "result": { "block_height": "10", "consensus_params": { "block": { "max_bytes": "22020096", - "max_gas": "-1", - "time_iota_ms": "500" + "max_gas": "-1" }, "evidence": { "max_age_duration": "172800000000000", @@ -19,7 +18,9 @@ "ed25519" ] }, - "version": {} + "version": { + "app_version": "0" + } } } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/consensus_state.json b/rpc/tests/kvstore_fixtures/incoming/consensus_state.json index e86eb66f3..fa08dc3c7 100644 --- a/rpc/tests/kvstore_fixtures/incoming/consensus_state.json +++ b/rpc/tests/kvstore_fixtures/incoming/consensus_state.json @@ -1,9 +1,9 @@ { - "id": "523312c6-ea35-4274-b521-401e724bb344", + "id": "51f544e1-0f45-4fd4-ba95-80b073c63137", "jsonrpc": "2.0", "result": { "round_state": { - "height/round/step": "34/0/1", + "height/round/step": "11/0/1", "height_vote_set": [ { "precommits": [ @@ -20,10 +20,10 @@ "locked_block_hash": "", "proposal_block_hash": "", "proposer": { - "address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", + "address": "6B3F66DCF73507BCE7148D6580DAC27074108628", "index": 0 }, - "start_time": "2021-07-16T12:16:46.916066071Z", + "start_time": "2021-11-25T17:04:39.191279187Z", "valid_block_hash": "" } } diff --git a/rpc/tests/kvstore_fixtures/incoming/genesis.json b/rpc/tests/kvstore_fixtures/incoming/genesis.json index 904207f53..d243350ad 100644 --- a/rpc/tests/kvstore_fixtures/incoming/genesis.json +++ b/rpc/tests/kvstore_fixtures/incoming/genesis.json @@ -1,5 +1,5 @@ { - "id": "9f71da58-c631-4141-be10-a9dac3496af0", + "id": "97b6f531-5f8c-424a-91be-9a0caaf6f34d", "jsonrpc": "2.0", "result": { "genesis": { @@ -20,18 +20,20 @@ "ed25519" ] }, - "version": {} + "version": { + "app_version": "0" + } }, - "genesis_time": "2021-07-16T12:16:29.232984022Z", + "genesis_time": "2021-11-25T17:04:33.387236819Z", "initial_height": "1", "validators": [ { - "address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", + "address": "6B3F66DCF73507BCE7148D6580DAC27074108628", "name": "", "power": "10", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "f+7sWZojwd8xbxZ+GJL+x/zKr1wyM0NMJkp8tCnA4t0=" + "value": "fbRNPLlIO+9TvAyBBwxAm2CKODIL8Oxaryw/DaHJGq4=" } } ] diff --git a/rpc/tests/kvstore_fixtures/incoming/net_info.json b/rpc/tests/kvstore_fixtures/incoming/net_info.json index 057baa3f7..0f39f2e4b 100644 --- a/rpc/tests/kvstore_fixtures/incoming/net_info.json +++ b/rpc/tests/kvstore_fixtures/incoming/net_info.json @@ -1,5 +1,5 @@ { - "id": "a01a558c-a893-415a-8f57-21f104d1aa46", + "id": "87e7b1f1-46bc-4789-8978-f570ed2600b1", "jsonrpc": "2.0", "result": { "listeners": [ @@ -7,6 +7,6 @@ ], "listening": true, "n_peers": "0", - "peers": [] + "peers": null } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/status.json b/rpc/tests/kvstore_fixtures/incoming/status.json index fdc868cd1..94ce28cb6 100644 --- a/rpc/tests/kvstore_fixtures/incoming/status.json +++ b/rpc/tests/kvstore_fixtures/incoming/status.json @@ -1,10 +1,10 @@ { - "id": "7acd6adc-648a-4e73-88de-911fb2db10c5", + "id": "84cd8df6-1ab8-4678-9294-7c7f63b60ad7", "jsonrpc": "2.0", "result": { "node_info": { - "channels": "40202122233038606100", - "id": "eb277d0093f0a454f87558b962ae0ba6a0675691", + "channels": "402021222330386061626300", + "id": "25d4acdbecad89a4d50073cc5673965d98f5681d", "listen_addr": "tcp://0.0.0.0:26656", "moniker": "dockernode", "network": "dockerchain", @@ -17,24 +17,34 @@ "block": "11", "p2p": "8" }, - "version": "v0.34.9" + "version": "0.35.0-unreleased" }, "sync_info": { + "backfill_blocks_total": "0", + "backfilled_blocks": "0", "catching_up": false, + "chunk_process_avg_time": "0", "earliest_app_hash": "", - "earliest_block_hash": "44C37753BF31FD4238227E19213F042699F62416D4E5422BBA59095FC4BEE039", + "earliest_block_hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", "earliest_block_height": "1", - "earliest_block_time": "2021-07-16T12:16:29.232984022Z", - "latest_app_hash": "0000000000000000", - "latest_block_hash": "D18444A13CC9F798A4B57FDCD3C486EB7FF1F4EF73DF6234764226DDED75A394", - "latest_block_height": "34", - "latest_block_time": "2021-07-16T12:16:46.411375512Z" + "earliest_block_time": "2021-11-25T17:04:33.387236819Z", + "latest_app_hash": "0600000000000000", + "latest_block_hash": "96685C09D7C09916D127A894A5F53652E18AF8F0E5B4112C69A39CC631179960", + "latest_block_height": "12", + "latest_block_time": "2021-11-25T17:04:39.209040526Z", + "max_peer_block_height": "0", + "remaining_time": "0", + "snapshot_chunks_count": "0", + "snapshot_chunks_total": "0", + "snapshot_height": "0", + "total_snapshots": "0", + "total_synced_time": "0" }, "validator_info": { - "address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", + "address": "6B3F66DCF73507BCE7148D6580DAC27074108628", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "f+7sWZojwd8xbxZ+GJL+x/zKr1wyM0NMJkp8tCnA4t0=" + "value": "fbRNPLlIO+9TvAyBBwxAm2CKODIL8Oxaryw/DaHJGq4=" }, "voting_power": "10" } diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_malformed.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_malformed.json index a916a9a5c..6338f5abb 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_malformed.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_malformed.json @@ -4,6 +4,6 @@ "data": "failed to parse query: \nparse error near PegText (line 1 symbol 2 - line 1 symbol 11):\n\"malformed\"\n", "message": "Internal error" }, - "id": "b23346ae-3330-4024-9286-933c350249c1", + "id": "7ba4d785-72ab-41a3-8a1d-7bce9af86fce", "jsonrpc": "2.0" } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_0.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_0.json index 7a2553da1..9e97ee722 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_0.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_0.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "35", + "height": "13", "last_block_id": { - "hash": "D18444A13CC9F798A4B57FDCD3C486EB7FF1F4EF73DF6234764226DDED75A394", + "hash": "96685C09D7C09916D127A894A5F53652E18AF8F0E5B4112C69A39CC631179960", "parts": { - "hash": "DCECC31BE4B7F69DC5038571F4410EDF538A602BF9B3C85045702DD7A868C708", + "hash": "F83D5F70A95C1C0F122DF87D6D068A9D3155292C931448E227F0EB1F594E755E", "total": 1 } }, - "last_commit_hash": "EE7456BBB24313A5C10EDD10ABC6C61C69FFA5C69BB24221BFE655FD6801E83D", - "last_results_hash": "4837665DFE640A370E7496C691987562D02462142C5F34F59E185911A12370EA", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:46.930356271Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "last_commit_hash": "93B574F4F3F664332D9C990993262DCD8295FF42C7E3CFD3060DB8BE1B2E1502", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:39.73525063Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "D18444A13CC9F798A4B57FDCD3C486EB7FF1F4EF73DF6234764226DDED75A394", + "hash": "96685C09D7C09916D127A894A5F53652E18AF8F0E5B4112C69A39CC631179960", "parts": { - "hash": "DCECC31BE4B7F69DC5038571F4410EDF538A602BF9B3C85045702DD7A868C708", + "hash": "F83D5F70A95C1C0F122DF87D6D068A9D3155292C931448E227F0EB1F594E755E", "total": 1 } }, - "height": "34", + "height": "12", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "xlPAgX+MKydn8/rjQCRCbAqbrffyJlA4PNtXO9SRqD2L4fQsvqXbPZIFuJlu4nT1gwS6dMJvxHtkAgaDMNEYDQ==", - "timestamp": "2021-07-16T12:16:46.930356271Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "Xb4Moc2Pntlf7m1YHskziYFUDVt02m7L01wmeRD6F/Z6rMI/M7s+FS2dQqeNfFOzXa5a6t+qaLBS2RWq1YcTBA==", + "timestamp": "2021-11-25T17:04:39.73525063Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "C75F0D24F0F94548BB1BC1B9D0AB4F304DD3F5170FBAF4B828EE47344EFE7A8C", + "parts": { + "hash": "B69A825C835F943795E299A93D5BDB8A031E4C6732575942DDD76866DBD9C36B", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_1.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_1.json index 66e281821..aa5539e13 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_1.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_1.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "36", + "height": "14", "last_block_id": { - "hash": "DA3E9C0ABE252FF76E932F411993920222A47D7B1A080A37508802E1FC66D01D", + "hash": "C75F0D24F0F94548BB1BC1B9D0AB4F304DD3F5170FBAF4B828EE47344EFE7A8C", "parts": { - "hash": "01A0B7D0054F27DFE276467353FD590ADCB7CDCF2DD288862E35E555A5CA6369", + "hash": "B69A825C835F943795E299A93D5BDB8A031E4C6732575942DDD76866DBD9C36B", "total": 1 } }, - "last_commit_hash": "3EF3F938C94A61FD308F3B4B154C146EC051D6A31490C0C783F1C5F87211821F", + "last_commit_hash": "B9489594ACC7F23813285C35B0D06703D94C3DE9C8F09DB976F51B98F4B3BA14", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:47.455836102Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:40.2533916Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "DA3E9C0ABE252FF76E932F411993920222A47D7B1A080A37508802E1FC66D01D", + "hash": "C75F0D24F0F94548BB1BC1B9D0AB4F304DD3F5170FBAF4B828EE47344EFE7A8C", "parts": { - "hash": "01A0B7D0054F27DFE276467353FD590ADCB7CDCF2DD288862E35E555A5CA6369", + "hash": "B69A825C835F943795E299A93D5BDB8A031E4C6732575942DDD76866DBD9C36B", "total": 1 } }, - "height": "35", + "height": "13", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "oKLVAMNvXRv7irGzr6xmXvCIZ1e0XQigskO1nPXmNm6btYKWomMYcIwTqZzt9e3S/6lGp5rxRd9AIxSzXywgDA==", - "timestamp": "2021-07-16T12:16:47.455836102Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "iCmqBcpgynmzbHYOJVmL02KG1Rf/UDKa1f6LTEoI9yJTvjXfMI4p/rI2v2+06lTJpkv/e0e7g17g/2Di0sWKCA==", + "timestamp": "2021-11-25T17:04:40.2533916Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "993F74E1E788000C029967BB891DAFF9B0C0210470A8242003D81C35CE04594A", + "parts": { + "hash": "15E637900D2D0B224594522FE357D099D7AF5B5FA1F5DDC0185DDDC526DA0503", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_2.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_2.json index 6f57c49eb..4cdde5268 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_2.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_2.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "37", + "height": "15", "last_block_id": { - "hash": "231E2122BB41CCF58E6C05B93AF30571725120F0034C7ACEBB790B41FF967681", + "hash": "993F74E1E788000C029967BB891DAFF9B0C0210470A8242003D81C35CE04594A", "parts": { - "hash": "D7324EFCD611A77E82F51D76DD618A1B8A66E3E230CD86BBEA75A838DC06F832", + "hash": "15E637900D2D0B224594522FE357D099D7AF5B5FA1F5DDC0185DDDC526DA0503", "total": 1 } }, - "last_commit_hash": "3EC5A6297B9190B0BB510B9473D646B81D50B005B7585CB9DD1ECF6904757D6A", + "last_commit_hash": "F158FDEDAD38ACE5046203F892D43202D1F2EB0323D3FB7189E09932FE799893", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:47.983741392Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:40.777942784Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "231E2122BB41CCF58E6C05B93AF30571725120F0034C7ACEBB790B41FF967681", + "hash": "993F74E1E788000C029967BB891DAFF9B0C0210470A8242003D81C35CE04594A", "parts": { - "hash": "D7324EFCD611A77E82F51D76DD618A1B8A66E3E230CD86BBEA75A838DC06F832", + "hash": "15E637900D2D0B224594522FE357D099D7AF5B5FA1F5DDC0185DDDC526DA0503", "total": 1 } }, - "height": "36", + "height": "14", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "xq3AtJ1K/QfZ7vAnRjgOSRJoOMFUgLIIKvBtuC1Qgf6PFi3a70H/zWOOezaGPbQDhPVEF5zDba4ju/WzF0dEDQ==", - "timestamp": "2021-07-16T12:16:47.983741392Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "G6LyYKBCwAfzOyunSfgqOQb7fiOwRudue92N4a31gWmXDnebJlUbdaS4zpS3ZsEWjIlY3bh+W1NsJDwBXvVcBA==", + "timestamp": "2021-11-25T17:04:40.777942784Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "0922C89268B7D399544B2ED22220906234C8A4F3466A053AB7F54FD2B94B448A", + "parts": { + "hash": "F4C132CFC4981A95FB71C635308DAD29562AC88C1C0D5761A6481DAA9F8B01F1", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_3.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_3.json index a4e8be854..04a6cbbd9 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_3.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_3.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "38", + "height": "16", "last_block_id": { - "hash": "4CE8485379A321DDF901AB2E319757E981EC87EB94BA971E89659047C7BEA6BA", + "hash": "0922C89268B7D399544B2ED22220906234C8A4F3466A053AB7F54FD2B94B448A", "parts": { - "hash": "E04B8A765D3DAB72215AC2ACFEF67F7543E9B7E18AC4C4A8A548A9538D8B0D90", + "hash": "F4C132CFC4981A95FB71C635308DAD29562AC88C1C0D5761A6481DAA9F8B01F1", "total": 1 } }, - "last_commit_hash": "89FB87B79CA66FC19193CDE2441B0B58398C78954C2E169D525547EEB432A76D", + "last_commit_hash": "0370BC4B8DF8B26916F6793B882F98AE3CD27E9D3CCFDD917693503728BB9906", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:48.513039779Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:41.30228258Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "4CE8485379A321DDF901AB2E319757E981EC87EB94BA971E89659047C7BEA6BA", + "hash": "0922C89268B7D399544B2ED22220906234C8A4F3466A053AB7F54FD2B94B448A", "parts": { - "hash": "E04B8A765D3DAB72215AC2ACFEF67F7543E9B7E18AC4C4A8A548A9538D8B0D90", + "hash": "F4C132CFC4981A95FB71C635308DAD29562AC88C1C0D5761A6481DAA9F8B01F1", "total": 1 } }, - "height": "37", + "height": "15", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "7l0EDmZewcp4oxDBcLLS/4tw55nwIu78lqMzGA9u07eLu7xvNOJALPZ+DwY4X2VFEc+BUec+tRojA6LegximCQ==", - "timestamp": "2021-07-16T12:16:48.513039779Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "wtsWDiEd7qGArF7QCMjOUrhEg8WRWsUZFBeXM4FKaAcRI/bYBz5+1HbYb91gOm0IclUtMWwoq+mavkTk41A/Bg==", + "timestamp": "2021-11-25T17:04:41.30228258Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "86636B8DFE337462E7B09CA8705C25EA1F06D5BF023C49F3D69439766D0646C0", + "parts": { + "hash": "E1A19A10835CA880002A3D2791DEF7D63DE0D91900C01B1D5DF0024A1B14BE68", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_4.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_4.json index a4eec3d85..2a108a427 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_4.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_4.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "39", + "height": "17", "last_block_id": { - "hash": "918A56A7225058ECC03A4A06CD6E856266C5866524E9BA9322A16E688F53A846", + "hash": "86636B8DFE337462E7B09CA8705C25EA1F06D5BF023C49F3D69439766D0646C0", "parts": { - "hash": "0F0E36E6E15F271AAD7511715A58B38CA021527D1A6E68E86C132954EF484684", + "hash": "E1A19A10835CA880002A3D2791DEF7D63DE0D91900C01B1D5DF0024A1B14BE68", "total": 1 } }, - "last_commit_hash": "40CE1250F271BB17FBF5E6D67CA8E1D25D1CA5A5BDFDAF54295EF36228373DA3", + "last_commit_hash": "B92A6D3A4F69CCD8F9DA342A198DA39F603EF7197C555175055C53E229C4DBED", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:49.037360939Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:41.823831801Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "918A56A7225058ECC03A4A06CD6E856266C5866524E9BA9322A16E688F53A846", + "hash": "86636B8DFE337462E7B09CA8705C25EA1F06D5BF023C49F3D69439766D0646C0", "parts": { - "hash": "0F0E36E6E15F271AAD7511715A58B38CA021527D1A6E68E86C132954EF484684", + "hash": "E1A19A10835CA880002A3D2791DEF7D63DE0D91900C01B1D5DF0024A1B14BE68", "total": 1 } }, - "height": "38", + "height": "16", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "hMmRj3S/M7jVToUZmeRxH8g17fTxLI3CZgkS55T41+MMsn2YZ3j42CyxOtONPpdUDhyZ2Ja1fqAHVIM2jgiqCQ==", - "timestamp": "2021-07-16T12:16:49.037360939Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "Yh8Wr3sxwM1d5eBF7hhq3yIEP1v7ZenldyuV5mgfVYgIessk3zdZ6C26o0SNBeSmdI/eLHjpNMQ8mhq99lu7Dg==", + "timestamp": "2021-11-25T17:04:41.823831801Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "E320D1884F1963A1EEFC4EC0999646EBE115C472B0F669EF088DF0F4B23D55A1", + "parts": { + "hash": "6B52BBB30CEEE34C6D55C4A444D2407534A5E3A7D1B48A1AA0943FB7DD965DC9", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs.json index 5aa08ece8..a9b81794f 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs.json @@ -1,5 +1,5 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": {} } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_0.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_0.json index 3f1748d47..f66cd91f4 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_0.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_0.json @@ -1,35 +1,35 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "41", + "height": "19", "result": { "events": [ { "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgw" + "key": "key", + "value": "tx0" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -40,29 +40,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx0" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE" - ], - "tx.height": [ - "41" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx0" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "19" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_1.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_1.json index 835057872..6c47e6de9 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_1.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_1.json @@ -1,12 +1,12 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "41", + "height": "19", "index": 1, "result": { "events": [ @@ -14,23 +14,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgx" + "key": "key", + "value": "tx1" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -41,29 +41,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx1" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C" - ], - "tx.height": [ - "41" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx1" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "19" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_2.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_2.json index f6d9e251f..21d572fd9 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_2.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_2.json @@ -1,35 +1,35 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "42", + "height": "20", "result": { "events": [ { "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgy" + "key": "key", + "value": "tx2" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -40,29 +40,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx2" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4" - ], - "tx.height": [ - "42" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx2" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "20" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_3.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_3.json index f92f0da5a..ca3cbf2a8 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_3.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_3.json @@ -1,35 +1,35 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "43", + "height": "21", "result": { "events": [ { "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgz" + "key": "key", + "value": "tx3" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -40,29 +40,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx3" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD" - ], - "tx.height": [ - "43" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx3" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "21" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_4.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_4.json index 0a284fae4..4173c05bd 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_4.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_4.json @@ -1,35 +1,35 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "44", + "height": "22", "result": { "events": [ { "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHg0" + "key": "key", + "value": "tx4" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -40,29 +40,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx4" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B" - ], - "tx.height": [ - "44" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx4" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "22" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_0.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_0.json index 83fc9c49f..000fd2fe7 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_0.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_0.json @@ -1,11 +1,12 @@ { - "id": "f04ffeb5-9cfa-4248-a17c-787453bae43a", + "id": "90553359-b197-47a8-a2b4-257e1e6d5f9d", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_1.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_1.json index 9d7b00117..b572da930 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_1.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_1.json @@ -1,11 +1,12 @@ { - "id": "7fc1c81c-5c8a-43f0-aaeb-f862c3eea928", + "id": "379361db-535d-4141-be4a-33200e0aff88", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_2.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_2.json index c70a882eb..07ae98da2 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_2.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_2.json @@ -1,11 +1,12 @@ { - "id": "d0d77026-920a-4686-87a2-bf9206615722", + "id": "eebd09f1-5f2d-44d6-aece-6987d7facc79", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_3.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_3.json index 9324b08af..5ae915c59 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_3.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_3.json @@ -1,11 +1,12 @@ { - "id": "2af206dc-f501-4c7b-9024-fad410875334", + "id": "0596b8cb-645f-4bb4-83a6-0c69cef87d11", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_4.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_4.json index 3f69222e7..35645500e 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_4.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_4.json @@ -1,11 +1,12 @@ { - "id": "349fb5d9-5af4-42c2-acc0-656ce0fd6127", + "id": "d94ad0c6-5fe3-44ea-9e32-aa7780a17e45", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_5.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_5.json index 75c1a33e3..a7b6e318c 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_5.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_5.json @@ -1,11 +1,12 @@ { - "id": "eceb3ffc-0324-4897-8ccd-eea89ae80fd2", + "id": "674400fc-5e82-4a74-8f14-c47d7696e091", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "CC4AC5C231481DD2ED2EA15789483B94565BF41612B6FEDE5BE7694F882CC202", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/tx.json b/rpc/tests/kvstore_fixtures/incoming/tx_no_prove.json similarity index 50% rename from rpc/tests/kvstore_fixtures/incoming/tx.json rename to rpc/tests/kvstore_fixtures/incoming/tx_no_prove.json index 87855a83f..1ea917a92 100644 --- a/rpc/tests/kvstore_fixtures/incoming/tx.json +++ b/rpc/tests/kvstore_fixtures/incoming/tx_no_prove.json @@ -1,11 +1,11 @@ { - "id": "aeca4fe2-9a71-4906-8a8e-91ea4114ea4b", + "id": "0fdbf4b0-6223-49e7-a729-adda09e120a4", "jsonrpc": "2.0", "result": { - "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "12", - "index": 2, - "tx": "Y29tbWl0LWtleT12YWx1ZQ==", + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "height": "20", + "index": 0, + "tx": "dHgwPXZhbHVl", "tx_result": { "code": 0, "codespace": "", @@ -15,23 +15,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" + "key": "key", + "value": "tx0" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" diff --git a/rpc/tests/kvstore_fixtures/incoming/tx_prove.json b/rpc/tests/kvstore_fixtures/incoming/tx_prove.json new file mode 100644 index 000000000..39bb499bf --- /dev/null +++ b/rpc/tests/kvstore_fixtures/incoming/tx_prove.json @@ -0,0 +1,58 @@ +{ + "id": "ca7613d3-1d03-4fcb-9a78-afda77f77250", + "jsonrpc": "2.0", + "result": { + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "height": "20", + "index": 0, + "proof": { + "data": "dHgwPXZhbHVl", + "proof": { + "aunts": [ + "QnwQk7ERU9NjeD1GlLa4H8lscIRFD3evj6SZulKp3T8=" + ], + "index": "0", + "leaf_hash": "3UnhxGnCw+sKtov5uD2YZbCP79vHFwLMc1ZPTaVocKQ=", + "total": "2" + }, + "root_hash": "C77CB763CB27048A8D9F09DA707B7A19ECF4B40C967A57CF16CEDEE1A5130A8F" + }, + "tx": "dHgwPXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx0" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + } + ], + "gas_used": "0", + "gas_wanted": "0", + "info": "", + "log": "" + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/tx_search_no_prove.json b/rpc/tests/kvstore_fixtures/incoming/tx_search_no_prove.json index 8983e7f1f..d3f9da68e 100644 --- a/rpc/tests/kvstore_fixtures/incoming/tx_search_no_prove.json +++ b/rpc/tests/kvstore_fixtures/incoming/tx_search_no_prove.json @@ -1,12 +1,12 @@ { - "id": "9ee74828-e8f1-429d-9d53-254c833bae00", + "id": "24446c5c-eed4-4df6-a514-01e4b2c4de3d", "jsonrpc": "2.0", "result": { "total_count": "8", "txs": [ { "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "height": "34", + "height": "11", "index": 0, "tx": "YXN5bmMta2V5PXZhbHVl", "tx_result": { @@ -18,23 +18,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "YXN5bmMta2V5" + "key": "key", + "value": "async-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -48,7 +48,7 @@ }, { "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "height": "34", + "height": "11", "index": 1, "tx": "c3luYy1rZXk9dmFsdWU=", "tx_result": { @@ -60,23 +60,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "c3luYy1rZXk=" + "key": "key", + "value": "sync-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -90,7 +90,7 @@ }, { "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "34", + "height": "11", "index": 2, "tx": "Y29tbWl0LWtleT12YWx1ZQ==", "tx_result": { @@ -102,23 +102,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" + "key": "key", + "value": "commit-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -132,7 +132,7 @@ }, { "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "height": "41", + "height": "19", "index": 0, "tx": "dHgwPXZhbHVl", "tx_result": { @@ -144,23 +144,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgw" + "key": "key", + "value": "tx0" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -174,7 +174,7 @@ }, { "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "height": "41", + "height": "19", "index": 1, "tx": "dHgxPXZhbHVl", "tx_result": { @@ -186,23 +186,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgx" + "key": "key", + "value": "tx1" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -216,7 +216,7 @@ }, { "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "height": "42", + "height": "20", "index": 0, "tx": "dHgyPXZhbHVl", "tx_result": { @@ -228,23 +228,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgy" + "key": "key", + "value": "tx2" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -258,7 +258,7 @@ }, { "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "height": "43", + "height": "21", "index": 0, "tx": "dHgzPXZhbHVl", "tx_result": { @@ -270,23 +270,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgz" + "key": "key", + "value": "tx3" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -300,7 +300,7 @@ }, { "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "height": "44", + "height": "22", "index": 0, "tx": "dHg0PXZhbHVl", "tx_result": { @@ -312,23 +312,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHg0" + "key": "key", + "value": "tx4" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" diff --git a/rpc/tests/kvstore_fixtures/incoming/tx_search_with_prove.json b/rpc/tests/kvstore_fixtures/incoming/tx_search_with_prove.json index 906773ce6..f79bc5422 100644 --- a/rpc/tests/kvstore_fixtures/incoming/tx_search_with_prove.json +++ b/rpc/tests/kvstore_fixtures/incoming/tx_search_with_prove.json @@ -1,12 +1,12 @@ { - "id": "1cfb0a9f-749f-418a-8f01-34a3268b6b7f", + "id": "65c6ae71-86a4-4bee-9079-e950114f87c9", "jsonrpc": "2.0", "result": { "total_count": "8", "txs": [ { "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "height": "34", + "height": "11", "index": 0, "proof": { "data": "YXN5bmMta2V5PXZhbHVl", @@ -31,23 +31,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "YXN5bmMta2V5" + "key": "key", + "value": "async-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -61,7 +61,7 @@ }, { "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "height": "34", + "height": "11", "index": 1, "proof": { "data": "c3luYy1rZXk9dmFsdWU=", @@ -86,23 +86,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "c3luYy1rZXk=" + "key": "key", + "value": "sync-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -116,7 +116,7 @@ }, { "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "34", + "height": "11", "index": 2, "proof": { "data": "Y29tbWl0LWtleT12YWx1ZQ==", @@ -140,23 +140,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" + "key": "key", + "value": "commit-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -170,7 +170,7 @@ }, { "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "height": "41", + "height": "19", "index": 0, "proof": { "data": "dHgwPXZhbHVl", @@ -194,23 +194,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgw" + "key": "key", + "value": "tx0" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -224,7 +224,7 @@ }, { "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "height": "41", + "height": "19", "index": 1, "proof": { "data": "dHgxPXZhbHVl", @@ -248,23 +248,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgx" + "key": "key", + "value": "tx1" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -278,7 +278,7 @@ }, { "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "height": "42", + "height": "20", "index": 0, "proof": { "data": "dHgyPXZhbHVl", @@ -300,23 +300,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgy" + "key": "key", + "value": "tx2" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -330,7 +330,7 @@ }, { "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "height": "43", + "height": "21", "index": 0, "proof": { "data": "dHgzPXZhbHVl", @@ -352,23 +352,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgz" + "key": "key", + "value": "tx3" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -382,7 +382,7 @@ }, { "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "height": "44", + "height": "22", "index": 0, "proof": { "data": "dHg0PXZhbHVl", @@ -404,23 +404,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHg0" + "key": "key", + "value": "tx4" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" diff --git a/rpc/tests/kvstore_fixtures/outgoing/abci_info.json b/rpc/tests/kvstore_fixtures/outgoing/abci_info.json index 5d743fbf8..fc55d441b 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/abci_info.json +++ b/rpc/tests/kvstore_fixtures/outgoing/abci_info.json @@ -1,5 +1,5 @@ { - "id": "48e82c4a-4018-433e-9557-c40ac927676f", + "id": "332cf099-c4d1-46b6-beaa-cce28a940e48", "jsonrpc": "2.0", "method": "abci_info", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_existing_key.json b/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_existing_key.json index 14b1208b7..6b7a7b1ef 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_existing_key.json +++ b/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_existing_key.json @@ -1,5 +1,5 @@ { - "id": "ae5b4026-3be4-46ea-876e-2177b74e79a7", + "id": "95375ef6-6ca4-4d14-b28e-24deb522b968", "jsonrpc": "2.0", "method": "abci_query", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_non_existent_key.json b/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_non_existent_key.json index 21f71df75..d79ac801b 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_non_existent_key.json +++ b/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_non_existent_key.json @@ -1,5 +1,5 @@ { - "id": "a8a36384-95f9-481f-8fc5-4a820176e869", + "id": "cb61fc5e-5207-4e5e-bf37-9d4d1a0f21a9", "jsonrpc": "2.0", "method": "abci_query", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_0.json b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_0.json index d5749794c..637d60d18 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_0.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_0.json @@ -1,5 +1,5 @@ { - "id": "c0ba0ff6-0afd-4d18-bc15-0891696d42f2", + "id": "f887795a-4940-4152-9460-1c6bb3f87a5a", "jsonrpc": "2.0", "method": "block", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_1.json b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_1.json index 25a3ad803..7fd9c0ae4 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_1.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_1.json @@ -1,5 +1,5 @@ { - "id": "0166b641-4967-4b3c-a36a-73ea4e5a737a", + "id": "a37bcc8e-6a32-4157-9200-a26be9981bbd", "jsonrpc": "2.0", "method": "block", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_10.json b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_10.json index 332870b8a..bbdffad96 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_10.json @@ -1,5 +1,5 @@ { - "id": "d01f0a06-172c-48b8-a9ce-5db74af08ad1", + "id": "988f944f-4d85-486f-ad27-2f3574c2a4a3", "jsonrpc": "2.0", "method": "block", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_results_at_height_10.json b/rpc/tests/kvstore_fixtures/outgoing/block_results_at_height_10.json index 639bef55e..fdcdfd1a2 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_results_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_results_at_height_10.json @@ -1,5 +1,5 @@ { - "id": "421a030f-0b5d-4adb-bb17-537d11228040", + "id": "f3ef9de0-d9af-4708-8c17-6679eea49c35", "jsonrpc": "2.0", "method": "block_results", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_search.json b/rpc/tests/kvstore_fixtures/outgoing/block_search.json index 91e1c9a82..072b11121 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_search.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_search.json @@ -1,5 +1,5 @@ { - "id": "9ee74828-e8f1-429d-9d53-254c833bae00", + "id": "41ddde55-c7d2-4273-9a8d-2c8a68d006b7", "jsonrpc": "2.0", "method": "block_search", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/blockchain_from_1_to_10.json b/rpc/tests/kvstore_fixtures/outgoing/blockchain_from_1_to_10.json index 93e1f51ae..eac0fd39f 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/blockchain_from_1_to_10.json +++ b/rpc/tests/kvstore_fixtures/outgoing/blockchain_from_1_to_10.json @@ -1,5 +1,5 @@ { - "id": "7f156511-df54-4ede-8821-d6932c878ca2", + "id": "b49a0551-ac45-42ce-85da-dfc2ffc0385b", "jsonrpc": "2.0", "method": "blockchain", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_async.json b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_async.json index 755d233dd..d7423dfa8 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_async.json +++ b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_async.json @@ -1,5 +1,5 @@ { - "id": "4efd497c-5b42-458f-b136-b101e764071d", + "id": "fb725d9a-923a-4fd2-99c0-1b7a9bfdc401", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_commit.json b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_commit.json index 5c381e329..b25bd0ae2 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_commit.json +++ b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_commit.json @@ -1,5 +1,5 @@ { - "id": "c32535b9-bec5-4549-9f90-7aa25d6d6a12", + "id": "c3a4ce32-070f-4e72-be11-96dcd6f4615b", "jsonrpc": "2.0", "method": "broadcast_tx_commit", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_sync.json b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_sync.json index 29500d5ac..8d2c4b3d0 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_sync.json +++ b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_sync.json @@ -1,5 +1,5 @@ { - "id": "59795aed-7cb3-4997-803e-f747b8f2cc2f", + "id": "493d43ec-3e1d-476e-928c-faef50754837", "jsonrpc": "2.0", "method": "broadcast_tx_sync", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/commit_at_height_10.json b/rpc/tests/kvstore_fixtures/outgoing/commit_at_height_10.json index 256e154c7..2b3fc2dda 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/commit_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/outgoing/commit_at_height_10.json @@ -1,5 +1,5 @@ { - "id": "21ad34a1-45a5-4766-a917-d5492b24f941", + "id": "6f54a0c9-cc78-4d15-8952-a4f61d757774", "jsonrpc": "2.0", "method": "commit", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/consensus_params.json b/rpc/tests/kvstore_fixtures/outgoing/consensus_params.json index 9562649d8..4e25b2bd7 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/consensus_params.json +++ b/rpc/tests/kvstore_fixtures/outgoing/consensus_params.json @@ -1,5 +1,5 @@ { - "id": "6c5641b5-079a-4d2d-9009-f7d4ce20b2ec", + "id": "e7ef4782-f290-42a1-94fd-bc8e84e76b53", "jsonrpc": "2.0", "method": "consensus_params", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/consensus_state.json b/rpc/tests/kvstore_fixtures/outgoing/consensus_state.json index 942985640..29b3af892 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/consensus_state.json +++ b/rpc/tests/kvstore_fixtures/outgoing/consensus_state.json @@ -1,5 +1,5 @@ { - "id": "523312c6-ea35-4274-b521-401e724bb344", + "id": "51f544e1-0f45-4fd4-ba95-80b073c63137", "jsonrpc": "2.0", "method": "consensus_state", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/genesis.json b/rpc/tests/kvstore_fixtures/outgoing/genesis.json index b0d63b1e4..83368316e 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/genesis.json +++ b/rpc/tests/kvstore_fixtures/outgoing/genesis.json @@ -1,5 +1,5 @@ { - "id": "9f71da58-c631-4141-be10-a9dac3496af0", + "id": "97b6f531-5f8c-424a-91be-9a0caaf6f34d", "jsonrpc": "2.0", "method": "genesis", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/net_info.json b/rpc/tests/kvstore_fixtures/outgoing/net_info.json index 3588ea1fd..f9752861f 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/net_info.json +++ b/rpc/tests/kvstore_fixtures/outgoing/net_info.json @@ -1,5 +1,5 @@ { - "id": "a01a558c-a893-415a-8f57-21f104d1aa46", + "id": "87e7b1f1-46bc-4789-8978-f570ed2600b1", "jsonrpc": "2.0", "method": "net_info", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/status.json b/rpc/tests/kvstore_fixtures/outgoing/status.json index b2e090c93..ba1dacbf8 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/status.json +++ b/rpc/tests/kvstore_fixtures/outgoing/status.json @@ -1,5 +1,5 @@ { - "id": "7acd6adc-648a-4e73-88de-911fb2db10c5", + "id": "84cd8df6-1ab8-4678-9294-7c7f63b60ad7", "jsonrpc": "2.0", "method": "status", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_malformed.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_malformed.json index 8964332fc..d4a0b9a04 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_malformed.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_malformed.json @@ -1,5 +1,5 @@ { - "id": "502f1307-1edc-45d8-9495-5c41a61c1885", + "id": "0d873a57-cfe4-4e5a-829f-4ec93f7bf4ba", "jsonrpc": "2.0", "method": "subscribe", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_newblock.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_newblock.json index 6d4434699..4878f59a5 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_newblock.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_newblock.json @@ -1,5 +1,5 @@ { - "id": "8fd4ce82-da4b-439b-b6a2-013dd31b33fc", + "id": "525ea6b8-bc6b-4f29-b9b7-241ce2a3f5b5", "jsonrpc": "2.0", "method": "subscribe", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs.json index 8e2910d9a..aecc8a8a0 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs.json @@ -1,5 +1,5 @@ { - "id": "30306628-9f5c-4846-acc2-08a7e1843afc", + "id": "c68ff230-5dc6-4d13-8ad7-2ed4a6009c2d", "jsonrpc": "2.0", "method": "subscribe", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_0.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_0.json index 3602d6eaf..423d9e32e 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_0.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_0.json @@ -1,5 +1,5 @@ { - "id": "f04ffeb5-9cfa-4248-a17c-787453bae43a", + "id": "90553359-b197-47a8-a2b4-257e1e6d5f9d", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_1.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_1.json index 76e92bc2d..927d2a7bc 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_1.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_1.json @@ -1,5 +1,5 @@ { - "id": "7fc1c81c-5c8a-43f0-aaeb-f862c3eea928", + "id": "379361db-535d-4141-be4a-33200e0aff88", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_2.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_2.json index 57651cf54..192718f2c 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_2.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_2.json @@ -1,5 +1,5 @@ { - "id": "d0d77026-920a-4686-87a2-bf9206615722", + "id": "eebd09f1-5f2d-44d6-aece-6987d7facc79", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_3.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_3.json index 7050a8751..3469677f2 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_3.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_3.json @@ -1,5 +1,5 @@ { - "id": "2af206dc-f501-4c7b-9024-fad410875334", + "id": "0596b8cb-645f-4bb4-83a6-0c69cef87d11", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_4.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_4.json index 429ddc28a..42e6b2953 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_4.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_4.json @@ -1,5 +1,5 @@ { - "id": "349fb5d9-5af4-42c2-acc0-656ce0fd6127", + "id": "d94ad0c6-5fe3-44ea-9e32-aa7780a17e45", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_5.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_5.json index b88b0fa07..6306b6db4 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_5.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_5.json @@ -1,5 +1,5 @@ { - "id": "eceb3ffc-0324-4897-8ccd-eea89ae80fd2", + "id": "674400fc-5e82-4a74-8f14-c47d7696e091", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx.json b/rpc/tests/kvstore_fixtures/outgoing/tx.json deleted file mode 100644 index 1a3535ad0..000000000 --- a/rpc/tests/kvstore_fixtures/outgoing/tx.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "id": "aeca4fe2-9a71-4906-8a8e-91ea4114ea4b", - "jsonrpc": "2.0", - "method": "tx", - "params": { - "hash": "1j+cI3keYQQQtXbYwnu1rqyTzBpYUiQop7MqEnYIWGA=", - "prove": false - } -} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx_no_prove.json b/rpc/tests/kvstore_fixtures/outgoing/tx_no_prove.json new file mode 100644 index 000000000..e2c779442 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/outgoing/tx_no_prove.json @@ -0,0 +1,9 @@ +{ + "id": "0fdbf4b0-6223-49e7-a729-adda09e120a4", + "jsonrpc": "2.0", + "method": "tx", + "params": { + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "prove": false + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx_prove.json b/rpc/tests/kvstore_fixtures/outgoing/tx_prove.json new file mode 100644 index 000000000..6d9c6bd56 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/outgoing/tx_prove.json @@ -0,0 +1,9 @@ +{ + "id": "ca7613d3-1d03-4fcb-9a78-afda77f77250", + "jsonrpc": "2.0", + "method": "tx", + "params": { + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "prove": true + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx_search_no_prove.json b/rpc/tests/kvstore_fixtures/outgoing/tx_search_no_prove.json index 117d7537c..b7c3549f6 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/tx_search_no_prove.json +++ b/rpc/tests/kvstore_fixtures/outgoing/tx_search_no_prove.json @@ -1,5 +1,5 @@ { - "id": "9ee74828-e8f1-429d-9d53-254c833bae00", + "id": "24446c5c-eed4-4df6-a514-01e4b2c4de3d", "jsonrpc": "2.0", "method": "tx_search", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx_search_with_prove.json b/rpc/tests/kvstore_fixtures/outgoing/tx_search_with_prove.json index f910032df..9726d8ea9 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/tx_search_with_prove.json +++ b/rpc/tests/kvstore_fixtures/outgoing/tx_search_with_prove.json @@ -1,5 +1,5 @@ { - "id": "1cfb0a9f-749f-418a-8f01-34a3268b6b7f", + "id": "65c6ae71-86a4-4bee-9079-e950114f87c9", "jsonrpc": "2.0", "method": "tx_search", "params": { diff --git a/rpc/tests/parse_response.rs b/rpc/tests/parse_response.rs deleted file mode 100644 index 6acc0c345..000000000 --- a/rpc/tests/parse_response.rs +++ /dev/null @@ -1,512 +0,0 @@ -//! Tendermint RPC endpoint testing. - -use std::{fs, path::PathBuf}; -use tendermint::abci::Code; - -use core::str::FromStr; -use tendermint::vote; -use tendermint_rpc::endpoint::consensus_state::RoundVote; -use tendermint_rpc::{ - endpoint, - error::{Error, ErrorDetail}, - Code as RpcCode, Response, -}; - -const EXAMPLE_APP: &str = "GaiaApp"; -const EXAMPLE_CHAIN: &str = "cosmoshub-2"; - -fn read_json_fixture(name: &str) -> String { - fs::read_to_string(PathBuf::from("./tests/support/").join(name.to_owned() + ".json")).unwrap() -} - -#[test] -fn abci_info() { - let response = endpoint::abci_info::Response::from_string(&read_json_fixture("abci_info")) - .unwrap() - .response; - - assert_eq!(response.data.as_str(), EXAMPLE_APP); - assert_eq!(response.last_block_height.value(), 488_120); -} - -#[test] -fn abci_query() { - let response = endpoint::abci_query::Response::from_string(&read_json_fixture("abci_query")) - .unwrap() - .response; - - assert_eq!(response.height.value(), 1); - assert!(response.proof.is_some()); - let proof = response.proof.unwrap(); - assert_eq!(proof.ops.len(), 2); - assert_eq!(proof.ops[0].field_type, "iavl:v"); - assert_eq!(proof.ops[1].field_type, "multistore"); -} - -#[test] -fn block() { - let response = endpoint::block::Response::from_string(&read_json_fixture("block")).unwrap(); - - assert_eq!(response.block.header.version.block, 10); - assert_eq!(response.block.header.chain_id.as_str(), EXAMPLE_CHAIN); - assert_eq!(response.block.header.height.value(), 10); - assert_eq!(response.block.data.iter().len(), 0); - assert_eq!(response.block.evidence.iter().len(), 0); - assert_eq!( - response - .block - .last_commit - .as_ref() - .unwrap() - .signatures - .len(), - 1 - ); -} - -#[test] -fn block_with_evidences() { - let response = - endpoint::block::Response::from_string(&read_json_fixture("block_with_evidences")).unwrap(); - - let evidence = response.block.evidence.iter().next().unwrap(); - - match evidence { - tendermint::evidence::Evidence::DuplicateVote(_) => (), - _ => unreachable!(), - } -} - -// TODO: Update this test and its json file -// #[test] -// fn block_empty_block_id() { -// let response = -// endpoint::block::Response::from_string(&read_json_fixture("block_empty_block_id")) -// .unwrap(); -// -// let tendermint::Block { last_commit, .. } = response.block; -// -// assert_eq!(last_commit.as_ref().unwrap().precommits.len(), 2); -// assert!(last_commit.unwrap().precommits[0] -// .as_ref() -// .unwrap() -// .block_id -// .is_none()); -// } - -#[test] -fn first_block() { - let response = - endpoint::block::Response::from_string(&read_json_fixture("first_block")).unwrap(); - - assert_eq!(response.block.header.version.block, 10); - assert_eq!(response.block.header.chain_id.as_str(), EXAMPLE_CHAIN); - assert_eq!(response.block.header.height.value(), 1); - assert!(response.block.header.last_block_id.is_none()); - - assert_eq!(response.block.data.iter().len(), 0); - assert_eq!(response.block.evidence.iter().len(), 0); - assert!(response.block.last_commit.is_none()); -} -#[test] -fn block_results() { - let response = - endpoint::block_results::Response::from_string(&read_json_fixture("block_results")) - .unwrap(); - assert_eq!(response.height.value(), 1814); - - let validator_updates = response.validator_updates; - let deliver_tx = response.txs_results.unwrap(); - let log_json = deliver_tx[0].log.value(); - let log_json_value = serde_json::Value::from_str(log_json.as_str()).unwrap(); - - assert_eq!(log_json_value[0]["msg_index"].as_str().unwrap(), "0"); - assert!(log_json_value[0]["success"].as_bool().unwrap()); - - assert_eq!(deliver_tx[0].gas_wanted.value(), 200_000); - assert_eq!(deliver_tx[0].gas_used.value(), 105_662); - assert_eq!(deliver_tx[0].events.len(), 1); - assert_eq!(deliver_tx[0].events[0].attributes.len(), 3); - assert_eq!(deliver_tx[0].events[0].attributes[0].key.as_ref(), "action"); - assert_eq!( - deliver_tx[0].events[0].attributes[0].value.as_ref(), - "delegate" - ); - - assert_eq!(validator_updates[0].power.value(), 1_233_243); -} - -#[test] -fn blockchain() { - let response = - endpoint::blockchain::Response::from_string(&read_json_fixture("blockchain")).unwrap(); - - assert_eq!(response.last_height.value(), 488_556); - assert_eq!(response.block_metas.len(), 10); - - let block_meta = &response.block_metas[0]; - assert_eq!(block_meta.header.chain_id.as_str(), EXAMPLE_CHAIN) -} - -#[test] -fn broadcast_tx_async() { - let response = endpoint::broadcast::tx_async::Response::from_string(&read_json_fixture( - "broadcast_tx_async", - )) - .unwrap(); - - assert_eq!( - &response.hash.to_string(), - "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - ); -} - -#[test] -fn broadcast_tx_sync() { - let response = endpoint::broadcast::tx_sync::Response::from_string(&read_json_fixture( - "broadcast_tx_sync", - )) - .unwrap(); - - assert_eq!(response.code, Code::Ok); - assert_eq!( - &response.hash.to_string(), - "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - ); -} - -#[test] -fn broadcast_tx_sync_int() { - let response = endpoint::broadcast::tx_sync::Response::from_string(&read_json_fixture( - "broadcast_tx_sync_int", - )) - .unwrap(); - - assert_eq!(response.code, Code::Ok); - assert_eq!( - &response.hash.to_string(), - "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - ); -} - -#[test] -fn broadcast_tx_commit() { - let response = endpoint::broadcast::tx_commit::Response::from_string(&read_json_fixture( - "broadcast_tx_commit", - )) - .unwrap(); - - assert_eq!( - response.deliver_tx.data.unwrap().value(), - &vec![ - 10, 22, 10, 20, 99, 111, 110, 110, 101, 99, 116, 105, 111, 110, 95, 111, 112, 101, 110, - 95, 105, 110, 105, 116 - ] - ); - assert_eq!( - &response.hash.to_string(), - "EFA00D85332A8197CF290E4724BAC877EA93DDFE547A561828BAE45A29BF1DAD" - ); - assert_eq!(5, response.deliver_tx.events.len()); -} - -#[test] -fn broadcast_tx_commit_null_data() { - let response = endpoint::broadcast::tx_commit::Response::from_string(&read_json_fixture( - "broadcast_tx_commit_null_data", - )) - .unwrap(); - - assert_eq!( - &response.hash.to_string(), - "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - ); -} - -#[test] -fn commit() { - let response = endpoint::commit::Response::from_string(&read_json_fixture("commit")).unwrap(); - let header = response.signed_header.header; - assert_eq!(header.chain_id.as_ref(), "dockerchain"); - // For now we just want to make sure the commit including precommits and a block_id exist - // in SignedHeader; later we should verify some properties: e.g. block_id.hash matches the - // header etc: - let commit = response.signed_header.commit; - let block_id = commit.block_id; - let _signatures = &commit.signatures; - assert_eq!(header.hash(), block_id.hash); -} - -#[test] -fn commit_height_1() { - let response = endpoint::commit::Response::from_string(&read_json_fixture("commit_1")).unwrap(); - let header = response.signed_header.header; - let commit = response.signed_header.commit; - let block_id = commit.block_id; - assert_eq!(header.hash(), block_id.hash); -} - -#[test] -fn genesis() { - let response = endpoint::genesis::Response::from_string(&read_json_fixture("genesis")).unwrap(); - - let tendermint::Genesis { - chain_id, - consensus_params, - .. - } = response.genesis; - - assert_eq!(chain_id.as_str(), EXAMPLE_CHAIN); - assert_eq!(consensus_params.block.max_bytes, 200_000); -} - -#[test] -fn health() { - endpoint::health::Response::from_string(&read_json_fixture("health")).unwrap(); -} - -#[test] -fn net_info() { - let response = - endpoint::net_info::Response::from_string(&read_json_fixture("net_info")).unwrap(); - - assert_eq!(response.n_peers, 2); - assert_eq!(response.peers[0].node_info.network.as_str(), EXAMPLE_CHAIN); -} - -#[test] -fn status() { - let response = endpoint::status::Response::from_string(&read_json_fixture("status")).unwrap(); - - assert_eq!(response.node_info.network.as_str(), EXAMPLE_CHAIN); - assert_eq!(response.sync_info.latest_block_height.value(), 410_744); - assert_eq!(response.validator_info.power.value(), 0); -} - -#[test] -fn validators() { - let response = - endpoint::validators::Response::from_string(&read_json_fixture("validators")).unwrap(); - - assert_eq!(response.block_height.value(), 42); - - let validators = response.validators; - assert_eq!(validators.len(), 65); -} - -#[test] -fn jsonrpc_error() { - let result = endpoint::blockchain::Response::from_string(&read_json_fixture("error")); - - match result { - Err(Error(ErrorDetail::Response(e), _)) => { - let response = e.source; - assert_eq!(response.code(), RpcCode::InternalError); - assert_eq!(response.message(), "Internal error"); - assert_eq!( - response.data().unwrap(), - "min height 321 can't be greater than max height 123" - ); - } - _ => panic!("expected Response error"), - } -} - -#[test] -fn tx_no_prove() { - let tx = endpoint::tx::Response::from_string(&read_json_fixture("tx_no_prove")).unwrap(); - - assert_eq!( - "291B44C883803751917D547238EAC419E968C0171A3154D777B2EA8EA5039C57", - tx.hash.to_string() - ); - assert_eq!(2, tx.height.value()); - - let events = &tx.tx_result.events; - assert_eq!(events.len(), 6); - assert_eq!(events[0].attributes.len(), 3); - assert_eq!(events[0].attributes[0].key.as_ref(), "recipient"); - assert_eq!( - events[0].attributes[0].value.as_ref(), - "cosmos17xpfvakm2amg962yls6f84z3kell8c5lserqta" - ); - - assert!(tx.proof.is_none()); -} - -#[test] -fn tx_with_prove() { - let tx = endpoint::tx::Response::from_string(&read_json_fixture("tx_with_prove")).unwrap(); - - assert_eq!( - "291B44C883803751917D547238EAC419E968C0171A3154D777B2EA8EA5039C57", - tx.hash.to_string() - ); - assert_eq!(2, tx.height.value()); - - let events = &tx.tx_result.events; - assert_eq!(events.len(), 6); - assert_eq!(events[0].attributes.len(), 3); - assert_eq!(events[0].attributes[0].key.as_ref(), "recipient"); - assert_eq!( - events[0].attributes[0].value.as_ref(), - "cosmos17xpfvakm2amg962yls6f84z3kell8c5lserqta" - ); - - let proof = tx.proof.as_ref().unwrap(); - assert_eq!( - vec![ - 10, 159, 1, 10, 142, 1, 10, 28, 47, 99, 111, 115, 109, 111, 115, 46, 98, 97, 110, 107, - 46, 118, 49, 98, 101, 116, 97, 49, 46, 77, 115, 103, 83, 101, 110, 100, 18, 110, 10, - 45, 99, 111, 115, 109, 111, 115, 49, 115, 50, 116, 119, 52, 53, 99, 55, 115, 116, 115, - 97, 102, 107, 52, 50, 118, 115, 122, 57, 115, 106, 48, 57, 106, 109, 48, 57, 121, 54, - 116, 107, 52, 113, 101, 101, 114, 104, 18, 45, 99, 111, 115, 109, 111, 115, 49, 110, - 118, 51, 117, 102, 55, 104, 112, 117, 118, 107, 52, 101, 109, 51, 57, 118, 120, 114, - 57, 52, 52, 104, 112, 104, 117, 106, 116, 117, 113, 97, 50, 120, 108, 55, 54, 56, 56, - 26, 14, 10, 9, 115, 97, 109, 111, 108, 101, 97, 110, 115, 18, 1, 49, 18, 9, 116, 101, - 115, 116, 32, 109, 101, 109, 111, 24, 169, 70, 18, 102, 10, 78, 10, 70, 10, 31, 47, 99, - 111, 115, 109, 111, 115, 46, 99, 114, 121, 112, 116, 111, 46, 115, 101, 99, 112, 50, - 53, 54, 107, 49, 46, 80, 117, 98, 75, 101, 121, 18, 35, 10, 33, 3, 98, 211, 158, 175, - 190, 7, 170, 66, 0, 20, 131, 204, 81, 56, 214, 191, 143, 101, 195, 149, 126, 234, 114, - 55, 58, 237, 26, 39, 95, 114, 111, 164, 18, 4, 10, 2, 8, 1, 18, 20, 10, 14, 10, 9, 115, - 97, 109, 111, 108, 101, 97, 110, 115, 18, 1, 49, 16, 160, 141, 6, 26, 64, 185, 213, - 205, 42, 231, 20, 240, 14, 103, 188, 41, 94, 116, 55, 181, 30, 185, 212, 221, 131, 145, - 132, 32, 83, 223, 255, 85, 10, 220, 211, 124, 172, 29, 152, 55, 91, 199, 85, 165, 186, - 68, 87, 22, 14, 235, 208, 43, 62, 93, 129, 228, 237, 222, 77, 146, 245, 107, 123, 173, - 19, 73, 154, 174, 249 - ], - proof.data - ); - assert_eq!( - vec![ - 105, 196, 2, 216, 75, 198, 114, 80, 111, 27, 54, 17, 4, 107, 139, 37, 40, 156, 38, 0, - 253, 122, 0, 118, 137, 197, 148, 154, 51, 32, 101, 87 - ], - proof.root_hash - ); -} - -#[test] -fn tx_search_no_prove() { - let response = - endpoint::tx_search::Response::from_string(&read_json_fixture("tx_search_no_prove")) - .unwrap(); - - assert_eq!(8, response.total_count); - assert_eq!(8, response.txs.len()); - assert_eq!( - "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - response.txs[0].hash.to_string() - ); - assert_eq!(11, response.txs[0].height.value()); - assert!(response.txs[0].proof.is_none()); - - let events = &response.txs[0].tx_result.events; - assert_eq!(events.len(), 1); - assert_eq!(events[0].attributes.len(), 4); - assert_eq!(events[0].attributes[0].key.as_ref(), "creator"); - assert_eq!(events[0].attributes[0].value.as_ref(), "Cosmoshi Netowoko"); -} - -#[test] -fn tx_search_with_prove() { - let response = - endpoint::tx_search::Response::from_string(&read_json_fixture("tx_search_with_prove")) - .unwrap(); - - assert_eq!(8, response.total_count); - assert_eq!(8, response.txs.len()); - assert_eq!( - "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - response.txs[0].hash.to_string() - ); - assert_eq!(11, response.txs[0].height.value()); - let proof = response.txs[0].proof.as_ref().unwrap(); - assert_eq!( - vec![97, 115, 121, 110, 99, 45, 107, 101, 121, 61, 118, 97, 108, 117, 101], - proof.data - ); - assert_eq!( - vec![ - 245, 70, 67, 176, 5, 16, 101, 200, 125, 163, 26, 101, 69, 49, 182, 95, 155, 87, 56, 15, - 155, 243, 51, 47, 245, 188, 167, 88, 69, 103, 38, 140 - ], - proof.root_hash - ); - - let events = &response.txs[0].tx_result.events; - assert_eq!(events.len(), 1); - assert_eq!(events[0].attributes.len(), 4); - assert_eq!(events[0].attributes[0].key.as_ref(), "creator"); - assert_eq!(events[0].attributes[0].value.as_ref(), "Cosmoshi Netowoko"); -} - -#[test] -fn consensus_state() { - let response = - endpoint::consensus_state::Response::from_string(&read_json_fixture("consensus_state")) - .unwrap(); - - let hrs = &response.round_state.height_round_step; - assert_eq!(hrs.height.value(), 1262197); - assert_eq!(hrs.round.value(), 0); - assert_eq!(hrs.step, 8); - - let hvs = &response.round_state.height_vote_set; - assert_eq!(hvs.len(), 1); - assert_eq!(hvs[0].round, 0); - assert_eq!(hvs[0].prevotes.len(), 2); - match &hvs[0].prevotes[0] { - RoundVote::Vote(summary) => { - assert_eq!(summary.validator_index, 0); - assert_eq!( - summary.validator_address_fingerprint.as_ref(), - vec![0, 0, 1, 228, 67, 253] - ); - assert_eq!(summary.height.value(), 1262197); - assert_eq!(summary.round.value(), 0); - assert_eq!(summary.vote_type, vote::Type::Prevote); - assert_eq!( - summary.block_id_hash_fingerprint.as_ref(), - vec![99, 74, 218, 241, 244, 2] - ); - assert_eq!( - summary.signature_fingerprint.as_ref(), - vec![123, 185, 116, 225, 186, 64] - ); - assert_eq!( - summary.timestamp.as_rfc3339(), - "2019-08-01T11:52:35.513572509Z" - ); - } - _ => panic!("unexpected round vote type: {:?}", hvs[0].prevotes[0]), - } - assert_eq!(hvs[0].prevotes[1], RoundVote::Nil); - assert_eq!(hvs[0].precommits.len(), 2); - match &hvs[0].precommits[0] { - RoundVote::Vote(summary) => { - assert_eq!(summary.validator_index, 5); - assert_eq!( - summary.validator_address_fingerprint.as_ref(), - vec![24, 199, 141, 19, 92, 157] - ); - assert_eq!(summary.height.value(), 1262197); - assert_eq!(summary.round.value(), 0); - assert_eq!(summary.vote_type, vote::Type::Precommit); - assert_eq!( - summary.block_id_hash_fingerprint.as_ref(), - vec![99, 74, 218, 241, 244, 2] - ); - assert_eq!( - summary.signature_fingerprint.as_ref(), - vec![139, 94, 255, 254, 171, 205] - ); - assert_eq!( - summary.timestamp.as_rfc3339(), - "2019-08-01T11:52:36.25600005Z" - ); - } - _ => panic!("unexpected round vote type: {:?}", hvs[0].precommits[0]), - } - assert_eq!(hvs[0].precommits[1], RoundVote::Nil); -} diff --git a/rpc/tests/support/abci_info.json b/rpc/tests/support/abci_info.json deleted file mode 100644 index 5b4ea0d74..000000000 --- a/rpc/tests/support/abci_info.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "response": { - "data": "GaiaApp", - "version": "0.17.0", - "app_version": "1", - "last_block_height": "488120", - "last_block_app_hash": "UAAAAAAAAAA=" - } - } -} \ No newline at end of file diff --git a/rpc/tests/support/abci_query.json b/rpc/tests/support/abci_query.json deleted file mode 100644 index 933608a6c..000000000 --- a/rpc/tests/support/abci_query.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "response": { - "log": "exists", - "height": "1", - "proofOps": { - "ops": [ - { - "type": "iavl:v", - "key": "Y29uc2Vuc3VzU3RhdGUvaWJjb25lY2xpZW50LzIy", - "data": "8QEK7gEKKAgIEAwYHCIgG9RAkJgHlxNjmyzOW6bUAidhiRSja0x6+GXCVENPG1oKKAgGEAUYFyIgwRns+dJvjf1Zk2BaFrXz8inPbvYHB7xx2HCy9ima5f8KKAgEEAMYFyogOr8EGajEV6fG5fzJ2fAAvVMgRLhdMJTzCPlogl9rxlIKKAgCEAIYFyIgcjzX/a+2bFbnNldpawQqZ+kYhIwz5r4wCUzuu1IFW04aRAoeY29uc2Vuc3VzU3RhdGUvaWJjb25lY2xpZW50LzIyEiAZ1uuG60K4NHJZZMuS9QX6o4eEhica5jIHYwflRiYkDBgX" - }, - { - "type": "multistore", - "key": "aWJj", - "data": "CvEECjAKBGJhbmsSKAomCIjYAxIg2MEyyonbZButYnvSRkf2bPQg+nqA+Am1MeDxG6F4p1UKLwoDYWNjEigKJgiI2AMSIN2YHczeuXNvyetrSFQpkCcJzfB6PXVCw0i/XShMgPnIChEKB3VwZ3JhZGUSBgoECIjYAwovCgNnb3YSKAomCIjYAxIgYM0TfBli7KxhY4nWgDSDPykhUJwtKFql9RU5l86WinQKLwoDaWJjEigKJgiI2AMSIFp6aJASeInQKF8y824zjmgcFORN6M+ECbgFfJkobKs8CjAKBG1haW4SKAomCIjYAxIgsZzwmLQ7PH1UeZ/vCUSqlQmfgt3CGfoMgJLkUqKCv0EKMwoHc3Rha2luZxIoCiYIiNgDEiCiBZoBLyDGj5euy3n33ik+SpqYK9eB5xbI+iY8ycYVbwo0CghzbGFzaGluZxIoCiYIiNgDEiAJz3gEYuIhdensHU3b5qH5ons2quepd6EaRgCHXab6PQoyCgZzdXBwbHkSKAomCIjYAxIglWLA5/THPTiTxAlaLHOBYFIzEJTmKPznItUwAc8zD+AKEgoIZXZpZGVuY2USBgoECIjYAwowCgRtaW50EigKJgiI2AMSIMS8dZ1j8F6JVVv+hB1rHBZC+gIFJxHan2hM8qDC64n/CjIKBnBhcmFtcxIoCiYIiNgDEiB8VIzExUHX+SvHZFz/P9NM9THnw/gTDDLVReuZX8htLgo4CgxkaXN0cmlidXRpb24SKAomCIjYAxIg3u/Nd4L+8LT8OXJCh14o8PHIJ/GLQwsmE7KYIl1GdSYKEgoIdHJhbnNmZXISBgoECIjYAw==" - } - ] - }, - "value": "61626364", - "key": "61626364", - "index": "-1", - "code": "0" - } - } -} diff --git a/rpc/tests/support/block.json b/rpc/tests/support/block.json deleted file mode 100644 index 2a8bd2e7a..000000000 --- a/rpc/tests/support/block.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "block_id": { - "hash": "4FFD15F274758E474898498A191EB8CA6FC6C466576255DA132908A12AC1674C", - "part_set_header": { - "total": 1, - "hash": "BBA710736635FA20CDB4F48732563869E90871D31FE9E7DE3D900CD4334D8775" - } - }, - "block": { - "header": { - "version": { - "block": "10", - "app": "1" - }, - "chain_id": "cosmoshub-2", - "height": "10", - "time": "2020-03-15T16:57:08.151Z", - "last_block_id": { - "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "part_set_header": { - "total": 1, - "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" - } - }, - "last_commit_hash": "594F029060D5FAE6DDF82C7DC4612055EC7F941DFED34D43B2754008DC3BBC77", - "data_hash": "", - "validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "next_validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "A48091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "evidence_hash": "", - "proposer_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": null - }, - "last_commit": { - "height": "9", - "round": 0, - "block_id": { - "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "part_set_header": { - "total": 1, - "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3", - "timestamp": "2020-03-15T16:57:08.151Z", - "signature": "GRBX/UNaf19vs5byJfAuXk2FQ05soOHmaMFCbrNBhHdNZtFKHp6J9eFwZrrG+YCxKMdqPn2tQWAes6X8kpd1DA==" - } - ] - } - } - } -} \ No newline at end of file diff --git a/rpc/tests/support/block_empty_block_id.json b/rpc/tests/support/block_empty_block_id.json deleted file mode 100644 index f0396d701..000000000 --- a/rpc/tests/support/block_empty_block_id.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "block_meta": { - "block_id": { - "hash": "17E077714CE817C0DB3118D21EA060B2A16D9F07CB08AB603292F797FFD7F361", - "part_set_header": { - "total": "1", - "hash": "1ED5B68A21D82D091C25D535F52C2D47419162618245C60D69B162A366F97A45" - } - }, - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "test-ab", - "height": "20", - "time": "2019-12-24T11:03:18.276852105Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "part_set_header": { - "total": "1", - "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" - } - }, - "last_commit_hash": "4D58DEA6B78D344255F6A7B0756F18D98DDFDF870D930337E13B6C7236BD07B0", - "data_hash": "", - "validators_hash": "A3E1386AC4A481A2A9DEB063B4D85973F1B789A2ECB15730B7E77FFFC698EC01", - "next_validators_hash": "A3E1386AC4A481A2A9DEB063B4D85973F1B789A2ECB15730B7E77FFFC698EC01", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "98F00A4EA270197259504954450D5ED5FA878284920FCC08070385C06F9B6515", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "F18E6EE0D8AD707CED69D0606F30035B07E37DDF" - } - }, - "block": { - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "test-ab", - "height": "20", - "time": "2019-12-24T11:03:18.276852105Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "part_set_header": { - "total": "1", - "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" - } - }, - "last_commit_hash": "4D58DEA6B78D344255F6A7B0756F18D98DDFDF870D930337E13B6C7236BD07B0", - "data_hash": "", - "validators_hash": "A3E1386AC4A481A2A9DEB063B4D85973F1B789A2ECB15730B7E77FFFC698EC01", - "next_validators_hash": "A3E1386AC4A481A2A9DEB063B4D85973F1B789A2ECB15730B7E77FFFC698EC01", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "98F00A4EA270197259504954450D5ED5FA878284920FCC08070385C06F9B6515", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "F18E6EE0D8AD707CED69D0606F30035B07E37DDF" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": null - }, - "last_commit": { - "block_id": { - "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "part_set_header": { - "total": "1", - "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" - } - }, - "precommits": [ - { - "type": 2, - "height": "19", - "round": "0", - "block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "timestamp": "2019-12-24T11:03:18.534146209Z", - "validator_address": "9ACE9BC3DC3455BC89427F53172077D84E54D5BD", - "validator_index": "0", - "signature": "1Go3/vHT/g9tplm3TtaiFupZG1tYYycLf4HXbVJvN3lWD91KwZA4SNKSfzRX5ccOQXy1QTqjLk1Zquc/4w00DQ==" - }, - { - "type": 2, - "height": "19", - "round": "0", - "block_id": { - "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "part_set_header": { - "total": "1", - "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" - } - }, - "timestamp": "2019-12-24T11:03:18.276852105Z", - "validator_address": "F18E6EE0D8AD707CED69D0606F30035B07E37DDF", - "validator_index": "1", - "signature": "pE4CEh2HnXmZ8UfCcvuQ/3udpzoWTT9cxRzEv5XdTyV+WEQNna8oO2uflFc/5wORB/DoGmUjOlfS512HcfFuBQ==" - } - ] - } - } - } -} diff --git a/rpc/tests/support/block_results.json b/rpc/tests/support/block_results.json deleted file mode 100644 index d87d51011..000000000 --- a/rpc/tests/support/block_results.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "height": "1814", - "txs_results": [ - { - "code": "0", - "log": "[{\"msg_index\":\"0\",\"success\":true,\"log\":\"\"}]", - "info": "", - "gas_wanted": "200000", - "gas_used": "105662", - "data": null, - "events": [ - { - "type": "someevent1", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "ZGVsZWdhdGU=" - }, - { - "key": "ZGVsZWdhdG9y", - "value": "Y29zbW9zMW53eWV5cXVkenJ1NWw2NGU4M2RubXE3OXE0c3Rxejdmd2w1djVh" - }, - { - "key": "ZGVzdGluYXRpb24tdmFsaWRhdG9y", - "value": "Y29zbW9zdmFsb3BlcjFlaDVtd3UwNDRnZDVudGtrYzJ4Z2ZnODI0N21nYzU2Zno0c2RnMw==" - } - ] - } - ], - "codespace": "" - }, - { - "code": "0", - "log": "[{\"msg_index\":\"0\",\"success\":true,\"log\":\"\"}]", - "info": "", - "gas_wanted": "99164", - "gas_used": "99164", - "data": null, - "events": [ - { - "type": "someevent2", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "ZGVsZWdhdGU=" - }, - { - "key": "ZGVsZWdhdG9y", - "value": "Y29zbW9zMTBhN2V2eXlkY2s0Mm5odGE5M3RubXY3eXU0aGFxenQ5NHh5dTU0" - }, - { - "key": "ZGVzdGluYXRpb24tdmFsaWRhdG9y", - "value": "Y29zbW9zdmFsb3BlcjF1cnRweHdmdXU4azU3YXF0MGg1emhzdm1qdDRtMm1tZHIwanV6Zw==" - } - ] - } - ], - "codespace": "" - }, - { - "code": "0", - "log": "[{\"msg_index\":\"0\",\"success\":true,\"log\":\"\"}]", - "info": "", - "gas_wanted": "200000", - "gas_used": "106515", - "data": null, - "events": [ - { - "type": "someeventtype1", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "ZGVsZWdhdGU=" - }, - { - "key": "ZGVsZWdhdG9y", - "value": "Y29zbW9zMXFtcmNqenNrZ3Rsd21mczlwcWRyZnBtcDVsNWM4cDVyM3kzZTl0" - }, - { - "key": "ZGVzdGluYXRpb24tdmFsaWRhdG9y", - "value": "Y29zbW9zdmFsb3BlcjFzeHg5bXN6dmUwZ2FlZHo1bGQ3cWRramtmdjh6OTkyYXg2OWswOA==" - } - ] - } - ], - "codespace": "" - } - ], - "begin_block_events": null, - "end_block_events": null, - "validator_updates": [ - { - "pub_key": { - "type": "ed25519", - "data": "lObsqlAjmPsnBfBE+orb8vBbKrH2G5VskSUlAq/YcXc=" - }, - "power": "1233243" - }, - { - "pub_key": { - "type": "ed25519", - "data": "PflSgb+lC1GI22wc6N/54cNzD7KSYQyCWR5LuQxjYVY=" - }, - "power": "1194975" - }, - { - "pub_key": { - "type": "ed25519", - "data": "AmPqEmF5YNmlv2vu8lEcDeQ3hyR+lymnqx2VixdMEzA=" - } - } - ], - "consensus_param_updates": null - } -} diff --git a/rpc/tests/support/block_with_evidences.json b/rpc/tests/support/block_with_evidences.json deleted file mode 100644 index 030424352..000000000 --- a/rpc/tests/support/block_with_evidences.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "block_id": { - "hash": "649A276C615AD3B922A620ADBE5484DE9D87E2154469AE8F90DC40769350A52B", - "part_set_header": { - "total": 1, - "hash": "D2A0D52E67AAD464122612577AD80049D785BC4DB9D0A992FC143C276B2B65DB" - } - }, - "block": { - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "test-chain-y3m1e6-AB", - "height": "22", - "time": "2020-04-28T15:48:20.640286Z", - "last_block_id": { - "hash": "B5F14F439A73EBDF8EF5222C957CFE6E15C95EE825C8B22E423464E675278C47", - "part_set_header": { - "total": 1, - "hash": "C5A0FADCFFF5A69D088DE7BB6836C9C5DB7955B549509E548C296D2C099D2D5D" - } - }, - "last_commit_hash": "6494B45CF9B18F150FE20D77DBFC598592E4B2B559071FA1E7346274A5AA544F", - "data_hash": "", - "validators_hash": "8AE7D181D0574535850924934C0B1B5BBB5E82F29B99B37A4BA6EBC92F0D97C9", - "next_validators_hash": "8AE7D181D0574535850924934C0B1B5BBB5E82F29B99B37A4BA6EBC92F0D97C9", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "48685380CBC6D4C0B31D9A226912FA6D72B4F0C7B3EE84000222D5AE0469AA8E", - "last_results_hash": "", - "evidence_hash": "CBC5FBCE18AE8A6043B9C64F913F708D641E58B811CD1B5BA03D2F6D0054DA0E", - "proposer_address": "9642515585D8F27423CE1BDDB91CD076862AFC63" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": [ - { - "type": "tendermint/DuplicateVoteEvidence", - "value": { - "vote_a": { - "type": 1, - "height": "21", - "round": "0", - "block_id": { - "hash": "86EB9FCF52C4A81F2445157B0BF7AFBB107DF156D0853F38A019200F69465883", - "part_set_header": { - "total": 1, - "hash": "B8F7219F14CB9EAA167A4E56FC8D2D4F3545C93A04357B33C34121C801D7E4F2" - } - }, - "timestamp": "2020-04-28T15:48:20.368551Z", - "validator_address": "0F1F93CC25A6CFC083F54E4DA26F73B7F24DC85B", - "validator_index": "0", - "signature": "JDVzUjWVP9qWZJpKmN14FvmS4mXoLnwW7C1UjFtNQrVTQpL+ONg+IkYKGzVTDQtpOcGDbOLC2dbKvY/OToaWDA==" - }, - "vote_b": { - "type": 1, - "height": "21", - "round": "0", - "block_id": { - "hash": "B5F14F439A73EBDF8EF5222C957CFE6E15C95EE825C8B22E423464E675278C47", - "part_set_header": { - "total": 1, - "hash": "C5A0FADCFFF5A69D088DE7BB6836C9C5DB7955B549509E548C296D2C099D2D5D" - } - }, - "timestamp": "2020-04-28T15:48:20.354851Z", - "validator_address": "0F1F93CC25A6CFC083F54E4DA26F73B7F24DC85B", - "validator_index": "0", - "signature": "gT2fdleX4BUzbAuUDazkbJBJ99HX7YgSTml7rumzWAm4hlOWtBGPe9BmkUF6Ypy8kzgMU/0P0D96KxCts5tpCQ==" - }, - "total_voting_power": 0, - "validator_power": 0, - "timestamp": "2020-04-28T15:48:20.640286Z" - } - } - ] - }, - "last_commit": { - "height": "21", - "round": 0, - "block_id": { - "hash": "B5F14F439A73EBDF8EF5222C957CFE6E15C95EE825C8B22E423464E675278C47", - "part_set_header": { - "total": 1, - "hash": "C5A0FADCFFF5A69D088DE7BB6836C9C5DB7955B549509E548C296D2C099D2D5D" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "0F1F93CC25A6CFC083F54E4DA26F73B7F24DC85B", - "timestamp": "2020-04-28T15:48:20.640286Z", - "signature": "XMPZyI/KX9qTS6R3y4zz2tBwHFyII7VqqRj0D9vrLonIJffOsqU2m6Hk0mkcZmce9YUUi0BPHybfGn+li7goDg==" - }, - { - "block_id_flag": 2, - "validator_address": "9642515585D8F27423CE1BDDB91CD076862AFC63", - "timestamp": "2020-04-28T15:48:20.570401Z", - "signature": "jieW+dsiGgQUTAG7LjdJQqomvrPyQR707HzOhXlUHaZ73xXRQxSpWXNZvWcqP8LwcNF2+ho5yt6NoAmYoCWPCQ==" - } - ] - } - } - } -} diff --git a/rpc/tests/support/blockchain.json b/rpc/tests/support/blockchain.json deleted file mode 100644 index e78c47e88..000000000 --- a/rpc/tests/support/blockchain.json +++ /dev/null @@ -1,389 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "last_height": "488556", - "block_metas": [ - { - "block_id": { - "hash": "0BC81BF032E1251D2BF45FB7FAD70BA1333080FD6DC52FE8A18A09C3859DB99D", - "part_set_header": { - "total": 1, - "hash": "5E97E2B494BF58C02BE385AE80F08A7DDBFAE922ED0363C892D17DB549DAF4AA" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "10", - "time": "2019-03-13T23:08:45.915941777Z", - "num_txs": "1", - "total_txs": "2", - "last_block_id": { - "hash": "B6F22387BD2A7A012BFF88ACE131E871660A8D7CAD756D22B911FA408C9B9FB0", - "part_set_header": { - "total": 1, - "hash": "99043B16957F2BFF5C1A24B290AD44CBCD95B0DC164E18063FA566240B7B3AFC" - } - }, - "last_commit_hash": "483C77DD363242ABB481D474C5DA618D9EB715B3C464D813C844714C9DD16EED", - "data_hash": "37900B11A5BBF82EE275519DAA11BDEFD9A889F51D02A2B975AD506CF42A48A3", - "validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "next_validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "B50AA0AEA259C913680A50FF426F61B02E281E512F6941C7D933F566FB299E52", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "E800740C68C81B30345C3AE2BA638FA56FF67EEF" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "B6F22387BD2A7A012BFF88ACE131E871660A8D7CAD756D22B911FA408C9B9FB0", - "part_set_header": { - "total": 1, - "hash": "99043B16957F2BFF5C1A24B290AD44CBCD95B0DC164E18063FA566240B7B3AFC" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "9", - "time": "2019-03-13T23:08:38.954781954Z", - "num_txs": "0", - "total_txs": "1", - "last_block_id": { - "hash": "C1D3D762700AD5CDDCB724A55CA239B92FC934C4AD163FFDCAC476A42A97320A", - "part_set_header": { - "total": 1, - "hash": "C5FAA5B7738D7010CA712FBC2B2355605D388990DE0FDE731A854FE279325C1A" - } - }, - "last_commit_hash": "AE94F604694CDD4DF798A8B0FE06A14B7C094C3E867E5C7266EFDB9E9F979FF3", - "data_hash": "", - "validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "next_validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "A4DBDDF3CD1C274A1E0D2018F57B8EEA9E5CF6FE45896285B1E4BD9B19892C97", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "C2356622B495725961B5B201A382DD57CD3305EC" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "C1D3D762700AD5CDDCB724A55CA239B92FC934C4AD163FFDCAC476A42A97320A", - "part_set_header": { - "total": 1, - "hash": "C5FAA5B7738D7010CA712FBC2B2355605D388990DE0FDE731A854FE279325C1A" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "8", - "time": "2019-03-13T23:08:31.890373101Z", - "num_txs": "0", - "total_txs": "1", - "last_block_id": { - "hash": "954B81C860ABF508F272C2A402AC81BFBBDA8BA4B2A627A60730FA36915C53AF", - "part_set_header": { - "total": 1, - "hash": "842ADFA93717FDBE551BDAB96BED2E50D67FCA216421C97DE1A47BC61FF50E58" - } - }, - "last_commit_hash": "5CA6FCF16094FCABD00F456E282F1FFB5B12275E32D964EE362C067DAD4492DB", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "F15C16B293EB09F4D95EE863D1CC49A18BAFA06578EC46CC0B8636F2A890C48C", - "last_results_hash": "6E340B9CFFB37A989CA544E6BB780A2C78901D3FB33738768511A30617AFA01D", - "evidence_hash": "", - "proposer_address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "954B81C860ABF508F272C2A402AC81BFBBDA8BA4B2A627A60730FA36915C53AF", - "part_set_header": { - "total": 1, - "hash": "842ADFA93717FDBE551BDAB96BED2E50D67FCA216421C97DE1A47BC61FF50E58" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "7", - "time": "2019-03-13T23:08:19.589587064Z", - "num_txs": "1", - "total_txs": "1", - "last_block_id": { - "hash": "A5873B845F3CD93203D8E1306F756F3BD93E1E3828A2343FD9B898D4DD66BD55", - "part_set_header": { - "total": 1, - "hash": "3E5A9C4ACC1C217DAEBD68E29B99B013603D2902BF974F9695FCA08E1E4E8867" - } - }, - "last_commit_hash": "D164CF0C566EEB93829EF72FE8C1921FA6EB2CFBFC578433F684B95FDEDAEFC9", - "data_hash": "E9734E910DFA6A6B806DC96E76E9D8D260E938E1E4B4B9D215C38422BF22AAB3", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "B48429AC69D3B1878D50F80D51EFD7085E9998B2570DF535A59E62FF1EE8F3DC", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "A5873B845F3CD93203D8E1306F756F3BD93E1E3828A2343FD9B898D4DD66BD55", - "part_set_header": { - "total": 1, - "hash": "3E5A9C4ACC1C217DAEBD68E29B99B013603D2902BF974F9695FCA08E1E4E8867" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "6", - "time": "2019-03-13T23:08:00.786335199Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "5EE242F6FF4EF8D2BD2EBD7428100848438E4D3FD0C9BF01109ACF2338352AD2", - "part_set_header": { - "total": 1, - "hash": "21ED492846DFF04D65E445A56C38AAAE6151F0099B09C9FC9498EF154C46A8AD" - } - }, - "last_commit_hash": "86707BE9A4BDD123101A2695DA73E0A99D11D69CE6196642DCA964DCF2ABA1E2", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "91B4964882D58F32E77EA93478AC8BBDCE905230718440DFFC48661D3B1350E2", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "5EE242F6FF4EF8D2BD2EBD7428100848438E4D3FD0C9BF01109ACF2338352AD2", - "part_set_header": { - "total": 1, - "hash": "21ED492846DFF04D65E445A56C38AAAE6151F0099B09C9FC9498EF154C46A8AD" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "5", - "time": "2019-03-13T23:07:54.139565804Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "C764D3F013CAFBF9CDCCB718DAFDF15C1B23C3D8ADC5EE811C6CC45E0711F04B", - "part_set_header": { - "total": 1, - "hash": "2B51E708767543A566AA1FDBC279E06FB59C3F7658D2389DCAF389A95242E623" - } - }, - "last_commit_hash": "F5D6303B6B99788DA89612C4B6110AF7EE990390201F32A48A94A3F712D17A31", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "380DA3186FE28DCDC765EEA59CE1A3C131709B5A631D70E9DDB9614EAACFA1E9", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "2B19594437F1920B5AF6461FAB81AEC99790FEB1" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "C764D3F013CAFBF9CDCCB718DAFDF15C1B23C3D8ADC5EE811C6CC45E0711F04B", - "part_set_header": { - "total": 1, - "hash": "2B51E708767543A566AA1FDBC279E06FB59C3F7658D2389DCAF389A95242E623" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "4", - "time": "2019-03-13T23:07:47.021138899Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "9E0DF66B93354C474987ED69ADEDD5B2B1DC557A71A391B002E8BEE558C397F1", - "part_set_header": { - "total": 1, - "hash": "529D1FFB543793F8B999AC4E801C8A14CA2DC6E873DC7759945C4B960CAC77DC" - } - }, - "last_commit_hash": "9FEA6AD9DAED8B067D59BB5A03CF81835D6FB719F463C32234028A06BEC40C43", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "C3C0EC26BB6DA5FD0935354B4CB513ED9D0D9829E37C45A6F95A61CE73C40F55", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "2199EAE894CA391FA82F01C2C614BFEB103D056C" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "9E0DF66B93354C474987ED69ADEDD5B2B1DC557A71A391B002E8BEE558C397F1", - "part_set_header": { - "total": 1, - "hash": "529D1FFB543793F8B999AC4E801C8A14CA2DC6E873DC7759945C4B960CAC77DC" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "3", - "time": "2019-03-13T23:07:40.055158729Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "F7888681D07FB5AEAF416D00C22E06CFD9A25DBD65519E97823F979206163CF1", - "part_set_header": { - "total": 1, - "hash": "3D4BB2D494CF343011AF2ADE01D6CC88BE6FE26CE5756840931507554BF64F0B" - } - }, - "last_commit_hash": "6A875DCD138D0A76B63E8BD6FF7FD2A4209755B66B5C841BEE913DC69D17C8AB", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "48731CCFBB44B3DD1BA1798D380FBF52F910B173BEB7C8C583FBC5DB80B55D84", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "064CF05857B556FED63AC32821FF904312D0F2C8" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "F7888681D07FB5AEAF416D00C22E06CFD9A25DBD65519E97823F979206163CF1", - "part_set_header": { - "total": 1, - "hash": "3D4BB2D494CF343011AF2ADE01D6CC88BE6FE26CE5756840931507554BF64F0B" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "2", - "time": "2019-03-13T23:07:33.018721592Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "0D9BB9FA6EB9D64E80CF920EB917B1124F298B12C92BE7FD5328564C6D85D087", - "part_set_header": { - "total": 1, - "hash": "E110DA5AEC7F6D8285F2F8A5CE732D8995E6B35C7B685BA819D3CBD903CB2330" - } - }, - "last_commit_hash": "D6359ED003DA81E68DD39588B40590F796B26A88F3B171B31758773D186233AE", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "95EA0FDE227F235284FCCA4D0B6A281ABC3E15A14B62E4E01E4E03F8135C2AB3", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "02A248C86C78ED6A824D510A8B7AA4C1D290D2DC" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "0D9BB9FA6EB9D64E80CF920EB917B1124F298B12C92BE7FD5328564C6D85D087", - "part_set_header": { - "total": 1, - "hash": "E110DA5AEC7F6D8285F2F8A5CE732D8995E6B35C7B685BA819D3CBD903CB2330" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "1", - "time": "2019-03-13T23:00:00Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "064CF05857B556FED63AC32821FF904312D0F2C8" - }, - "num_txs": "0" - } - ] - } -} diff --git a/rpc/tests/support/broadcast_tx_async.json b/rpc/tests/support/broadcast_tx_async.json deleted file mode 100644 index 8b9ee49bb..000000000 --- a/rpc/tests/support/broadcast_tx_async.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "hash": "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589", - "log": "", - "data": "", - "code": "0" - } -} diff --git a/rpc/tests/support/broadcast_tx_commit.json b/rpc/tests/support/broadcast_tx_commit.json deleted file mode 100644 index 232d6e35c..000000000 --- a/rpc/tests/support/broadcast_tx_commit.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "id": "3fb73994-55c2-44ba-900a-edaa93c24573", - "jsonrpc": "2.0", - "result": { - "check_tx": { - "code": 0, - "codespace": "", - "data": "", - "events": [], - "gas_used": "49776", - "gas_wanted": "150000", - "info": "", - "log": "[]" - }, - "deliver_tx": { - "code": 0, - "codespace": "", - "data": "ChYKFGNvbm5lY3Rpb25fb3Blbl9pbml0", - "events": [ - { - "attributes": [ - { - "index": true, - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMTd4cGZ2YWttMmFtZzk2MnlsczZmODR6M2tlbGw4YzVsc2VycXRh" - }, - { - "index": true, - "key": "c2VuZGVy", - "value": "Y29zbW9zMWxncm1xenFrNDR5ODlydWt1cHRuNG1nZnphM2o4ZGFzMDV6aHMy" - }, - { - "index": true, - "key": "YW1vdW50", - "value": "MTAwMHN0YWtl" - } - ], - "type": "transfer" - }, - { - "attributes": [ - { - "index": true, - "key": "c2VuZGVy", - "value": "Y29zbW9zMWxncm1xenFrNDR5ODlydWt1cHRuNG1nZnphM2o4ZGFzMDV6aHMy" - } - ], - "type": "message" - }, - { - "attributes": [ - { - "index": true, - "key": "YWN0aW9u", - "value": "Y29ubmVjdGlvbl9vcGVuX2luaXQ=" - } - ], - "type": "message" - }, - { - "attributes": [ - { - "index": true, - "key": "Y29ubmVjdGlvbl9pZA==", - "value": "aWJjMHRvMV9jaWQ1NQ==" - }, - { - "index": true, - "key": "Y2xpZW50X2lk", - "value": "aWJjb25lY2xpZW50" - }, - { - "index": true, - "key": "Y291bnRlcnBhcnR5X2NsaWVudF9pZA==", - "value": "aWJjemVyb2NsaWVudA==" - }, - { - "index": true, - "key": "Y291bnRlcnBhcnR5X2Nvbm5lY3Rpb25faWQ=", - "value": "" - } - ], - "type": "connection_open_init" - }, - { - "attributes": [ - { - "index": true, - "key": "bW9kdWxl", - "value": "aWJjX2Nvbm5lY3Rpb24=" - } - ], - "type": "message" - } - ], - "gas_used": "64054", - "gas_wanted": "150000", - "info": "", - "log": "[{\"events\":[{\"type\":\"connection_open_init\",\"attributes\":[{\"key\":\"connection_id\",\"value\":\"ibc0to1_cid55\"},{\"key\":\"client_id\",\"value\":\"ibconeclient\"},{\"key\":\"counterparty_client_id\",\"value\":\"ibczeroclient\"},{\"key\":\"counterparty_connection_id\"}]},{\"type\":\"message\",\"attributes\":[{\"key\":\"action\",\"value\":\"connection_open_init\"},{\"key\":\"module\",\"value\":\"ibc_connection\"}]}]}]" - }, - "hash": "EFA00D85332A8197CF290E4724BAC877EA93DDFE547A561828BAE45A29BF1DAD", - "height": "57649" - } -} \ No newline at end of file diff --git a/rpc/tests/support/broadcast_tx_commit_null_data.json b/rpc/tests/support/broadcast_tx_commit_null_data.json deleted file mode 100644 index 68ea8d138..000000000 --- a/rpc/tests/support/broadcast_tx_commit_null_data.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "height": "26682", - "hash": "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589", - "deliver_tx": { - "log": "", - "data": null, - "code": "0" - }, - "check_tx": { - "log": "", - "data": null, - "code": "0" - } - } -} diff --git a/rpc/tests/support/broadcast_tx_sync.json b/rpc/tests/support/broadcast_tx_sync.json deleted file mode 100644 index 62b2ff429..000000000 --- a/rpc/tests/support/broadcast_tx_sync.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "code": "0", - "data": "AABBCC", - "log": "", - "hash": "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - } -} diff --git a/rpc/tests/support/broadcast_tx_sync_int.json b/rpc/tests/support/broadcast_tx_sync_int.json deleted file mode 100644 index ce69fafb0..000000000 --- a/rpc/tests/support/broadcast_tx_sync_int.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "code": 0, - "data": "aabbcc", - "log": "", - "hash": "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - } -} diff --git a/rpc/tests/support/commit.json b/rpc/tests/support/commit.json deleted file mode 100644 index 659678325..000000000 --- a/rpc/tests/support/commit.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "10", - "time": "2020-10-01T13:39:16.446728262Z", - "last_block_id": { - "hash": "F039C21B34127537B56D653A108ECC847EA0178E65FE69476D2F97F044A69E1C", - "part_set_header": { - "total": 1, - "hash": "D31DCBFF294D3CEFA57EAEF7D411350FD6D700A1E9ED4F79711B5CC83F5BE5BC" - } - }, - "last_commit_hash": "4332A4CA94EA4F73C195640A1913654C086576BB43DDF0FF87B631A09F1F7E52", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139", - "next_validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C" - }, - "commit": { - "height": "10", - "round": 0, - "block_id": { - "hash": "EDEF6D800E431D29A2EEC727408F24540104449246A28A71AE335AED8E892D1E", - "part_set_header": { - "total": 1, - "hash": "1AA0DDA243CCC5FA0DC0C958DE5CBC12C1B91B9472BE2DF7C1D797C4BBA87436" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C", - "timestamp": "2020-10-01T13:39:16.96959972Z", - "signature": "wlPr5XjCfaX5u432QUpjnsTQmJkcNJ37R78QaIQNSv3NyzJMMW0jbeSlF2Bi83CKhrGDhGL7aq/mKaIZMrlfCQ==" - } - ] - } - }, - "canonical": true - } -} diff --git a/rpc/tests/support/commit_1.json b/rpc/tests/support/commit_1.json deleted file mode 100644 index 03971cb74..000000000 --- a/rpc/tests/support/commit_1.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "1", - "time": "2020-09-30T15:53:38.3317756Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139", - "next_validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C" - }, - "commit": { - "height": "1", - "round": 0, - "block_id": { - "hash": "14FE58148FBF37743B360D1B92BB8528ADA50E22BA219DA417B16379EEE306D3", - "part_set_header": { - "total": 1, - "hash": "F45A469B007676CC8A65DEB6C194D04A9166F4690F36ECA7C71E730E2F1D916E" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C", - "timestamp": "2020-10-01T13:39:12.243358745Z", - "signature": "/PI3gfFri14erU4//7C16XXGZZVzldjVx14cBM+b2hRenLTBsn2dNGz33t+MFWEOBe/vGvURkApciVrID3ihAA==" - } - ] - } - }, - "canonical": true - } -} diff --git a/rpc/tests/support/consensus_state.json b/rpc/tests/support/consensus_state.json deleted file mode 100644 index 762174aaa..000000000 --- a/rpc/tests/support/consensus_state.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 0, - "result": { - "round_state": { - "height/round/step": "1262197/0/8", - "start_time": "2019-08-01T11:52:38.962730289Z", - "proposal_block_hash": "634ADAF1F402663BEC2ABC340ECE8B4B45AA906FA603272ACC5F5EED3097E009", - "locked_block_hash": "634ADAF1F402663BEC2ABC340ECE8B4B45AA906FA603272ACC5F5EED3097E009", - "valid_block_hash": "634ADAF1F402663BEC2ABC340ECE8B4B45AA906FA603272ACC5F5EED3097E009", - "height_vote_set": [ - { - "round": 0, - "prevotes": [ - "Vote{0:000001E443FD 1262197/00/1(Prevote) 634ADAF1F402 7BB974E1BA40 @ 2019-08-01T11:52:35.513572509Z}", - "nil-Vote" - ], - "prevotes_bit_array": "BA{100:xxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} 169753436/170151262 = 1.00", - "precommits": [ - "Vote{5:18C78D135C9D 1262197/00/2(Precommit) 634ADAF1F402 8B5EFFFEABCD @ 2019-08-01T11:52:36.25600005Z}", - "nil-Vote" - ], - "precommits_bit_array": "BA{100:xxxxxx_xxxxx_xxxx_x_xxx_xx_xx_xx__x_x_x__xxxxxxxxxxxxxx_xxxx_xx_xxxxxx_xxxxxxxx_xxxx_xxx_x_xxxx__xxx} 118726247/170151262 = 0.70" - } - ], - "proposer": { - "address": "D540AB022088612AC74B287D076DBFBC4A377A2E", - "index": 0 - } - } - } -} diff --git a/rpc/tests/support/error.json b/rpc/tests/support/error.json deleted file mode 100644 index 5cf520190..000000000 --- a/rpc/tests/support/error.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "error": { - "code": -32603, - "message": "Internal error", - "data": "min height 321 can't be greater than max height 123" - } -} diff --git a/rpc/tests/support/event_new_block_1.json b/rpc/tests/support/event_new_block_1.json deleted file mode 100644 index cf227f5ee..000000000 --- a/rpc/tests/support/event_new_block_1.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "06c893ae-2c80-4a42-8332-8380bf24fcde", - "result": { - "query": "tm.event = 'NewBlock'", - "data": { - "type": "tendermint/event/NewBlock", - "value": { - "block": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "1608", - "time": "2020-09-14T16:33:54.21191421Z", - "last_block_id": { - "hash": "D3B2CC7EDAFF87433A5DBCDCDF4077A56AACDE3606034262B0CDB120F62EB40B", - "part_set_header": { - "total": 1, - "hash": "3AB411EAFE9A3B7AC013B0214990E5653112A39909289E3EA9211F07B8CD6EED" - } - }, - "last_commit_hash": "47071B86EFC28BEC17543967975F35191BA9BEC9C2AD77E86F63B149528D71A1", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "next_validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3" - }, - "data": { - "txs": [] - }, - "evidence": { - "evidence": [] - }, - "last_commit": { - "height": "1607", - "round": 0, - "block_id": { - "hash": "D3B2CC7EDAFF87433A5DBCDCDF4077A56AACDE3606034262B0CDB120F62EB40B", - "part_set_header": { - "total": 1, - "hash": "3AB411EAFE9A3B7AC013B0214990E5653112A39909289E3EA9211F07B8CD6EED" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3", - "timestamp": "2020-09-14T16:33:54.21191421Z", - "signature": "orOooZN8Rjtf6Uwh6ZTRGLjAActgmgZtFXgBSSpKgPLz9EYhLpS4e8IwydrEY+6YeTVk48wiOjdWleYMYvmGCQ==" - } - ] - } - }, - "result_begin_block": {}, - "result_end_block": { - "validator_updates": null - } - } - }, - "events": { - "tm.event": [ - "NewBlock" - ] - } - } -} diff --git a/rpc/tests/support/event_new_block_2.json b/rpc/tests/support/event_new_block_2.json deleted file mode 100644 index 4eb94ded2..000000000 --- a/rpc/tests/support/event_new_block_2.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "06c893ae-2c80-4a42-8332-8380bf24fcde", - "result": { - "query": "tm.event = 'NewBlock'", - "data": { - "type": "tendermint/event/NewBlock", - "value": { - "block": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "1609", - "time": "2020-09-14T16:33:55.21191421Z", - "last_block_id": { - "hash": "F30A71F2409FB15AACAEDB6CC122DFA2525BEE9CAE521721B06BFDCA291B8D56", - "part_set_header": { - "total": 1, - "hash": "A514FF7C92EBDF19F8D9B953E4B4BAC8627A50350048BD885D22747CE7F5A01C" - } - }, - "last_commit_hash": "64581C6215ED498D77AB71A57DC3483528F914D95547513B93B4DF079243C11C", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "next_validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3" - }, - "data": { - "txs": [] - }, - "evidence": { - "evidence": [] - }, - "last_commit": { - "height": "1608", - "round": 0, - "block_id": { - "hash": "F30A71F2409FB15AACAEDB6CC122DFA2525BEE9CAE521721B06BFDCA291B8D56", - "part_set_header": { - "total": 1, - "hash": "A514FF7C92EBDF19F8D9B953E4B4BAC8627A50350048BD885D22747CE7F5A01C" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3", - "timestamp": "2020-09-14T16:33:55.21191421Z", - "signature": "WVwzp+WsEISBKqPag0xxos6RIpQ+XwCnKFbFVmRnK0opQwGwoVhSfV/56fGu6B2noWBw8rzzvJ/FeBklm1VeCg==" - } - ] - } - }, - "result_begin_block": {}, - "result_end_block": { - "validator_updates": null - } - } - }, - "events": { - "tm.event": [ - "NewBlock" - ] - } - } -} diff --git a/rpc/tests/support/event_new_block_3.json b/rpc/tests/support/event_new_block_3.json deleted file mode 100644 index 236449ee4..000000000 --- a/rpc/tests/support/event_new_block_3.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "06c893ae-2c80-4a42-8332-8380bf24fcde", - "result": { - "query": "tm.event = 'NewBlock'", - "data": { - "type": "tendermint/event/NewBlock", - "value": { - "block": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "1610", - "time": "2020-09-14T16:33:56.21191421Z", - "last_block_id": { - "hash": "192C18392B93AE4C03F477C96D8B84C5390BB86E3E88662B336C9DE070ADF02F", - "part_set_header": { - "total": 1, - "hash": "ACD43137746F0AFF53A6EBCA7C8D03B80F9F96D5542E3679F65855A66FA76E2B" - } - }, - "last_commit_hash": "15119388771E0DFE6CD0B9C899A4EA41F669DF15664D04B020878A2D71D28BCC", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "next_validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3" - }, - "data": { - "txs": [] - }, - "evidence": { - "evidence": [] - }, - "last_commit": { - "height": "1609", - "round": 0, - "block_id": { - "hash": "192C18392B93AE4C03F477C96D8B84C5390BB86E3E88662B336C9DE070ADF02F", - "part_set_header": { - "total": 1, - "hash": "ACD43137746F0AFF53A6EBCA7C8D03B80F9F96D5542E3679F65855A66FA76E2B" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3", - "timestamp": "2020-09-14T16:33:56.21191421Z", - "signature": "5KBnWciO6dw29HrCikF6Fri/pLIoEXQSKiYXsMRFbSLwIV192hPeNYEOhjOk60sNBP2hTlHBOC482bRWTuFADg==" - } - ] - } - }, - "result_begin_block": {}, - "result_end_block": { - "validator_updates": null - } - } - }, - "events": { - "tm.event": [ - "NewBlock" - ] - } - } -} diff --git a/rpc/tests/support/first_block.json b/rpc/tests/support/first_block.json deleted file mode 100644 index e450dbe25..000000000 --- a/rpc/tests/support/first_block.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "block_id": { - "hash": "D00C415348A1FCA98A9F6E811804E69DE2C5865A2F057C275552C8F57B427052", - "part_set_header": { - "total": 1, - "hash": "5C67DA0F82C5D66C862808EFA9FEFA2FEF08F32DB5FE87EFF7B2C5A56F83AA07" - } - }, - "block": { - "header": { - "version": { - "block": "10", - "app": "1" - }, - "chain_id": "cosmoshub-2", - "height": "1", - "time": "2020-03-15T16:56:30.934369Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "next_validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": null - }, - "last_commit": { - "height": "0", - "round": 0, - "block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "signatures": null - } - } - } -} \ No newline at end of file diff --git a/rpc/tests/support/genesis.json b/rpc/tests/support/genesis.json deleted file mode 100644 index 45b7b9619..000000000 --- a/rpc/tests/support/genesis.json +++ /dev/null @@ -1,19185 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "genesis": { - "genesis_time": "2019-03-13T23:00:00Z", - "chain_id": "cosmoshub-2", - "initial_height": "0", - "consensus_params": { - "block": { - "max_bytes": "200000", - "max_gas": "2000000", - "time_iota_ms": "1000" - }, - "evidence": { - "max_age_num_blocks": "100000", - "max_age_duration": "172800000000000", - "max_num": 0 - }, - "validator": { - "pub_key_types": [ - "ed25519" - ] - }, - "version": "1" - }, - "validators": [ - { - "address": "B00A6323737F321EB0B8D59C6FD497A14B60938A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "cOQZvh/h9ZioSeUMZB/1Vy1Xo5x2sjrVjlE/qHnYifM=" - }, - "power": "9328525", - "name": "Certus One" - } - ], - "app_hash": "", - "app_state": { - "accounts": [ - { - "address": "cosmos1000ya26q2cmh399q4c5aaacd9lmmdqp92z6l7q", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos102ruvpv2srmunfffxavttxnhezln6fnc3pf7tt", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos103vxut865hpn6x0wjly9ds6dmdtgkhp9gjsj88", - "coins": [ - { - "denom": "uatom", - "amount": "10402000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1049ye8lese3s2a6rr2quh3des6pynmqp99zwqa", - "coins": [ - { - "denom": "uatom", - "amount": "2723000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos104fnttxcgxtrfvvqcqgwydgrf9wn0m9w3u3ekj", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1065smngmfh2fftdcj8xz7quh54ks4pfhmw93sh", - "coins": [ - { - "denom": "uatom", - "amount": "26306000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "26306000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos108jad2hgswv2vneynsjvasvpqckme27dgqhvxt", - "coins": [ - { - "denom": "uatom", - "amount": "15378000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos108r3ynz6rak56nznqf6ls37kxxjgnns2h6ymx9", - "coins": [ - { - "denom": "uatom", - "amount": "2711000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos109myyszkdktaq0qdfwnm208qy6pm245s0vfvnn", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos109v835fljyapuwryhqxy89gflhp2vjx56yhwrv", - "coins": [ - { - "denom": "uatom", - "amount": "221627000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10a7evyydck42nhta93tnmv7yu4haqzt94xyu54", - "coins": [ - { - "denom": "uatom", - "amount": "930790690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10e4vsut6suau8tk9m6dnrm0slgd6npe3hjqndl", - "coins": [ - { - "denom": "uatom", - "amount": "10000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10l3rfs5eya90utgm6g3lrtf6pzff3muc7l8y3n", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10mp0mt5ek4k8z7tqkfh7cmu29hc2jxmuzmwrre", - "coins": [ - { - "denom": "uatom", - "amount": "2051632000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10nsjrvfqdvqhra9uzyuaaclc5uqqlyauklzxgp", - "coins": [ - { - "denom": "uatom", - "amount": "9225600000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10ugq8d7yw0f0gcsd25c9wcryqpkxdcgz22t6uh", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10usg8tf3hhtarjmzs4ughrgkknhe58cylce7pf", - "coins": [ - { - "denom": "uatom", - "amount": "20353000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10wd6rhh4fh6a2axq4he54ll73rl8627n0rc30p", - "coins": [ - { - "denom": "uatom", - "amount": "13952690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10whs4lsz6yjc90nzs6t4re5jv6lj59qr6zuxf8", - "coins": [ - { - "denom": "uatom", - "amount": "355507000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10ygh5qkn8ra69nxrm5403rxeaz6dwd58xhqw3l", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10yp5yw0rz2j7khfgmgwzs4fe4tsg72nge4f0ml", - "coins": [ - { - "denom": "uatom", - "amount": "10825785580000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos120nzke36a2s44w0f0dhndknndhu5ytyx9rz6yk", - "coins": [ - { - "denom": "uatom", - "amount": "7499000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "7499000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1249al7mnuq4g3k52n855xcx8nj57vzv0q2uvg9", - "coins": [ - { - "denom": "uatom", - "amount": "7689000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos124l86n9n9pg6p2rhpu857c8awmxmzcen39j7hd", - "coins": [ - { - "denom": "uatom", - "amount": "180000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos125pyl8p6ctvp842ce90gvlegwp53flcmeyefca", - "coins": [ - { - "denom": "uatom", - "amount": "34886380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos126luz90z8mundzfflcftm83k8arrzs6rdvkrz2", - "coins": [ - { - "denom": "uatom", - "amount": "494478190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12d7jwuwt08wwwuatzufnyet0zhzgap8qdjw0sk", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12dtspk5796vy7fqcjcwsnzxtlzredwehuh9cqg", - "coins": [ - { - "denom": "uatom", - "amount": "1279840690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12e0xvvw3e6ewng9qdx74vha08yshvmwcs4vg4g", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12e35ffmrt4eme0qqre5ump4njfg4mkkuafc4ch", - "coins": [ - { - "denom": "uatom", - "amount": "49552250000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12eedqrmxxsx4s26yzeqs36se5dwwg2tc75vm35", - "coins": [ - { - "denom": "uatom", - "amount": "15830000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12em6sewqxw25l9c02a6x88k7hezj6hv6qh0hup", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12fl8s9u3ftxpfxuapyg9x6wqdngqssqdh3r6kc", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12fpuvxnn5mxx30sxxhqefue2d6rxer7zx4d987", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12g8djmnre0l52mujgk2ref7ecugfltfwwwf4yk", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12hckndrdpwrnsuffvce7d6ssratle74pt6t6h2", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12kdrflk5ddskc8j666a2exst6zez6ctrctzusf", - "coins": [ - { - "denom": "uatom", - "amount": "3166000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12ku50gw846ekxxhn9n7qrktq3gahp2zzkrzgf9", - "coins": [ - { - "denom": "uatom", - "amount": "303000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12mnpnxjsy480ujxamclj8rvg87veg6m89e69pm", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12ntkpe8tehyh6ty7m6x79phnmx697xzmtchn35", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12pghteu99x784msy3ps5hltrxegaur5mndxkg3", - "coins": [ - { - "denom": "uatom", - "amount": "2584980000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12pr483dv5qd33x2yhv9lxkgje0njnkpgj0a9je", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12qvd909wn082yzhmyn42h8uwatqts4qcgxsvwu", - "coins": [ - { - "denom": "uatom", - "amount": "25525780000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12sn63d5jtfsv9evu2arag6h34ajavk7960fr5v", - "coins": [ - { - "denom": "uatom", - "amount": "100410000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12t7f7sh0ndyzhdkhxe06kr7kxfa5zx7c09lzp6", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12usue8q9w5mmvuteh0k40h0zzutlm9k0s2fddc", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos12xkncrkjwywe4vwq67g4n36k5mycrp7a9gg5sz", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos130mdu9a0etmeuw52qfxk73pn0ga6gawkryh2z6", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos132juzk0gdmwuxvx4phug7m3ymyatxlh9m9paea", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos132nxt46shylwr23e7cdewa86htsyfmlvxhq6y9", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos132wwxvsye3amhnvs3f630e3uuyxpz6d22adfsy", - "coins": [ - { - "denom": "uatom", - "amount": "1154930000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1343vv986xal749dk2je566rkntwt3x7lrx9vla", - "coins": [ - { - "denom": "uatom", - "amount": "29685210000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13653whhw8c99dmap4h92reshhfs58e3970rfe5", - "coins": [ - { - "denom": "uatom", - "amount": "18092000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos136r8930vl5jdr42fehkclc68amkt7f5quvwjzp", - "coins": [ - { - "denom": "uatom", - "amount": "1385000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos138a2ulzndl7gezsd6symywvdpzes4awj9eypkr", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1399zgcq58j20jth3r0hnjq2lswem60jmjs7u36", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos139vgquqa2dvxxzpdtv5a8mcclhznc9hmprkhcj", - "coins": [ - { - "denom": "uatom", - "amount": "20156190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13a8q24rpwyjvsthw6x2gk74s0xma7tedeuhknx", - "coins": [ - { - "denom": "uatom", - "amount": "11753680000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13avdh7zs9uxwuyvp543n7p3zdkavz74fre0vt7", - "coins": [ - { - "denom": "uatom", - "amount": "14844000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13c25u0p4nwntkk2l7mry70ler4tzascvsrjv52", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13fxkvaqmgatzmmxne5czk6y8tws3dxgcuvjpeq", - "coins": [ - { - "denom": "uatom", - "amount": "104705690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13fz2d2cduwl8jepmp5cnyzk5298k90m3ahkqpe", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13gvqalusnmapjgp3e6gnk9q832qv3g3u6jytaz", - "coins": [ - { - "denom": "uatom", - "amount": "24876000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13h2s49rmyykemegd3gh0ml2sjunrcdxfkuv2rw", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13hfzclxsgzywxfyh5tvhxff3mnnr6jsky39sjs", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13jvkw96h2269pv7dgarjp2y6ev5k62l69eqlml", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13jwgjxl9nfvpcy5gv6nec9z9w6mwv6l0s4u8xy", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13jysux652pcwychuquzqn374l4uh4mpetvrlrg", - "coins": [ - { - "denom": "uatom", - "amount": "54140000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13lfwqjqfzfe2muq3j273y2l2tuzgkrp86s8zew", - "coins": [ - { - "denom": "uatom", - "amount": "46413180000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13ljx4j80w0p0d6527eylh67ngdthkwak8s7q06", - "coins": [ - { - "denom": "uatom", - "amount": "779536970000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13lte99fy0lqxu9pzsytafhlym0ncznsmncqkpa", - "coins": [ - { - "denom": "uatom", - "amount": "33922000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13m4eevru9jc8afdzh2kpgf4g9agl6h0d4p56qw", - "coins": [ - { - "denom": "uatom", - "amount": "2969690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13m92q3fyyuw57nv65deet8sw9xu7rekmv4h9y8", - "coins": [ - { - "denom": "uatom", - "amount": "5294270000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13meq2luhcz9dlxn6z6tsgwd5ha537xj8aetqhm", - "coins": [ - { - "denom": "uatom", - "amount": "2332950270000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13mp6etxn35ktemydsd82y2j7jy8r4jnmphczg0", - "coins": [ - { - "denom": "uatom", - "amount": "149222700000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13njcc8ah92x9wmfz0mvufz9qxz09sqpg2l5m8c", - "coins": [ - { - "denom": "uatom", - "amount": "63322000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13nr7ma9t97e5c2klyv0ku68ncmqj6farj2keru", - "coins": [ - { - "denom": "uatom", - "amount": "30711000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13pg04h95h968hmahq9dclwaf6ejt0nl9kkgywn", - "coins": [ - { - "denom": "uatom", - "amount": "135000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13qdh6c34um99ay72lujy56cf0n0auvwky7q3p8", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13rdh0y4fz47qhvy9crlax82403dk8e76mypj89", - "coins": [ - { - "denom": "uatom", - "amount": "5807030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13rqwctds7e5cgleey2vzz454t9l02nklrwvs9l", - "coins": [ - { - "denom": "uatom", - "amount": "67845000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13s3ju03wz7p6rxup20ptne0u9wshm3r2mmf5rs", - "coins": [ - { - "denom": "uatom", - "amount": "2972730000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13uus00dk300jg7n02rdh9dxzfkgfyj90vpn049", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13vr90q8r76gxzlyq0zr234qef4cslwasmv9gdl", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13vv6uxe5mx8wyva7s0qh820a57uxwkjr5zcm6j", - "coins": [ - { - "denom": "uatom", - "amount": "2939000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13vwzpmmada8aangxtjyfschf04fh7mfjz5kt3a", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13w57ennhf6mq76238ycstwvxqvtkk4m65rz092", - "coins": [ - { - "denom": "uatom", - "amount": "22412050000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13wddek9f98equjehldud0k87q2fhjw2ar626f4", - "coins": [ - { - "denom": "uatom", - "amount": "904600000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13xjrerteau5qrtr8a53zd0aj969xzw5qp5th0h", - "coins": [ - { - "denom": "uatom", - "amount": "60476060000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13xvmkjdq3vd2zfk78ft607tjex8qjxhcjlyrz3", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos144tjhlagc0mks85ljzffv5986zw0ls8f3ly2wu", - "coins": [ - { - "denom": "uatom", - "amount": "350531000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14605ap767058cydlu9dywdwe7vz85wskp83q56", - "coins": [ - { - "denom": "uatom", - "amount": "39830000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos146l37udxpsph626spp5cdz4fnnttyyqgvpvhek", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos147n9qc39ms7detmqkdju5wjj97vp5uf62vmqxz", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos147ufwtj67wm8a0nmkjsutxaepp3vs2d680nxn6", - "coins": [ - { - "denom": "uatom", - "amount": "34868930000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos149g2tl9xakprzs5f854ntu5fthdgmuqd9ad0gn", - "coins": [ - { - "denom": "uatom", - "amount": "18605530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14az9dmutwtz4vuycvae8csm4wwwtm0au7lt5d2", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14d6d0m49c4hvvqc7mc9ktxvkyfll3ztk5pghfh", - "coins": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos14dmelcmvwq8sefu5tr4atv98u6ur9c20auhmzf", - "coins": [ - { - "denom": "uatom", - "amount": "17391000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14dycjypj98nvmx9w8ps8tdc9fgfkktfxp7g8v2", - "coins": [ - { - "denom": "uatom", - "amount": "4975000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14eucqq0vc07kfazl93lm562350vwt3pdu2mp9n", - "coins": [ - { - "denom": "uatom", - "amount": "22162000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14fqtpynvp6vcn4hwu5k6fw3rtxzp5yd55w29gr", - "coins": [ - { - "denom": "uatom", - "amount": "13116000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14hncmchnakqwgsfla866kztd2qmd6puarp3r5y", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14jg5e6ahcdsfr0hr9ql6gyut023zwwmh5ykhv8", - "coins": [ - { - "denom": "uatom", - "amount": "20433000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14kl66vhskfats6le7ucjsruec7a3xyj45t3629", - "coins": [ - { - "denom": "uatom", - "amount": "32113000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14kn0kk33szpwus9nh8n87fjel8djx0y0mmswhp", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14l0fp639yudfl46zauvv8rkzjgd4u0zk0fyvgr", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14lultfckehtszvzw4ehu0apvsr77afvyhgqhwh", - "coins": [ - { - "denom": "uatom", - "amount": "10000000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14n5qjt9lv58ug47swld8k2w3k36mxq8f9s8fkq", - "coins": [ - { - "denom": "uatom", - "amount": "70192000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14p5wpgcj4cmcva433dqw6thmdmk5ssjqtj0a4l", - "coins": [ - { - "denom": "uatom", - "amount": "9298690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14qyqets0c94u9hjmvrm4n8s2v5pgnk9kjh93ay", - "coins": [ - { - "denom": "uatom", - "amount": "139610690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14r9svgnadnm3ugnhpyz6369xpg98ug5sedplf7", - "coins": [ - { - "denom": "uatom", - "amount": "8495810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14sur0djjxka7n6vhkglyz0xh92lvdhumf589jv", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14tcxx9z6gtdslajzz5qjlxu3vl3v23djyl6tgh", - "coins": [ - { - "denom": "uatom", - "amount": "1163475340000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14tlwg7f4zjkfs7jg4dqzp0y7gsuxgzklzvldem", - "coins": [ - { - "denom": "uatom", - "amount": "465390690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14w6c55cm0lc5sthhmghuw59c62lf2y7s6zf0dy", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14xgdfdnpjtulj6p7rkc75ekxqjq8hc5c7x6hpd", - "coins": [ - { - "denom": "uatom", - "amount": "36184000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14yu02qh35pqln6j0tdlzw43c275nhpvtjkhlnr", - "coins": [ - { - "denom": "uatom", - "amount": "2817000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1542lar7ctncwk4582emyryyx8jxkt4etmt8h3q", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15498qsjzr8qnn7fdcnp3l2el96awtteh5d09xf", - "coins": [ - { - "denom": "uatom", - "amount": "93070690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos155c0rxqvazlqz29q3kdp2c03h59np3zfrh4ns0", - "coins": [ - { - "denom": "uatom", - "amount": "12031000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15640fe3gjatury4ukzkpjl9uq22jers2rha3tv", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos157zu0weeafysgq5akhnn3w2p0723avlgnm2emf", - "coins": [ - { - "denom": "uatom", - "amount": "4975000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1589h7tesukedazlr2k2767rsrn8qgz40z0fca6", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15a5tj5frnnmme58up7ll537cy9fhnszs3wse0e", - "coins": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos15a84pmu5qa9pps40g7vyzqar0p77mg0e7k05t4", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15apyer7fpajkma6wsjue5k4nf5hfscma3qsvaq", - "coins": [ - { - "denom": "uatom", - "amount": "209420690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15edu5vwav305gd5xufgzt7p7canedwr3j5y88c", - "coins": [ - { - "denom": "uatom", - "amount": "5698000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15f6nvuqsun8ky9tz57dhphleta68hu3pym88qz", - "coins": [ - { - "denom": "uatom", - "amount": "1990000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15fg2xq8c7zt48kv35fq0pzf0ve8j7mhya3249z", - "coins": [ - { - "denom": "uatom", - "amount": "174515690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15hsjyah8c64l8fdywk5hhnu7hjwttu2kumuwpp", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15jk238qpc8se629rqng24g2uszchw4zkn426qw", - "coins": [ - { - "denom": "uatom", - "amount": "1156000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15lrq7w0fh8w4slej7e5qch2ksk7qtkesvn2u78", - "coins": [ - { - "denom": "uatom", - "amount": "1356000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15mt02vt236qxzxaju6artpzxd7kqx6qaemdt8r", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15mw9e2hwnh0um26595fdxtpfh8x7tqgjlpej46", - "coins": [ - { - "denom": "uatom", - "amount": "113000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15mwh7k9u5u6047f6lytkx8z9tfvshqk9wqw9f8", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15njsc4lap2h94xum2xatf9xmex4088u9jcmpv9", - "coins": [ - { - "denom": "uatom", - "amount": "5027000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15nz5gqx6f9nu3tf3dc8hyzwrrqkyxkznlfwdc7", - "coins": [ - { - "denom": "uatom", - "amount": "208058000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15p7e92cd3qeqvgfhw9cd7424rn4et6g5p9cv0c", - "coins": [ - { - "denom": "uatom", - "amount": "18499000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15q85hu222eest9d7mysq2jd7yffm5cywsm54gy", - "coins": [ - { - "denom": "uatom", - "amount": "6056000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15r4tc0m6hc7z8drq3dzlrtcs6rq2q9l2kc6z4s", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15t5u0vk50ujxqe3d4wqwyzn6umsdk3yewqhqrq", - "coins": [ - { - "denom": "uatom", - "amount": "40713190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15ta770k4kca7plh8gtyc94gekr8h3gmzjusdyx", - "coins": [ - { - "denom": "uatom", - "amount": "113029000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15u5luvsrzry8njes6l5kd98kmz9mnd7d22guk6", - "coins": [ - { - "denom": "uatom", - "amount": "142309000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15ukrvfdpmnl8dhvnfjudp7dezw3hmzdl2n8hh3", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15urq2dtp9qce4fyc85m6upwm9xul3049um7trd", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15vanqrcgxen0eunnfrkha0ewsyslhj7ktdj7u7", - "coins": [ - { - "denom": "uatom", - "amount": "293976000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15waw4v3fdgyhxhfv7h5fp0u3s0x3emcj2c44a7", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15wpkctst9nhk7q49622dn0vl9ym2qyxsjkntt0", - "coins": [ - { - "denom": "uatom", - "amount": "10037000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15yyv20r0hkxscpl6tw6jlgjh3589mpmtcz5zpj", - "coins": [ - { - "denom": "uatom", - "amount": "87253190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15z6pz2tyzfupsup5xja3dc2sspf6tfvstkhdy9", - "coins": [ - { - "denom": "uatom", - "amount": "164659000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos160eegxaskfk5cyvl5rny65f0q3jxevje9czad3", - "coins": [ - { - "denom": "uatom", - "amount": "41566000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1634uur2zeh0q9kce8j7kyq486hm2wvdt5cee4t", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1648ynlpdw7fqa2axt0w2yp3fk542junlmhyevf", - "coins": [ - { - "denom": "uatom", - "amount": "1756875690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos164z7wwzv84h4hwn6rvjjkns6j4ht43jv9e3ljy", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos167w96tdvmazakdwkw2u57227eduula2cy572lf", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos168la4terfg7598ajhyet2dcjhe6v9m4d5wqlpv", - "coins": [ - { - "denom": "uatom", - "amount": "223390000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos169pk2vtg08k8dsvqmt52mem6u84ljsrd8k8mjp", - "coins": [ - { - "denom": "uatom", - "amount": "6811000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16d8d6ecv09p0vcz929njadk6ct9pwwmwu25gp6", - "coins": [ - { - "denom": "uatom", - "amount": "75618190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16gdxm24ht2mxtpz9cma6tr6a6d47x63hlq4pxt", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16gs3yutfffcskc48dux7262t66y8ylc95sr282", - "coins": [ - { - "denom": "uatom", - "amount": "1428210000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16heu2ax3ssxyhyjmy43earlc4n64w9awyvk3y3", - "coins": [ - { - "denom": "uatom", - "amount": "51184690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16kwean73rups2kl9t7dnmfwukvww52peduale7", - "coins": [ - { - "denom": "uatom", - "amount": "2896362500000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16m93gjfqvnjajzrfyszml8qm92a0w67ntjhd3d", - "coins": [ - { - "denom": "uatom", - "amount": "13624911290000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16na5gpcj80tafv5gycm4gk7garj8jjsgydtkmj", - "coins": [ - { - "denom": "uatom", - "amount": "466666670000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16pcypfvnhwquutclt0y284khtyfvlynr2nuv43", - "coins": [ - { - "denom": "uatom", - "amount": "104705690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16qafqaz50cphh4jluvv30apz3fjdd4hqurh6z7", - "coins": [ - { - "denom": "uatom", - "amount": "4296000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16qj60akpj9dvzfnm4c23qxfa69fkfler09qa6n", - "coins": [ - { - "denom": "uatom", - "amount": "407000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16r39ghhwqjcwxa8q3yswlz8jhzldygy6jhvt3c", - "coins": [ - { - "denom": "uatom", - "amount": "791534000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16r59uz69f3006gqwgzzem7n78mvfv4m80v582e", - "coins": [ - { - "denom": "uatom", - "amount": "8500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "8500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos16re42uxxlrw6ptgv3gpccv9ww0yvlhuluh638g", - "coins": [ - { - "denom": "uatom", - "amount": "2893620000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16sfwt5t6gk8j5rsx6anx9qvjxxarr68znwrfp6", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16sknqh6mfamcymz5pjc4pe9xg0zrl8pr5a0d92", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16t6u2fkfql9440gerty037e0d75h69jfzdk8jg", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16uwqfvgt29fxv3jv3gz09kra8rv2tqey7ysm2w", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16w9ugjqnju79vm33s8gte4lzc972fuswq2qqmk", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16xj9d3jsdp89qnkmgav4t5dhxr4mnpgzll4n05", - "coins": [ - { - "denom": "uatom", - "amount": "210584190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16xt45qxt5mm2z9dep4yrx4dxe7lelfuyxevjty", - "coins": [ - { - "denom": "uatom", - "amount": "54276000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16y860wllmfr8t45uj9zfegzfgwsyumu5mwnr8q", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16yavjgx79knn5czkh0xv304p4q9lc0pjzv6cud", - "coins": [ - { - "denom": "uatom", - "amount": "474820000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos173v5nqwvttldamaawmtcn2qnr5f7d2pfpaqejr", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos174ca596awzt8u8w3kn2gr247kex8dmuph0yuc9", - "coins": [ - { - "denom": "uatom", - "amount": "814440690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos175n3650g909aag3xhmjqfdj3j8jp5da39td5xf", - "coins": [ - { - "denom": "uatom", - "amount": "113074000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos176m2p8l3fps3dal7h8gf9jvrv98tu3rqfdht86", - "coins": [ - { - "denom": "uatom", - "amount": "21842188810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "21842188810000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "1557788400", - "end_time": "1615676400" - }, - { - "address": "cosmos176w785udmwnq9swpgtmzl3vgldr5g8cqlycj2m", - "coins": [ - { - "denom": "uatom", - "amount": "3481190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos177yhnrfg63um7fmwv2x2kzlf3jw3rjlpus5zgv", - "coins": [ - { - "denom": "uatom", - "amount": "9950000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos178657tufcc8smgh5wd78k7j6w3amnazgvqxj53", - "coins": [ - { - "denom": "uatom", - "amount": "113000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17ajqzn97x4vjgwtcgh8ny3nk5tmzsm0zh2e56k", - "coins": [ - { - "denom": "uatom", - "amount": "53511690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17axtdgu8pc30s5j82v5f7t3sldnyfg4vp9lxm0", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17cdej4cyqcrx7d67c8y4y4sa0jp5lqhnnat6qt", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17dhmf3p7lrn7tccg65ljkk6396e80ww3epgj00", - "coins": [ - { - "denom": "uatom", - "amount": "24424000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17e9zmwe3gj2lmedhxeh473laaylknazaqzjgy7", - "coins": [ - { - "denom": "uatom", - "amount": "85032000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17etxqeq0s8eupvtppfspmk3rhfp7m9fhqe4p48", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17f2s4enn4kmhl3cc5wkys7xjg09uun6l8ss2wp", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17hcr54xe42f4qw9pllj20lzu2e0v7940rx0prj", - "coins": [ - { - "denom": "uatom", - "amount": "29078190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17hnhqra0xmferdjqz0ypkgj76t4fmx78u7x2hc", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17knx6xzq7l3sanrxymvpyep3nzumvmn6e4flec", - "coins": [ - { - "denom": "uatom", - "amount": "6500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "6500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos17mggn4znyeyg25wd7498qxl7r2jhgue8ep585n", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17n2de80m3mtz7yheygggqw2wnta5665t00u884", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17s3zkmz6d42rgvtxj3mxaqqtl6dtn4c75lwl4k", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17tj0c8eg9z9jxnuf4uqcsa9uxexd4m2dkk4mts", - "coins": [ - { - "denom": "uatom", - "amount": "3618000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17txgxvrqvh5w5k42d02z2g0tud8t4g6rknut3a", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17uj09xu5n47lxj4c63jckn9luj8mkytc0473z9", - "coins": [ - { - "denom": "uatom", - "amount": "877000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17vfjhvgqy2lpsh36rxuu9lknxvqv3gcgnpl5nu", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17vqcum09r9a3tqhjhzd9x595g7u5ytq3we8urm", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17vz69tgz6ld6m8c3dm4yvu2a8psvrjzvml5ksx", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17wjj4e4xjlk6qtdk3uw432vs3pmvkv0de6z7f6", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17y0pkw9khjew0hjvzwd3gzz8rmvshnshys9yqy", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos180temxfldsrfa66aljp083nsru48q8829f6j6y", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18209hfrqcwvu9gufukf73v0y0kmwlzzevqvnrh", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos183cmyc8jkxcfu6nlv96pgx8kpznvdwyg35r9gd", - "coins": [ - { - "denom": "uatom", - "amount": "1658865310000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos183njknhc0swepfsk7pe3fl5a460flchngjadxj", - "coins": [ - { - "denom": "uatom", - "amount": "4621850000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1849m9wncrqp6v4tkss6a3j8uzvuv0cp7wcgvqa", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos187449y3w8dhknd2juecf6p36fa4h0puqcgqk57", - "coins": [ - { - "denom": "uatom", - "amount": "2479420000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos188n58739vj8l255e003geywxgxmlf2cvdts98j", - "coins": [ - { - "denom": "uatom", - "amount": "20091190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos189n8jcs42t56rzs7cur9wtz9pfz3sxacs5fcq9", - "coins": [ - { - "denom": "uatom", - "amount": "11669000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18aey0ctrk62clagpkx9g8gjl95y5nwcrp0wm5z", - "coins": [ - { - "denom": "uatom", - "amount": "45229000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18d7qc52nrtqs37z23lue5vkjhm4dsg6jz4nkuq", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18da7h02z3e46ulee5prg5zl6pr9va0ytv6w46k", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos18fg6lnzr2pa8fdgx59we6mjx8j9xazamnhahmr", - "coins": [ - { - "denom": "uatom", - "amount": "34035000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18fml63ahzjfksvm8xvzjrn2mwt5lees29ydzyd", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18h0d669kf2jray4tc9hmw6hhgedjht57czcaa9", - "coins": [ - { - "denom": "uatom", - "amount": "2315360000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18hlpxdl3qfqesa6elyt8ve5ajermylmt5re9mt", - "coins": [ - { - "denom": "uatom", - "amount": "18092000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18jjw9lhf9ukdkkpyzf4pnlt8u0jm2azynzq96e", - "coins": [ - { - "denom": "uatom", - "amount": "8317000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18mcq4np40nsaq8xz30ttydwkn4up6grdtxwxcj", - "coins": [ - { - "denom": "uatom", - "amount": "13342000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18mpuylanyjgmn93qhpf32hl8zwctg3tc4z5pj0", - "coins": [ - { - "denom": "uatom", - "amount": "67473690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18msk2v9uc07qawxmpn3esqwfw7q3pu6scvjs3u", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18npp0s2tffdx29qc0wrw8d48xrgcx2apw6dmv4", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18p0pre4n0v443v63uhqzsq7dd89p3r6xpqlk40", - "coins": [ - { - "denom": "uatom", - "amount": "9136000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18ptg027t5cumqzkhpn726uhdqdadh88ss7ytv3", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18t9m2k2k4uvstya9395k9ksh77q6ea7qp4j4cn", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18tsmk4temy707cdm24a3nvsl93zwhfelx44qzz", - "coins": [ - { - "denom": "uatom", - "amount": "29392000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18tzqax6f8hzzee2lq5xxszqn9dfqkj2jhup4tu", - "coins": [ - { - "denom": "uatom", - "amount": "20353000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18uqr3vkuvdjf7h429r5pg7wlxhfrefpp5y399k", - "coins": [ - { - "denom": "uatom", - "amount": "361840000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18uyeklnyra8l490dgd5cwqt9gapldt6ludg5jq", - "coins": [ - { - "denom": "uatom", - "amount": "197785690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18v9z53lxlwzc2mq0e4h45cmr64gu2g6w6yd4fx", - "coins": [ - { - "denom": "uatom", - "amount": "24521930000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18vpv7ah7fd6uyza4sfvmtjyl8jyvn29p00dudt", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18xynl3ttqus798h9swq4m0zh6ydtggu6jfs0pz", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos18y0lmghlznvzsvc0shgyhx4crpfw8gzdr6mk5q", - "coins": [ - { - "denom": "uatom", - "amount": "9943760000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18yejf5zqwdlyltgggl5w59pfjgsak9tcf4kqsg", - "coins": [ - { - "denom": "uatom", - "amount": "40703880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos192seuxmvm9q6ffxc3gwphrfrsy4hjexnvcuszg", - "coins": [ - { - "denom": "uatom", - "amount": "77117000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19324cndnlqnjh5mzmg6kfccw8em6x488cqmgtu", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19326pupkn08hesezwz4wq84p7uw9arlsmtr0v6", - "coins": [ - { - "denom": "uatom", - "amount": "31661000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos194nez388h7mf9ncs4m8kaxyg23l5pgt9nftqxt", - "coins": [ - { - "denom": "uatom", - "amount": "42968000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1967cxqqs02p2zg0ea42tp0yr96hwdlxx2nn3x9", - "coins": [ - { - "denom": "uatom", - "amount": "8718000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1978ntmxhx5mq3ek8tua5354qlg04e7rdp7rvxv", - "coins": [ - { - "denom": "uatom", - "amount": "23293000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos197fx7exczhnxy5t5qc2q7z3c4ph3yc567tgytw", - "coins": [ - { - "denom": "uatom", - "amount": "13952690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos197gw9ztm6vznn6u2f4k6spg8zzcqyee220sup2", - "coins": [ - { - "denom": "uatom", - "amount": "206248000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos198a3unr79svl8xhwjxf6q3fpytdwl2wqc8naqe", - "coins": [ - { - "denom": "uatom", - "amount": "4975000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos199843dmw5r4nkt6ld00y0wdm0rnnwump4lgs30", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19c08vkd2qr6trpjt38yktr8yv93fu635qarmwk", - "coins": [ - { - "denom": "uatom", - "amount": "2899440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19et5tu2zamw20aeppxh0v9kdxzqvxypczv0x9f", - "coins": [ - { - "denom": "uatom", - "amount": "316000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19gnlu9qg0h5zhxf58lmpyegyjp6em5wh0pgd35", - "coins": [ - { - "denom": "uatom", - "amount": "226602000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19h4ngd2y80mp9ud66len698n88qq56dz6wcw7f", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19hgskf0cfpsn5dx9m2wpwem600d60wyqtjdjmm", - "coins": [ - { - "denom": "uatom", - "amount": "5427000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19hv3h65nlvpqfum4jgugct78ak8wfemjfeyygj", - "coins": [ - { - "denom": "uatom", - "amount": "27119000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19j2hd230c3hw6ds843yu8akc0xgvdvyu83c6xl", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19js2k5v45js5ezxmtts8mgnrz558zfk2cxzwju", - "coins": [ - { - "denom": "uatom", - "amount": "223390000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19jt06nj50nv59w3w39y2fwuw2j4g9jgzkju0uu", - "coins": [ - { - "denom": "uatom", - "amount": "3916000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19kwwdw0j64xhrmgkz49l0lmu5uyujjayrfzmuq", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19kxfw669usn8lv3fshw24cr9vczv5lrz9w57ng", - "coins": [ - { - "denom": "uatom", - "amount": "20353000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19lnlh0uhzyeuufgja68m7vw4962zlwz6vpkwru", - "coins": [ - { - "denom": "uatom", - "amount": "1763000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19mvahxc84g2kkjfe9f746v325qj03hnw3z0sv7", - "coins": [ - { - "denom": "uatom", - "amount": "639906380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19npgxaxnl6jp307pj672amxm3w9m6wlwuhl8gr", - "coins": [ - { - "denom": "uatom", - "amount": "9091000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19qc25l2nwztml9nvhqpg7y55420uvg59yur42v", - "coins": [ - { - "denom": "uatom", - "amount": "11668740000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19qde837rqx64kcvnazzywrdhx460dvah0nw9q3", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19w55ez8454gzl2z2ffr37asns4vc3pg58yxv8l", - "coins": [ - { - "denom": "uatom", - "amount": "7192350000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19wlk8gkfjckqr8d73dyp4n0f0k89q4h7xr3uwj", - "coins": [ - { - "denom": "uatom", - "amount": "2260000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19wnt5h3ae6953k2xlayxdwytaddt0fss99vshs", - "coins": [ - { - "denom": "uatom", - "amount": "79152000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19xk778d40u60w0jt7x6jchmha9fr726xpeqcxh", - "coins": [ - { - "denom": "uatom", - "amount": "19846660000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19yp3j6zm9g82afwh8wqz07p4zmpxf0udk0rz2f", - "coins": [ - { - "denom": "uatom", - "amount": "23267840000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a0l4p968xx6z054n4z9l7kqsncw7zjyf8fq6kn", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1a2404s0kwanud0gu0d0tg8zw4e0hp595m9z9an", - "coins": [ - { - "denom": "uatom", - "amount": "1085520000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a4eeuuk38z45wqxpc2kxzrnpvlnrrjg74lj76x", - "coins": [ - { - "denom": "uatom", - "amount": "5226440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a55nuwfqa66hz5f6c6f8ehmwh9dfmnku6dvttm", - "coins": [ - { - "denom": "uatom", - "amount": "11758000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a5exrzmtda036c7vwnrnj6lycagsxgyzpn4hpd", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a5rsatuv2gqcwmzfd5w8texgzlms5vh4r0wk4w", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a5v8jyh23j4vzgdra00xyxwpc99zn4lz52uvvk", - "coins": [ - { - "denom": "uatom", - "amount": "362981130000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a6kfadt24cgm9fy8z564jrglc27vtfz9kuphjf", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a835w4qv05epzaezl6mlhmwrfek3fxergp8pjt", - "coins": [ - { - "denom": "uatom", - "amount": "1154190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a9l4dq6s44k7dk4lx0us6g7xsunartz8rscnx3", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1aaxx3hwch6g32258s07a57tx9vd26f8nagwt8e", - "coins": [ - { - "denom": "uatom", - "amount": "32783000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1acz4u36dwj8sufz3kettxad3ukpel2skquvelz", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ad32hmndh6g3a9pj99cq6guqereyg84j7ke99j", - "coins": [ - { - "denom": "uatom", - "amount": "6750860000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ads4ttzyv2xgtesg4q78h56s8stdndhyf7fnru", - "coins": [ - { - "denom": "uatom", - "amount": "67845000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1afzj42vde5yae8uht4qqxhw747w8k4dd05x5eq", - "coins": [ - { - "denom": "uatom", - "amount": "20726640000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ajhsgsx3hs2ph5wcfmus539hrsset7vam8vw6r", - "coins": [ - { - "denom": "uatom", - "amount": "10022064000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ak0henvtfcvgeztfuwdxk4m5dzyvympedkpnc3", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ak0v68rxfdug9tdkalxks674gm2hrn0lzh47cj", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1aksvus854fr2kss97lvqnnkmv906yfnx07tyyq", - "coins": [ - { - "denom": "uatom", - "amount": "90007000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ammw6wexx4uzhy9akkdvtdxrn9x7yerf9nsuax", - "coins": [ - { - "denom": "uatom", - "amount": "678000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ap5m3nw7rd3f5pfc38cg3vwau5wz98adqvr956", - "coins": [ - { - "denom": "uatom", - "amount": "122628000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1apvnx0qxfvccx87sx0cdva9wj587txamw6rs7u", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1aq4j6gz0tcj039nn74pdfefgksnqlld030lkhf", - "coins": [ - { - "denom": "uatom", - "amount": "26751190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1arzft4x9l030g8u4d90x0p5lng348w2tqavvx7", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1atceykap8x00pyyfhq86ju9q3avkm4zq23yw09", - "coins": [ - { - "denom": "uatom", - "amount": "31661000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1avy9rn9nr08xsm0c46lm8avqdfe4wdyyc26ydx", - "coins": [ - { - "denom": "uatom", - "amount": "12556490000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1aw99lzepmhwlt3d3dy4qp55kjr75d0e3v6vmth", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1awk0u59cq3667pdxm7vchwwe7fg27caf5ega6t", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1axf80dwgpdwxjfmy08pu94q27kl6qguxmpt9vj", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ayx28ayl80skzs207xcydtfx5s75p09fwysrlm", - "coins": [ - { - "denom": "uatom", - "amount": "11029980000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1azeer78z96rsv495e7rge4vzts0l9hwg9qdqfx", - "coins": [ - { - "denom": "uatom", - "amount": "7236000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c0829zzzlm7lujdf8nn3mrhmg9zjugqnrrtzdg", - "coins": [ - { - "denom": "uatom", - "amount": "995060000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c3f2nwrvgmp2hnat67xunh06gr0vn5mw9u89vm", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c3ynnn0ra95ehaakss2ultxf7tsw79j9yh8e3d", - "coins": [ - { - "denom": "uatom", - "amount": "22250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "22250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1c4f2cd42ttmx5ehntddlc7g6cj3cpwtmsqk6um", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c6n05ya4s3z8tws4spxfzzvefj5h9qquc0dvud", - "coins": [ - { - "denom": "uatom", - "amount": "10321000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c777qqzngczeq3r4nl9sd4dy33c8smzekm4uzv", - "coins": [ - { - "denom": "uatom", - "amount": "4522000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c8md8kv77089p9ww3aeq8s9f5vfmthyzekwuyp", - "coins": [ - { - "denom": "uatom", - "amount": "3827090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ca2vjnl75ew97xkm9wdps4lcexflzeucupg3wv", - "coins": [ - { - "denom": "uatom", - "amount": "338757000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cakgyd9pwshggsf4rysl7kuv2z94k7plkq456x", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1carjumua0ut4xugapz0qptvdz0pxs2jy0ur3z5", - "coins": [ - { - "denom": "uatom", - "amount": "6356810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cawhs2t43pvp9rstva6fceg6nzgr6g8mfmrjnn", - "coins": [ - { - "denom": "uatom", - "amount": "2250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "2250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1ccz8r75ktu2g3c39l3yjyx45g22y5mzctp7tpk", - "coins": [ - { - "denom": "uatom", - "amount": "5217130000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cd9ra2h8r2flmkm3fpek4hpgjkaxvsey36d5s4", - "coins": [ - { - "denom": "uatom", - "amount": "221054530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ce2gkxuug6g388qd535tk3p70ej2xkkvf5jm6r", - "coins": [ - { - "denom": "uatom", - "amount": "269767000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cf9yqlamxgeza4nsn7y08vpkcs7qqjp4lzw9ac", - "coins": [ - { - "denom": "uatom", - "amount": "135690000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cfz907vjr334a3k0r2sxveeu3fa2uz4hnlta82", - "coins": [ - { - "denom": "uatom", - "amount": "104705690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cg37yfw5dkyj8xpa0mpqmdkr905srspcrvfmz9", - "coins": [ - { - "denom": "uatom", - "amount": "180920000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cgdwmxhp9ry6gzghr89kgd4gpjemq4e6894c8r", - "coins": [ - { - "denom": "uatom", - "amount": "21257000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cgh5ksjwy2sd407lyre4l3uj2fdrqhpk84m04f", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cgnkhljjjylg2k3399xzug6accr3h2cgq8j4ka", - "coins": [ - { - "denom": "uatom", - "amount": "452752000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cgr23u765dxxh066t39ds9xl2rrk4mdqtywa3y", - "coins": [ - { - "denom": "uatom", - "amount": "13116000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cj7u0wpe45j0udnsy306sna7peah054upxtkzk", - "coins": [ - { - "denom": "uatom", - "amount": "11081350000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ck7h62s26z4xtuqgtdxesw5axjjcmaw2g0c0ht", - "coins": [ - { - "denom": "uatom", - "amount": "8135190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1clpqr4nrk4khgkxj78fcwwh6dl3uw4ep4tgu9q", - "coins": [ - { - "denom": "uatom", - "amount": "2163429000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cnc0m7dj95rxz0s8y30yxnyd4kzjm0gw5hmem9", - "coins": [ - { - "denom": "uatom", - "amount": "6342690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cq5de34d4ylcdwg7mllhrzk7n0ut4mkr5c2e7w", - "coins": [ - { - "denom": "uatom", - "amount": "18665810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cql9ska0xl2rkg6gcv0np4333gn6fygs3qf90r", - "coins": [ - { - "denom": "uatom", - "amount": "447001690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cqqdwg3sqx67z5thv8e94a0vhr8c2dhj7uexf3", - "coins": [ - { - "denom": "uatom", - "amount": "858465000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cs22ajqnf7vy020rzyhhxrmssltpgdqmkvkfm0", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cuj93ht7jgnhj9w95p50avflxs54vzwerlp26v", - "coins": [ - { - "denom": "uatom", - "amount": "51184690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cwpk832c06tktzk3hlezvecnrvg3pvgsvzl29v", - "coins": [ - { - "denom": "uatom", - "amount": "8125880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cwzdvwm3swqt8l45eh92luyfjlxsttg84ctgxe", - "coins": [ - { - "denom": "uatom", - "amount": "213132000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cy7jye9jkg6k4h9wcurdcx7q4ld03m4853my3u", - "coins": [ - { - "denom": "uatom", - "amount": "26233000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d09xxsg6dg7kn33jf7edv88uhytqpq7p8hxjz3", - "coins": [ - { - "denom": "uatom", - "amount": "50021190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d0aup392g3enru7eash83sedqclaxvp7vkr0y9", - "coins": [ - { - "denom": "uatom", - "amount": "232260200000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d0syacm2y4dv6265z3wr0790gg6s4r4f467mer", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d6ymsqmtrmfw3dmwn7mgfkflldg9q8rkyv7r4f", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d7g8nr79qhm8n2l0hysfnfwazwmpvl3kglwklq", - "coins": [ - { - "denom": "uatom", - "amount": "5421000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d8mzdtl4eet2zhy9d4fttx92thrl6at4q60wvz", - "coins": [ - { - "denom": "uatom", - "amount": "36184000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d9ql5ny5vas8fgtu3m6ua78ky8ygrss8v3pp99", - "coins": [ - { - "denom": "uatom", - "amount": "243795000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "243795000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1dafhhp2a5dmud90r5r5ws5fmh4hkptkt7szm02", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dany3yuj5qzcyl33qjcxwc6m478a3wftv347sh", - "coins": [ - { - "denom": "uatom", - "amount": "26000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "26000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1dc9zkd4ssrlnvktx8k97yz7hr2x6ewj6ju7zak", - "coins": [ - { - "denom": "uatom", - "amount": "500295690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dcjfpgrhkws5pudchn57vacelm6qzch6elxuqt", - "coins": [ - { - "denom": "uatom", - "amount": "248765000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1depqpgtsj23yd7d43hrt8l0965v29ktxmcf7xj", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dfhdn08a4f999nhk0yh7vdjtn92x2vlgljalfy", - "coins": [ - { - "denom": "uatom", - "amount": "1154190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dh25cx369a26phe0vfr7742rnvumkvqa9humf6", - "coins": [ - { - "denom": "uatom", - "amount": "9065990000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dh9g0lze0spa3zwx7ug673e4l98hxyyss7aa70", - "coins": [ - { - "denom": "uatom", - "amount": "22250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "22250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1dnapr4ckuajc6dajnm9th32jz5uw2auk2smfwj", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dp780ugw75g4l70ghgxl2qqxh8mjat6nslcz0q", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dphn9lt2pz4ulh8q9xw00n25g09lsd72762a4h", - "coins": [ - { - "denom": "uatom", - "amount": "11043940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dtq0y9reqst7d99fd3c7x6dflh4eazm4ha8qqh", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1du246y64t906m3gnd3l9zqdx4zfzkzmk95j846", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1duza60r8w3vl23xkzpk33anenj8kzejvxa8srh", - "coins": [ - { - "denom": "uatom", - "amount": "1151860000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dweyhr49jt0c3napejxknl36regjhv6jzxvgp5", - "coins": [ - { - "denom": "uatom", - "amount": "696927190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dwnxpdce69kyyfyfh0myygg46ka5egst60f45s", - "coins": [ - { - "denom": "uatom", - "amount": "62500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dydep8eafk3yxwvdqkr0fupfrga3x7cfjk7tw2", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dyptg9vsj92w5l9xn60kgw6ue4e6f9kh9mwrvt", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dz6wztnz84a505ht25970w7htlp7ek7fjsycwf", - "coins": [ - { - "denom": "uatom", - "amount": "16463000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e2fyddrp9mxng9lk8kpqs38hcusrsnwel0cqkq", - "coins": [ - { - "denom": "uatom", - "amount": "36048720000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e52gjsd2r7rxuetvce9jygdhrzt77swvssnryv", - "coins": [ - { - "denom": "uatom", - "amount": "63797030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e5h4hqp298z6m0mm9ycnaawacmspgvujncqyyt", - "coins": [ - { - "denom": "uatom", - "amount": "8141000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e5mnjg4d6qprkash7vuseahgk2grrj43nk56sj", - "coins": [ - { - "denom": "uatom", - "amount": "23509680000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e6m4qmhyzj8v8j2yfdcz04qnewna4npsa3rvh5", - "coins": [ - { - "denom": "uatom", - "amount": "75986000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e873vumcqx00swf69wjqlkp22tww4jemdcmkkw", - "coins": [ - { - "denom": "uatom", - "amount": "6288690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e9jlmhjnhv0z5wj64gz0dwn6q523xyxexne9dq", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ea3exnxgkmwgjjd74ran5434humf6kd8arr57s", - "coins": [ - { - "denom": "uatom", - "amount": "14021000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ec3p6a75mqwkv33zt543n6cnxqwun37rxqj2vl", - "coins": [ - { - "denom": "uatom", - "amount": "6500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ec95g0hxhxey9pen8wtqeggxce8r2wj59qskz3", - "coins": [ - { - "denom": "uatom", - "amount": "4062940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ecxqsd0mt5mrc3649zy42kff5ethtrrgua0fkw", - "coins": [ - { - "denom": "uatom", - "amount": "19937030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ed32ulmk32n079m9hx7sankadlf7wrdg5wql65", - "coins": [ - { - "denom": "uatom", - "amount": "1899000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eez6ks7upkjf8w3eaz0vah7x3d8zkade206xa6", - "coins": [ - { - "denom": "uatom", - "amount": "11624530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eh5mwu044gd5ntkkc2xgfg8247mgc56f8pycyz", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eh6l0lzaw29rvkwt5wcazhddhfuq4qt8jyq8q6", - "coins": [ - { - "denom": "uatom", - "amount": "166481000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ehkfl7palwrh6w2hhr2yfrgrq8jetguceek792", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ehmcn2t856kn2ls2kpsr4lj6ev3unxrwf8zr7r", - "coins": [ - { - "denom": "uatom", - "amount": "290877170000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ehs0p8tlq2mnvef4wx2hfprwamfrauxy5y3yp8", - "coins": [ - { - "denom": "uatom", - "amount": "333333330000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ehwjr5rym9lftlfhgaelre5pkynjhtalctrxpz", - "coins": [ - { - "denom": "uatom", - "amount": "14788190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1elwl77g7uzxfmpdg54m7s3mx8gtm5et0d6maqm", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1emaa7mwgpnpmc7yptm728ytp9quamsvuz92x5u", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eq9dymmd8x04khj8a8qd6xmtp2yjna0v236waw", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eqaeazuat8cpzs2fy79mkpf5j00axq59zey5c5", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eqltfeluftz2r4xa86vnakvqzq2nkdmzdfycra", - "coins": [ - { - "denom": "uatom", - "amount": "572440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1erynlmy8crgpgvkgy2su2r7e6p5dlkfq7v32mg", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1et93zj3z539acj3vzrfaysh9qs6lx883cwwxtf", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eva437c5hw4kx9wd8wya7ykpkrktypu8d9kz9f", - "coins": [ - { - "denom": "uatom", - "amount": "17833870000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ewmayyze0svkhhsq7gs5yc9gv8uezn3tlrekqv", - "coins": [ - { - "denom": "uatom", - "amount": "29399000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1exmthnluucpdk9qjewm0de0chhyuvfpmjmu78v", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ey69r37gfxvxg62sh4r0ktpuc46pzjrmz29g45", - "coins": [ - { - "denom": "uatom", - "amount": "29500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "29500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1f0kwe42k9xdmlxt939m6nq7h9shj0rygnldusg", - "coins": [ - { - "denom": "uatom", - "amount": "217104000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f0zwrlfjjl8twrsyxv22p8jdqtym9njaksfs2y", - "coins": [ - { - "denom": "uatom", - "amount": "217352000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f2r27aau0kaa69mjqvacuzdmutly0k87399jg7", - "coins": [ - { - "denom": "uatom", - "amount": "75081000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f2w8yef59ptjwh0lygs75vlezhd0s6lulmhydt", - "coins": [ - { - "denom": "uatom", - "amount": "58282040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4anxz5sphpxcuq644h5hvxf6wsalz36ac454m", - "coins": [ - { - "denom": "uatom", - "amount": "119620000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4l4najn30la6gytsfrzenyxuxnjgpsx3vwqd7", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4p03grrcvr9catgnguwx4gpksmyxxx25gqquj", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4s6960hvjhxkhlzs9h90ehuzg3qm5j3csftzz", - "coins": [ - { - "denom": "uatom", - "amount": "24311000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4uneac5gaqlzt8vfv5fxz0dfz2zhpppwfkkw5", - "coins": [ - { - "denom": "uatom", - "amount": "5927280000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f63lrmnn4upu722kxdhw04taxa6w50lnchnjp4", - "coins": [ - { - "denom": "uatom", - "amount": "30304000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f70nsqtq0wcd0kymq79ca2p0k5napnm6yqc94x", - "coins": [ - { - "denom": "uatom", - "amount": "944802440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f7sa4nr5nhlt57vy5553tqzs5dlz7x6jx6uxw5", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fa87w4w5yezm42jph2cuku983wes8379junyhj", - "coins": [ - { - "denom": "uatom", - "amount": "46528360000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fcyx472u3r2cg90zufv9pludp8r6scfwu2hnhx", - "coins": [ - { - "denom": "uatom", - "amount": "7236800000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fdc28n58lqannhd587384pqcahusmscxdumlkg", - "coins": [ - { - "denom": "uatom", - "amount": "981010000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ff0dw8kawsnxkrgj7p65kvw7jxxakyf8kqnyy4", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fghgwhgtxtcshj4a9alp7u2qv6n2wffqj4jdl9", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1fgmzta85ud989ksqrch98v4s99mx3u04pjmvxz", - "coins": [ - { - "denom": "uatom", - "amount": "567665860000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fhejq5a3z8kehknrrjupt2wdl4l0wh9y2vayhr", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fj8u0refnfry3y2w8m799txwatzdrkgd22yqxt", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fk8whxged3s54s0850m7se79nlm5d9c53w4lfu", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fnf34rnxl4u3u8fu6z2qzf49d74neteg77zd40", - "coins": [ - { - "denom": "uatom", - "amount": "90007000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fnt8q5k70flcwgwsazz8gd3vc7lmw3qnjq6mu5", - "coins": [ - { - "denom": "uatom", - "amount": "22162000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fshyfd0z0rhqcrf0jjd9yu63um6q5ajl3zq8qc", - "coins": [ - { - "denom": "uatom", - "amount": "60214480000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fujmd6kpgy4az4y6rsduwap0s6sazgd0sndu2e", - "coins": [ - { - "denom": "uatom", - "amount": "31661000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fv0n3e4uww6u2l30ptskx9rgjqklm53l5xsxhw", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fvq93ef35a04an9kpz6rjqryg9ecmvr2xc3zrf", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fw06varlctvyjuc6884kvjnavq26qpmq4f4tle", - "coins": [ - { - "denom": "uatom", - "amount": "255934450000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g0y2xpyzz4we4zwlafus9vvpd3tey76mhp0pw7", - "coins": [ - { - "denom": "uatom", - "amount": "472401220000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g29wu5nm7hfke3an9uzv9d3upv3zvk5t7hggj9", - "coins": [ - { - "denom": "uatom", - "amount": "34891040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g5435cjhlm4s2nlmwln6ess9x4lc4qgdfep2l6", - "coins": [ - { - "denom": "uatom", - "amount": "52014000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g5c2w65svkcxxat72nscc0mwqj2gsrhrem3cpk", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g5c490lh0syrnq4xqyc83e9sdg7l63emjy6dwj", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g665548pcf7x70avextvkxm5rlk5ekrtegafdp", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g8622z29zmgsh9cmf56uzq5zyvvt4fnsn295pm", - "coins": [ - { - "denom": "uatom", - "amount": "402094000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ga6hy630ejh2s8p2kvql4jxjt6fcnj0nl5vjqu", - "coins": [ - { - "denom": "uatom", - "amount": "944802440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gdlk85s7dzan6zf7857smkgsdccde5lq9ndnn5", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gdv7kzg2lvx6k5w6nxq84q8r9z2ujpve0krhkm", - "coins": [ - { - "denom": "uatom", - "amount": "29851000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gedwk4nn8d3ge3efjcq54lj8p9r8mq5hlx5m09", - "coins": [ - { - "denom": "uatom", - "amount": "112622000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1getk0gxldkqnphlv7g8pl7xn79v8akwxek6yxf", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gfnd3dq4qaeklznfw6aqkw9rjg9uymqefmh9gw", - "coins": [ - { - "denom": "uatom", - "amount": "53099000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gg3vkw8hp034wer0k7p47pehag3jvnqh62h4v8", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gg5tynt57lf9d69crj0vzf3m6rsqelz46xntp8", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ggvr6v6cnkmlx4efqcn3ycwjjswkruvyfvnzz9", - "coins": [ - { - "denom": "uatom", - "amount": "76438000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ghykl3xtrum0znvuqdk084hyfywqcqjqmwcs8j", - "coins": [ - { - "denom": "uatom", - "amount": "100410000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gj3zlw8nze9wftanatrj7fneq0ud8y86ftm4un", - "coins": [ - { - "denom": "uatom", - "amount": "40708460000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gk6py8fukt8dnaad00atemjqjlhjlwv9rgw6qz", - "coins": [ - { - "denom": "uatom", - "amount": "90505000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gle4fkzf6wrfzwl3hawd4pg27fcsnh4f7nacdk", - "coins": [ - { - "denom": "uatom", - "amount": "500295690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gp6drj8tmg2hxe70rpdlhqdeamgyjp2gpnvd82", - "coins": [ - { - "denom": "uatom", - "amount": "10402000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gq9yqlhvhtu6a00vydyt8wztx66yvpjy7a862g", - "coins": [ - { - "denom": "uatom", - "amount": "8819000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1grgelyng2v6v3t8z87wu3sxgt9m5s03xvslewd", - "coins": [ - { - "denom": "uatom", - "amount": "1467495660000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gse07606lxxyrgpm0yh0rxqjv3cqhx6jsc04yf", - "coins": [ - { - "denom": "uatom", - "amount": "231178140000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gtquva5nww59ejc3hjvnchslqlsvsmw8wjvgtx", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gttnelxpkehyglfz8ns85j72rm25nvf4gw0drr", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gtzfw4n8m6cr0f42f4psjmngkqm6jfwaukm9dh", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gu0mkhx3w76wz3v2pd0vscsm94zu3htgnmjku8", - "coins": [ - { - "denom": "uatom", - "amount": "62500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1guxp99wf5q7dnh7jc6s7wx4zwqm8z7chwts3nk", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1gwuzsm5cccy97gtjze2lzk2jyya8y3xrlgcme2", - "coins": [ - { - "denom": "uatom", - "amount": "54274000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gwywmna0jky46mcj3wvc336qgyk9u2n3c74az7", - "coins": [ - { - "denom": "uatom", - "amount": "70089980000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gxe38pdkz5g2h3g07pwa96zunsyugkgxa7cym8", - "coins": [ - { - "denom": "uatom", - "amount": "8716940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gzuqry88awndjjsa5exzx4gwnmktcpdrxgdcf6", - "coins": [ - { - "denom": "uatom", - "amount": "10855000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1h40lfv50fmdnge9xy57wgyy985xrwjpmu9t2h7", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1h8t0vx9kl8vvkldqafct2gw6gehka8y9ks6znu", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1heeama0c774937c85vu4sxxnz9hlqppa8lgdzc", - "coins": [ - { - "denom": "uatom", - "amount": "2311870000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1henglqj5c59wrhezdas8ldwu578a0xs5e74csc", - "coins": [ - { - "denom": "uatom", - "amount": "2894000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1heqh3s79g9c4atf7pmnyhxk20nw2c7j7lmau32", - "coins": [ - { - "denom": "uatom", - "amount": "144283000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hgev2wqdmncqwc6w8nxechk32n8kpahgu49avy", - "coins": [ - { - "denom": "uatom", - "amount": "8135190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hh8dfz9jcvferdkxl8qf9swv3ps4l9p2qnzsxj", - "coins": [ - { - "denom": "uatom", - "amount": "121180000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hj3j4c4728gkznevtzz7n2ageyf94z6kgdg59w", - "coins": [ - { - "denom": "uatom", - "amount": "81429870000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hjct6q7npsspsg3dgvzk3sdf89spmlpfg8wwf7", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hjykmlfysrzyw43nqwc89eyg74q5apuntnqsps", - "coins": [ - { - "denom": "uatom", - "amount": "36183000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hs39xzk0qn73crxgv5vwu884lxn7z99ryrzmrh", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hy7sg2r2apyx7nftljcrt3aaxdha6d0v7pvpk0", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hyup7rv2vqlmzpu3mg34knepfxpnt2yrk8vspz", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hzdne7xvvs8unp497t6x0g32lpz6m5mqk9zq7d", - "coins": [ - { - "denom": "uatom", - "amount": "26292000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hzzkqn4kpqcvzauhdzlnkkkmr4ryaf8rj6rhkj", - "coins": [ - { - "denom": "uatom", - "amount": "2000000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j0vaeh27t4rll7zhmarwcuq8xtrmvqhughud6h", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j26c4k2jj9tv95whdhva3e8v2fcm4s3dpt77r6", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j2ec43eha7u0nqwd3f7fy4ufehlnh2k5u7c599", - "coins": [ - { - "denom": "uatom", - "amount": "6300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j2yz3qt0589jfffu44djaamj23gvjmt8me5ff4", - "coins": [ - { - "denom": "uatom", - "amount": "1356899000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j468a986hzugntgdf7f95ag2m5part4ngclgmz", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j4mk6l3emyncu84f5fcxgn9n3vdjn23jcnlkdt", - "coins": [ - { - "denom": "uatom", - "amount": "88835550000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j5n75yls5aun28eu02w2hdthmtx29pvesya0gh", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j7u72t4jfwxt5z04uwvf3s68zmaaxqxcxpz6zm", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j82fa8tkvdr2pjgn3hm367l0z8v2hj738f4fvc", - "coins": [ - { - "denom": "uatom", - "amount": "6903000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jcuur4r62sak3gjv7cj2sdawtyw64hkdaj7tgg", - "coins": [ - { - "denom": "uatom", - "amount": "45297000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1je2h4pjr8tazzmse2lue86lharxktxg466g5c8", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jf0nkx6s8r480kpr084xz3fsj597k6c2czhhk7", - "coins": [ - { - "denom": "uatom", - "amount": "18422620000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jhnz3se4uax336rlku7tpk7kv28n69n6vj7465", - "coins": [ - { - "denom": "uatom", - "amount": "24876000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jhtmsepzh85p355dht204uxqdu7h5d8e5v5g9x", - "coins": [ - { - "denom": "uatom", - "amount": "217104000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jpjacusjyym9txdp6pqug88rcq6tk05ckmc05p", - "coins": [ - { - "denom": "uatom", - "amount": "479360000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jqnqx7gq7gn89r0ysjufnnat85n5f9e5axywfz", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jsdwaf0enwmgl64y200n8pg9w3xs7g9cl2wj38", - "coins": [ - { - "denom": "uatom", - "amount": "62990880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jsgsm6zuwefc6pvmvl8495az4psq7gs7dedqgc", - "coins": [ - { - "denom": "uatom", - "amount": "86337710000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jsu8kqf8pv6pf2rcwylulvp73a453q382wep43", - "coins": [ - { - "denom": "uatom", - "amount": "63983190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jtrpj3aza5myet2vauveehk4nt4e4dgq4pk3md", - "coins": [ - { - "denom": "uatom", - "amount": "31661000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1juhegqg2wltwwlh0gur5p3rlkcm00fpr498p4g", - "coins": [ - { - "denom": "uatom", - "amount": "11094000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jw5gc0jtlmhjqmmjey0kshd5xn967xw3ulpeyj", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jxv0u20scum4trha72c7ltfgfqef6nscj25050", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jy2cq6zdyzwtj2ujdcxpzudwdaenersnl4k77d", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jy2q22yw290efhfsrwlfqanaq52vq59dz0hyke", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jy6mmuqdwaawjc8qlwf3r9ml3zlqxa68azgl4r", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jymtql33ej852ck06nmxxds8cqlwqws95622yj", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1k6496vg8vd507aukcqrr55nhwxjqmpjsq56mvd", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1k6ddn5mzggf5f87pt70kyk3mkqd7r9fv97pawy", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1k9a0cs97vul8w2vwknlfmpez6prv8klv29tea7", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1k9sjll9g57mw3unhepv50ctfwt5c2743m5vt2m", - "coins": [ - { - "denom": "uatom", - "amount": "1748790000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ka5tua6d6l570vxtttrzhr2jux5uhe2gwe7l4z", - "coins": [ - { - "denom": "uatom", - "amount": "2080000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kckhyem9suhzhah62z2kwzqk5apjtct5w5gawa", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kcy04c0qe8a6h2fuf3f788e6mp34avlhg7efnh", - "coins": [ - { - "denom": "uatom", - "amount": "135690000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kelcz0n9hash8zxcngavehwyzt0c7073655skd", - "coins": [ - { - "denom": "uatom", - "amount": "90229110000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kezzd8q3lc8wek2ks48e36cv57jvtsr74l9uf4", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kfd4x65lanps28wh8dtr39g0uxzqu7wdccxesw", - "coins": [ - { - "denom": "uatom", - "amount": "20933690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kfzj0sr07drru6gpd84qrq2h0d68pkd4mqp3hr", - "coins": [ - { - "denom": "uatom", - "amount": "62417000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kg99k8wd67r0ffxwavgnxup7yk46rvttrvqy7d", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1khlqhj8vkmj5hkap47740xcwmspz7ydpkxtuxn", - "coins": [ - { - "denom": "uatom", - "amount": "85484000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kj0h4kn4z5xvedu2nd9c4a9a559wvpuvemr0vq", - "coins": [ - { - "denom": "uatom", - "amount": "33250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "33250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1kjhdx3nkh6krdhryvjzkq33xwh6wsyy785fsga", - "coins": [ - { - "denom": "uatom", - "amount": "17187000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1klmc0xh37pu5ajt53z7l3aekmej39s06ccfgqd", - "coins": [ - { - "denom": "uatom", - "amount": "3362510000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kq5yvze3vx6f2gxdyv3s3c3js72ssf0f5kkqj0", - "coins": [ - { - "denom": "uatom", - "amount": "4520000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kq7fnx7qv93fs9w38e24hkp7jzmrxl9f956ywn", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kquk63vg0c7ugpd4n9l2hfemys9kgywwl67vpf", - "coins": [ - { - "denom": "uatom", - "amount": "290865690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1krfmhqvfzmxex5uw5atjwfs9xpqel6hvqajkyt", - "coins": [ - { - "denom": "uatom", - "amount": "184302910000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ksnnpj9x33hvakuzt02gq0aufacg72w7u5kv3w", - "coins": [ - { - "denom": "uatom", - "amount": "9950000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kucpygly3ynswdf77ersas9ejdlp5erucprymf", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kv7kh4tt9uq728f9rw68dnvjfgvgt8dq0yc296", - "coins": [ - { - "denom": "uatom", - "amount": "107040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kvy9pqu3ul0x9263cgl3x58g3jccqyf2jdu00x", - "coins": [ - { - "denom": "uatom", - "amount": "472401220000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kw3tzazwumt2rhpjg76ud0z2gvuzwmj5ylaf08", - "coins": [ - { - "denom": "uatom", - "amount": "5296250000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kwstysea0p8stxe349hru6hfxc78zsjnekexxn", - "coins": [ - { - "denom": "uatom", - "amount": "20250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "20250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1ky7se9m7mpfg638m0sjtd79marsfgkj3vchkza", - "coins": [ - { - "denom": "uatom", - "amount": "13686740000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kz72mcgym3wwcjcqcz05e6uue2842w2npa2t2v", - "coins": [ - { - "denom": "uatom", - "amount": "31986940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kzzwlps38rgv7gwyye7dy3ppymsrze65vep6qx", - "coins": [ - { - "denom": "uatom", - "amount": "15830000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l0whphamp06f9envh55juf5k8z25h9ju5fpzyu", - "coins": [ - { - "denom": "uatom", - "amount": "1148370000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l2lvpakkxs6dcg4t9kdeyutwyxkaeglx5dj4p2", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l39ln38tehqg2k7ujhalgylz9qk2gr90r5njsz", - "coins": [ - { - "denom": "uatom", - "amount": "36606040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l45lk6uc0vkz3n9ljynnuge29fprymes98036k", - "coins": [ - { - "denom": "uatom", - "amount": "237061000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l4d8nle9eztwsqf5l9mv7exsxe0rlfsp5fjvjz", - "coins": [ - { - "denom": "uatom", - "amount": "630506000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l4tdmtdndhhjae4lkt05vk9t2gx2m742ts7e3m", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1l5e7lk6cj553jzfv4x9k3scnyxzz70vc4222ka", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l6gz5zk8k8s87emf4q5jlr84gp3wq8x3y6lw7t", - "coins": [ - { - "denom": "uatom", - "amount": "7500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "7500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1l72ggdcp99y6z56g4g775a07ff8f3dx4a60ugx", - "coins": [ - { - "denom": "uatom", - "amount": "135690000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l7knghep9aerjsj6z76wcn2up5p5m6r2quhrcs", - "coins": [ - { - "denom": "uatom", - "amount": "2495196090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1la4t7jee73a4zqg9ccs2acjt462qjs5xkls4n7", - "coins": [ - { - "denom": "uatom", - "amount": "198147000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1laqefwck8mkxt44jfn7fnpynfv9f2utyw55shy", - "coins": [ - { - "denom": "uatom", - "amount": "1017675000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lcech8j0wnzxh8v7eeyp9jue2m3vy7d8wp62uy", - "coins": [ - { - "denom": "uatom", - "amount": "70099600000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lcsjy2d5s33h0sddd8lpuqvwyz5ruz7jsfj43h", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1lddgsstcvk0myvd77hhl7quxlyzy62qh5twpzl", - "coins": [ - { - "denom": "uatom", - "amount": "5798880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ldp79s287ycz8faf30c2dwllmx27py593yegdh", - "coins": [ - { - "denom": "uatom", - "amount": "2145490000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ldzd5tlpe66vpuc9267uknwrlr7fdw7xjkjykw", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lem6pqkt64ge7yyfs5l2yxxrg78uvvju8afwlr", - "coins": [ - { - "denom": "uatom", - "amount": "90000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lenvpq48ehp83x70nxuw797949twzhcycrucv4", - "coins": [ - { - "denom": "uatom", - "amount": "54241000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lgpsaas2nmgrdtuhhgg7q8fxvlvw3nkp02pptl", - "coins": [ - { - "denom": "uatom", - "amount": "9045000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lh4gmzrpr84rv37jgc7l3jf4zz33l92zscmzaq", - "coins": [ - { - "denom": "uatom", - "amount": "65583000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lh76pvy2ew873hxxnvl5gqpsgwzm53qpf6x78y", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lhpdp3nasvc66nxx7lnq604usfvjxlsm8h6v3l", - "coins": [ - { - "denom": "uatom", - "amount": "17433880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ljfjvdg0hps4ysqtckmx87w3hrwv54kn92waqr", - "coins": [ - { - "denom": "uatom", - "amount": "174514530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lktjhnzkpkz3ehrg8psvmwhafg56kfss5597tg", - "coins": [ - { - "denom": "uatom", - "amount": "1000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "1000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1lkznpljvglyfehzngujl93l0d3elfvua5kdvy9", - "coins": [ - { - "denom": "uatom", - "amount": "67845000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ll9zujtlpzym6m684hyh5hnwn4rnpz4v5fh660", - "coins": [ - { - "denom": "uatom", - "amount": "69800690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lmg2wqnkynmjyszn8vtze6q0082c9sjlplga80", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ln7hw9nk4rreyazuu0fuh63t962xyjddf3rs49", - "coins": [ - { - "denom": "uatom", - "amount": "12663000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lny7p8uw6tcvlnmw2yu0xcqkd32rgunwpqr47k", - "coins": [ - { - "denom": "uatom", - "amount": "568856000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "568856000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1lrkg4yx0sc92z7wsdvtg9kktu9jc55fukq5hkc", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lrkzz8aanx975lrqqzg0cmxyh027qzatu3s2az", - "coins": [ - { - "denom": "uatom", - "amount": "119277000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lsx4x2fdx4vhxz49t9sed8j5untc8yyllmfs4m", - "coins": [ - { - "denom": "uatom", - "amount": "572440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lt83tymrlkcg7jtfrzv5370z9uthttpvhf4jd7", - "coins": [ - { - "denom": "uatom", - "amount": "694280000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lujhkwkpwnsems37697fr9t0aja5gd0sjsxtaf", - "coins": [ - { - "denom": "uatom", - "amount": "90458000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lyc3dacgdsq9mlardxze4883w6uy0yw27txv7n", - "coins": [ - { - "denom": "uatom", - "amount": "18606690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lyqw63pe03ymaccav329g6xg8fxc0l3lg0gx32", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lzef80fkrqlj02am55yhasas4np8cmtrt0jyv5", - "coins": [ - { - "denom": "uatom", - "amount": "465479120000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m06fehere8q09sqcj08dcc0xyj3fjlzc2x24y4", - "coins": [ - { - "denom": "uatom", - "amount": "7236000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m5a8up77kweeynzu0yzpfdczycfvrl4c0fmsf5", - "coins": [ - { - "denom": "uatom", - "amount": "23966440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m6svdnu0x4jsnmglk7g8jcucqn5guleuffuzlm", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m8c39v2pwmnx0tuucnyn06wf73ex9qazsygh38", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m9fk67fjcfukfdjajr9dmf56u4twuwuj6d9vr6", - "coins": [ - { - "denom": "uatom", - "amount": "19675000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ma02nlc7lchu7caufyrrqt4r6v2mpsj92s3mw7", - "coins": [ - { - "denom": "uatom", - "amount": "3614756800000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mamljwqhnsk0z6vv8v0deq5ezpelm3py9hc0nm", - "coins": [ - { - "denom": "uatom", - "amount": "437050000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1matv39l58yuz0wugunzrxeshfp959r7yvm0png", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1md398keg7plc5g3jtzapxld9scmwue5rqu7ca6", - "coins": [ - { - "denom": "uatom", - "amount": "2241000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mgzx4ps4anyuguwqnlw28ak5wr8c25qpce6v76", - "coins": [ - { - "denom": "uatom", - "amount": "221627000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mh74w0gprseer9p7jnp77tpwjzc9e4ur9wzmya", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mhgrudqv6uy3vdwelztu2vmqqqz23wpu76jydr", - "coins": [ - { - "denom": "uatom", - "amount": "87253190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mjal8r2etj7px00469uj53snszng8fayz8y4f4", - "coins": [ - { - "denom": "uatom", - "amount": "40707000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mk8kvqsnge6e3edpx38dqnpn39zmqlsw46fcve", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ml3ajeqj5rhkhzw6ycqvx9r0yq79vg8585av80", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mlvmhj8z78965neevc4akynec0q5ln29a7ryzx", - "coins": [ - { - "denom": "uatom", - "amount": "485450000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mm0pznu93ckr3tfepz77v70pkvgf80w092vhey", - "coins": [ - { - "denom": "uatom", - "amount": "17187000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mmtur9t5y4twz8uhcw4nfqfug2vs9rggw90kph", - "coins": [ - { - "denom": "uatom", - "amount": "23254650000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mn4s582hcktej3xqfm6kmnkruvfn3nd4j4xklg", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mn7gqqweth02pvu73anyqhxt529upvn8c6x8gt", - "coins": [ - { - "denom": "uatom", - "amount": "4522000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mp6n3gay6uae5clywzjjczxakwzykw7yfa9d44", - "coins": [ - { - "denom": "uatom", - "amount": "22162000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mrkn3uug9dm32hyp9tcxs5dmmuspt7nezrdmhz", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mszqfjrh2af5k3jr4r3deukgrzdylkr2sc8pg2", - "coins": [ - { - "denom": "uatom", - "amount": "10430080000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mt9msx5q8wlcmt2qgl6qltk8fgtl995x3pnt7q", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mvvwfnfagp60j25dvqdc4ntslu4nef5cgc4x5k", - "coins": [ - { - "denom": "uatom", - "amount": "3481190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mx7uw3jw3dgky6ty67lgyrstfgte9nrvklws52", - "coins": [ - { - "denom": "uatom", - "amount": "13564000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mxksrhkyqyfathyz2ktv8e8738fygk0yj48a8c", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mzw42ehfw4md7yn49h329qss04qeq5rgzgkn95", - "coins": [ - { - "denom": "uatom", - "amount": "66940000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n0jpnal3nq2qpep8nh70gmtvqwzzhdqrs0yj6h", - "coins": [ - { - "denom": "uatom", - "amount": "2873000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n2l8pw5zxpa00w6ylrwk2nzgswq6xtpzs86sqs", - "coins": [ - { - "denom": "uatom", - "amount": "27138000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n5ewzhjwhg0j2ay3x7hv0zluqn8hgamz2w0l8s", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n5pu2rtz4e2skaeatcmlexza7kheedzhzf70tu", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n67u3kym9zh02yw9su36a5y8vp4fkpkzu3yhfd", - "coins": [ - { - "denom": "uatom", - "amount": "4517000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n76cq858ywc8nxmzhw0xew2y8uz9ce6a74xtna", - "coins": [ - { - "denom": "uatom", - "amount": "11614060000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n7ty7m0u8vwhg88jflw43wmvz7catru2n5ru4j", - "coins": [ - { - "denom": "uatom", - "amount": "139610690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n7vrughkxs2td00gjvfv2rrz8epu8ssqm6wp22", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n8dzlhvpk689az6hj9ert05hp86lznmuezdvrf", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n9dl7pmfdxae3zfytltd6hw2nn39luvpd8z7rl", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n9juyach9xvnsnkeale4kc4kjgaedvsaydqe9z", - "coins": [ - { - "denom": "uatom", - "amount": "174515690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nckqhfp8k67qzvats2slqvtaf3kynz66ze6up4", - "coins": [ - { - "denom": "uatom", - "amount": "14874180000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nclw22ywv5l0sng323q2ddxzvwjgn3z4lx76fh", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nemlw7n0engcdlypkp6vsmsrvq8c0me6fhq300", - "coins": [ - { - "denom": "uatom", - "amount": "40707000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nf7ysaj73qfq4hm586zy6np2h9a2vkpz7lfgct", - "coins": [ - { - "denom": "uatom", - "amount": "11262000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1njt7e57gdsej95qqajw5hrkchwe96n354tvzpu", - "coins": [ - { - "denom": "uatom", - "amount": "4954680000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nkq7w53n70c03njwxdxpvr28yh5c5g2z4yhssu", - "coins": [ - { - "denom": "uatom", - "amount": "24914000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nkrsk4e8jlfaprmn282zulhfvw00gagyd7k80r", - "coins": [ - { - "denom": "uatom", - "amount": "81435690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nkwj47xhgwee208uqjzmcuyp6e5pjrsh8xf4gj", - "coins": [ - { - "denom": "uatom", - "amount": "12657000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nmwsvgu0vzmt078sec7c0wsj925ndpsdj6c7tn", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nnha965g72e6hclmdqr0kqnzswa4lx4t0jhchh", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1npu2yuldsgxvg9a7gp9zfszx4rqw4q4p72fdfs", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nqeu6cz8rc0a9sk7ett9ews32pmhcejv0nwlae", - "coins": [ - { - "denom": "uatom", - "amount": "872615690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nrdxgccjqddjg0a8p3xsarmw8fveak6sylqlph", - "coins": [ - { - "denom": "uatom", - "amount": "1151846380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nse3tw56jdxxgn5tkedy5racut3janmwyu3x82", - "coins": [ - { - "denom": "uatom", - "amount": "1130750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nu8wvq4kj6qdwwx77d6dcmfnu3ut8m42xt30d0", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nv9j4uycfhqq278ku6tjam23q2fpc82g3k2hwk", - "coins": [ - { - "denom": "uatom", - "amount": "18092000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nwpde46ud3sthsvs09nj0z6p4s4d3gyqnhxmad", - "coins": [ - { - "denom": "uatom", - "amount": "113029000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nwyeyqudzru5l64e83dnmq79q4stqz7fwl5v5a", - "coins": [ - { - "denom": "uatom", - "amount": "349040690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nx3z56kpyk7xmpt4e8df7gsmd3lerj5t2lltzj", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nysdqwr87tn3znjpygx9g5qcd8wmkunfln9kzr", - "coins": [ - { - "denom": "uatom", - "amount": "81435690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nyvz6jl826yknlpre8mfsehu96xld46n2t58x7", - "coins": [ - { - "denom": "uatom", - "amount": "17648000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p0c0d7faqjlhw5y07kxwppatahu22wdf2mwn7f", - "coins": [ - { - "denom": "uatom", - "amount": "3931470000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p22hhezk9pevxmluq5kvzkumxk0jwrt7xqu7rz", - "coins": [ - { - "denom": "uatom", - "amount": "12549000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p2de78j5nk3cj480pzeka3unltede3nm0zjpe9", - "coins": [ - { - "denom": "uatom", - "amount": "349040690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p35nu7mzhkrumeyf3evwkyyg37gyvfl6ew752h", - "coins": [ - { - "denom": "uatom", - "amount": "28961840000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p54pu56t3h2r4ecxs863u9xpxwp28x8famg2yp", - "coins": [ - { - "denom": "uatom", - "amount": "4999000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "4999000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1p56ryxvkcmxsxx4ewwqm4gwe86qxtkhakxw358", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p79cw4nehzz469mqdul7dgpn3h8h82rphmpxew", - "coins": [ - { - "denom": "uatom", - "amount": "29078190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p90k8m3vmp3eqv3pc77q5fqsxaa6q7282veacs", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p99fp2s0kfmnx62kvzgzw6jjmzdx3elpjsx3ad", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p9qh4ldfd6n0qehujsal4k7g0e37kel90rc4ts", - "coins": [ - { - "denom": "uatom", - "amount": "2626020000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1palj9927mttgl7a79vh0et7xarrf5sl7n68lnd", - "coins": [ - { - "denom": "uatom", - "amount": "23545750000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pcf3jd9fevxtayq4hmkqdh7vlqmggymtkpeeaf", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pcm7sjpt8tu85v4hdkk5l3fh96ya9zm87lqvqe", - "coins": [ - { - "denom": "uatom", - "amount": "1842980000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pcp8rz54agefg7pyc8z6330x2k4syl8k8xg4em", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pd6xvv94p2env7laycms2u9a5p6vns3tys0tyx", - "coins": [ - { - "denom": "uatom", - "amount": "5163000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pdracc6yfmdfymy5g0kcfs3rgv3nxn322f8qw0", - "coins": [ - { - "denom": "uatom", - "amount": "572440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pe9um64z55xr0m9kqqkg25k6sfdx5agfyvsduc", - "coins": [ - { - "denom": "uatom", - "amount": "881000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1peq96jqmp9anxft7plu9qp4cpz4yr2k2zc28kk", - "coins": [ - { - "denom": "uatom", - "amount": "11624530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pexrxk6s9aznl8ap2g8jr87ktc3a7dd8ramv8p", - "coins": [ - { - "denom": "uatom", - "amount": "499296240000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pgnnyps08ul0t88sys4ujxj9p3ynkpu2dcdxpa", - "coins": [ - { - "denom": "uatom", - "amount": "11043940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ph3gaf93e5gqrkhp03lzsda480ns0gtlpkzfqp", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pj9e89gc8dkvv72wh5qdsxwrnwzev8tv8h9x3r", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pjmngrwcsatsuyy8m3qrunaun67sr9x78qhlvr", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pjyl4u9wa6kd0uf6rd3v8t24thce07xds5hjs6", - "coins": [ - { - "denom": "uatom", - "amount": "45220000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pmftv9ww3lxsjthrg6jx6ufy0fnr3ktsdupder", - "coins": [ - { - "denom": "uatom", - "amount": "510194000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pqcmhfe2w2nfxrnewytvftmxdvyx4qyrmcmjjh", - "coins": [ - { - "denom": "uatom", - "amount": "14383000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pqn5dkf40pl076j6nlyjxpwugy70fys9u84qn8", - "coins": [ - { - "denom": "uatom", - "amount": "1431990000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ps7dmygt4wm72t8l9kdjetelhggsv8w7m0ezaz", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1psrctylgxcljnznqadmadcer9cww2dwcw7da4x", - "coins": [ - { - "denom": "uatom", - "amount": "6060000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pthu4mfl387qmuw78p4mf3q2e53cfhntjr9jk3", - "coins": [ - { - "denom": "uatom", - "amount": "22609000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ptvxv7mrc2j3d838dqzex6y79muyemgfasdwzg", - "coins": [ - { - "denom": "uatom", - "amount": "18601960000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pun5csgup6utufjcnamcasdksn07sj7pfr23v0", - "coins": [ - { - "denom": "uatom", - "amount": "3618000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1punelxh7ddptn3l7y66ap7jkma7wwucktuky69", - "coins": [ - { - "denom": "uatom", - "amount": "81490190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1py8pz0eqh9jj99dxtxg4tw72hta7j3laks0rys", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pyjq68qvtjknvya00w5lthmpax2rv49veqp5ec", - "coins": [ - { - "denom": "uatom", - "amount": "113073000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pywfvze6804ex9fqn76esgngg8pln2rqmdnncp", - "coins": [ - { - "denom": "uatom", - "amount": "16578250000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pz6yu5vdxfzw85cn6d7rp52me4lu8khx7lpkzd", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pzvc7f2kyyu308ymmccyjc0qk8rev04rz4ef4t", - "coins": [ - { - "denom": "uatom", - "amount": "984810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q0856f9c8wap7a9lgc7a8f8zpe8qp9ltqw4uda", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q2whngssgsaar9hepyneca25f8du3qpvd7wvk6", - "coins": [ - { - "denom": "uatom", - "amount": "608648960000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q4jlqdxsd2r0ch9k8e5m0wt0r2lgyjq8s72auf", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q7fqlrrds6dsnz3qgrar9ewfx70cpd6a48qksm", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q7rlfnh2kv8d3cf6jfn857434tmdyax3dkktm5", - "coins": [ - { - "denom": "uatom", - "amount": "20353000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q8zznpjplw28lyl9a4nkelywx2dsc5c6k7zl0y", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q9jn2rmzvylgd3m7pevnltw25l2na3ym88ktcp", - "coins": [ - { - "denom": "uatom", - "amount": "31770070000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qcgc3qddheqtwapjux77g65zl95mwfdrdxqe8k", - "coins": [ - { - "denom": "uatom", - "amount": "312087000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qd432aem98lvzpjcq78gvzqputgcs0906tltef", - "coins": [ - { - "denom": "uatom", - "amount": "40010000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qfeq0du5mul8xeru8kzrsr9k3dhdcaw5cruy7a", - "coins": [ - { - "denom": "uatom", - "amount": "10000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qhq9k9nze2qj2ssgcqvn2p9dss8gde74dwgv3y", - "coins": [ - { - "denom": "uatom", - "amount": "2108260000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qhutftnqgkgct4gwwugf2flpk5xqhw37zxvw6j", - "coins": [ - { - "denom": "uatom", - "amount": "2974760000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qk93t4j0yyzgqgt6k5qf8deh8fq6smpn3ntu3x", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qltk6ax7knwm2w35heldnh2ac50mwvjucdn3r3", - "coins": [ - { - "denom": "uatom", - "amount": "38445000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qmrcjzskgtlwmfs9pqdrfpmp5l5c8p5r3y3e9t", - "coins": [ - { - "denom": "uatom", - "amount": "127974530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qnjpy999uhmvn99ql45206gxed7j0fz5k33gmv", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qp7mt75j9g3vtq238gkytjc70zpzkz783hhyl2", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qp8danhdx66c9mhnlmsfk9zj45e0yju82r5a7h", - "coins": [ - { - "denom": "uatom", - "amount": "1134000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qq2c4klc6q3cu6nay4y08kxpxz7lx6w22f9vfe", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qqp837a4kvtgplm6uqhdge0zzu6efqgujllfst", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qr37tv743eeagr97qzdy2p26m5gfh34upgx2gk", - "coins": [ - { - "denom": "uatom", - "amount": "271380000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qr5dttjyacpzv9jadtljxumqfxt3n2xz24nlm2", - "coins": [ - { - "denom": "uatom", - "amount": "7088040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qs5jvg0y038dclggauk680ew3dzzjfatkzy4u2", - "coins": [ - { - "denom": "uatom", - "amount": "100775000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qs8tnw2t8l6amtzvdemnnsq9dzk0ag0z37gh3h", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1qtg904z3ewk64dqrurwfy3z5ml2yy7lfntuwlz", - "coins": [ - { - "denom": "uatom", - "amount": "1696000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qus2wghpxqqjmeez9reepxp0f4cpeay446c74c", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1quzyy8gg59p9epvrlp3ac26y7vmu8snxatlw92", - "coins": [ - { - "denom": "uatom", - "amount": "64226000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qv5u4lpujwzyk5t5dp7plm0vceke4680zdaxad", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qw4wqnpa6dg4lhx37l66zpk9ahxege2jgfrhsl", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qwl879nx9t6kef4supyazayf7vjhennyjqwjgr", - "coins": [ - { - "denom": "uatom", - "amount": "55000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qx2r2hfs6d5pmqrv5ysgpg6ekjy052ucv2hl2q", - "coins": [ - { - "denom": "uatom", - "amount": "4954680000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qx7e97ucf9lgxuymvnrgvgveh35hkls5w0jl5r", - "coins": [ - { - "denom": "uatom", - "amount": "5220380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qy54a0n0qca3mc20ahcazg0fvq7td9sz2nzrx4", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qz9k9tyz5yar7lpwmwashscs9ug3muwpgrlrj0", - "coins": [ - { - "denom": "uatom", - "amount": "17442030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qzny67usplncefpwpy29pa34vjasw76t2rlwhz", - "coins": [ - { - "denom": "uatom", - "amount": "56537000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1r3xvguuhwvlk34esxclvrh3g7ycmcqqc2kcn9v", - "coins": [ - { - "denom": "uatom", - "amount": "1005010000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1r69aysu2evn03y8cmmj4hjpjy76yvx4l0nhxm3", - "coins": [ - { - "denom": "uatom", - "amount": "54276000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1r8kyvg4me2upnvlk26n2ay0zd5t4jktncnrz2j", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1r99ewt8lfm8ukqy9l5mnwzahklcc9sr7hpx49n", - "coins": [ - { - "denom": "uatom", - "amount": "19167000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1racgy2z2rn20gsllpudhehnrxsvkfh5ekums9m", - "coins": [ - { - "denom": "uatom", - "amount": "90000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rcp29q3hpd246n6qak7jluqep4v006cd4v7r6v", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rd03uq9lgw0pzq7j6fe48pf5gwxqmkv2dwmtqw", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rfpar0qx3umnhu0f6wjp4hvnr3x6u538qdmsep", - "coins": [ - { - "denom": "uatom", - "amount": "243860290000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rg5k9w2yfe44nxh9vzvnta7mmkhp5cxmyu6ye8", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rghlnnl4kx0773sjvglt69az6qp0n8yfnf0kv9", - "coins": [ - { - "denom": "uatom", - "amount": "5798880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rjptzea522cy83xkxk7rqrdtdr4n9j570kjetd", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rkf3ppe369h4lhkpsezxy8d4tjtk3xkd8frmcm", - "coins": [ - { - "denom": "uatom", - "amount": "1402000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rlw94njeqhtqd2hq90stlfzd7s37am0f6nqamy", - "coins": [ - { - "denom": "uatom", - "amount": "271380000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rn7nwwys7823d79pguzg2y0hu94e83d5chllg7", - "coins": [ - { - "denom": "uatom", - "amount": "27590000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rpgtz9pskr5geavkjz02caqmeep7cwwpf29g2p", - "coins": [ - { - "denom": "uatom", - "amount": "1163490690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rqq5xpqnlsrjthylt3slqceeae9uqds86ra8rr", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rrn636u3vc3qvuu9lyg8eef7yqemn2t6ytuk3t", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rwh0cxa72d3yle3r4l8gd7vyphrmjy2kydpnje", - "coins": [ - { - "denom": "uatom", - "amount": "203535000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rwy66drn0kqxy55g9f25at895twg83tpxhs8nq", - "coins": [ - { - "denom": "uatom", - "amount": "2201340000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rzwuwnwnwu7j8qtw2c8qynygfluzlz5he634v3", - "coins": [ - { - "denom": "uatom", - "amount": "3975257000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s05va5d09xlq3et8mapsesqh6r5lqy7mnr69mg", - "coins": [ - { - "denom": "uatom", - "amount": "19770190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s0aywgc6rucfscng07fnw0fj836mhz6m8rvxdt", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s0pwsadgef938vydcjt054udf9npjm6nhsaqt8", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1s24ht39ea9pquwa2ry3zwd4ahlq5zlj5pgakzr", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s2husgn2kge2tzzghjjs64cq6y3td6nz3n97ew", - "coins": [ - { - "denom": "uatom", - "amount": "20351940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s33lvg063nt89wfwzfr39enhukz0f5nzq43hwd", - "coins": [ - { - "denom": "uatom", - "amount": "610821350000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s65zmn32zugl57ysj47s7vmfcek0rtd7jd2mp2", - "coins": [ - { - "denom": "uatom", - "amount": "3000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6fa7qfsddlgyjvyp34c8ess04knzsvc5dxu0x", - "coins": [ - { - "denom": "uatom", - "amount": "93070690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6g7nh629lkgz4merqa2fs4dmz3mt3k4eqa0xp", - "coins": [ - { - "denom": "uatom", - "amount": "44552740000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6mjam9nzl0wrm4n4hdalhafzqf6mj92q3htvx", - "coins": [ - { - "denom": "uatom", - "amount": "8839410000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6t3wzx6mcv3pjg5fp2ddzplm3gj4pg6g996zm", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6x9fy4wc49wj9jx4jv6czredqsmp46hmc8rxn", - "coins": [ - { - "denom": "uatom", - "amount": "203539000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s7jnk7t6yqzensdgpvkvkag022udk8429exc87", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s7lvr6csak9w727z0kqs49rk3c9scvxmspflvz", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s7nxav9fmfd0ssygpwjgcg8w9wngauhrk5c77d", - "coins": [ - { - "denom": "uatom", - "amount": "105295000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s8l4s0yzael6l0nah84epxh5yz5cf76u89ytdw", - "coins": [ - { - "denom": "uatom", - "amount": "2899440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sawg4pzgggemd7c8r2clqnxvad9wn4zgwrpsen", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sc5tqjr3nj9tag26esellrq5lv8hkjcpuj959g", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sdf80g92at333j0r3hfh3ksuqgpg4f07y22d88", - "coins": [ - { - "denom": "uatom", - "amount": "69791380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1senvv2u54yrsvkq9yx6hcyuvztnxrsvkuzdenh", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sf3c52je20nlsjdv52e0z5lazhq0qfdwpxyjln", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sg3fl5xfzws0qy9vumwxjmh39etytarm03jh88", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sgfw5kye6gt3rd54l9tad35sretmerqd08u7t3", - "coins": [ - { - "denom": "uatom", - "amount": "11637330000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1shnytr97ayetf0jnfagzevg6eukxrt387dsz0w", - "coins": [ - { - "denom": "uatom", - "amount": "440992000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sjllsnramtg3ewxqwwrwjxfgc4n4ef9u0tvx7u", - "coins": [ - { - "denom": "uatom", - "amount": "20000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sjnp34784gv5umtzh738vzges7rd5w7pzeq82t", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1skv2quty6zavcqfrnq746ll2pmyvj2739yy4gp", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1sm0huqu76wjug6cwkf3szft00v9v7jmgthlcqz", - "coins": [ - { - "denom": "uatom", - "amount": "284949000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1snkhgrjm7psup3stcls2w05zagkdgznjuyy6kj", - "coins": [ - { - "denom": "uatom", - "amount": "255960690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ss2mv7my5wfnu44dlf6l6twvwa7as02ex9338k", - "coins": [ - { - "denom": "uatom", - "amount": "477724170000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ssm0d433seakyak8kcf93yefhknjleed4psy4g", - "coins": [ - { - "denom": "uatom", - "amount": "1000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "1000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1st2m8wtzue48np8s23dde9l4k48ysxq6q2u38y", - "coins": [ - { - "denom": "uatom", - "amount": "134887040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1stdsvfck3f57sket7ctgu2t7ttv8fryd8prxa9", - "coins": [ - { - "denom": "uatom", - "amount": "17675890000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1stgjr5njfle7l7n6dfz7mp57qlh7szaa8fuksl", - "coins": [ - { - "denom": "uatom", - "amount": "21258000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1stzck6a0k43pl9ejnk5tr43w608sxrmasfnz3t", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sxt8m2p2utvk6l4eujw9stw4v66vg6etr4dqq7", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sxx9mszve0gaedz5ld7qdkjkfv8z992arw3rr5", - "coins": [ - { - "denom": "uatom", - "amount": "15000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1synyl86cpvgdulaema06q0fpgyyl6dhfqflgly", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t089vcqvwj8zjvjsgcs6536d2mnrsy35kdzdpq", - "coins": [ - { - "denom": "uatom", - "amount": "40254000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t2l9gzea970hv6t76yplde6p5hy439uyajnkl4", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t3k2fuwz3st27dhdxylp9l2wkuwyhwupsvg58h", - "coins": [ - { - "denom": "uatom", - "amount": "2783090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t4474v5qw68n0aqepvv604vv2pya7cawg04arf", - "coins": [ - { - "denom": "uatom", - "amount": "633000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t4d3puws6ekq3ea04hvl7xezktwm9vsdj6y2xx", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t4vumykc5a6pqh9ccx9p3s97jkdnwgs86ncp0w", - "coins": [ - { - "denom": "uatom", - "amount": "500017000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t5yzs5976z4jt4pqw6fugdavduplj3u0l6ur8u", - "coins": [ - { - "denom": "uatom", - "amount": "8716940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t65vwu5cfm2hkg0dypfum3yqvra7nl4k9fv4ph", - "coins": [ - { - "denom": "uatom", - "amount": "1081000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t6sa50ndrz86n5capmykgulq2sdjjnx4r2exsa", - "coins": [ - { - "denom": "uatom", - "amount": "9498000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t8axgkx2gr823z2yqw0k7plp9w5juse0glfg26", - "coins": [ - { - "denom": "uatom", - "amount": "349492000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ta4h8d3nmf26jnmterl9a0m3xjvfdl48aqhjwg", - "coins": [ - { - "denom": "uatom", - "amount": "23609740000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tafzj3shqtft48t76pr6zmf4a90qh898fc5sqd", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tamutt3kjme06pz37jgm2x6rnrkhn0drz3dh92", - "coins": [ - { - "denom": "uatom", - "amount": "7236000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tdzsht8v3q5jnl2w7shq95ftlnqw7ny3a9c4mj", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tf9s77gwa8ad9xu3spxu2lw9v0ax88g2fe5ksn", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tfu7cuvzqnfw5tkk2mvl9vufah3tckw90s6zhl", - "coins": [ - { - "denom": "uatom", - "amount": "4985210000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1th5psrspfm9sam0k0d2tvsg4gkufccm9tzpr3g", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1th5r9ln0w7mcfcf4dst20qq3spyqqamerruc6x", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1tj7hxdkt02ueu7qu3gr9djnslduv4pqzeq7d8f", - "coins": [ - { - "denom": "uatom", - "amount": "1895000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tj8llq623cux08lu6cpw5nqfrrmhj2khgl0p4u", - "coins": [ - { - "denom": "uatom", - "amount": "1149450000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tk22p4e2uvce5y4m5swvc3ll70xenrt8x0sf37", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tk45julzpkclj3ff7khx368f2fph0lrk3gstj0", - "coins": [ - { - "denom": "uatom", - "amount": "5807030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tlmk432tny2aca5hjunkyqpx4mulunj293u290", - "coins": [ - { - "denom": "uatom", - "amount": "5105000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tlrwaqseh9rkwv0hswseu859w5uca3ve32ehnf", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tlsky8ega2e0xvnzl0j6hsmch7ygz22qq250e2", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tm7ju9fa42e2lwszpcasshgx39arftpqrjxewx", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tml59gl7qflpaju52mtemexw0ss0q0fnnze0ag", - "coins": [ - { - "denom": "uatom", - "amount": "50011880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tphkrxqtm7j9pqzvdklnapc9jqp3l5yn78nagm", - "coins": [ - { - "denom": "uatom", - "amount": "2493000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tpnyr6y9ayn3kte0pum2cj8mhl0dk2uv73qadn", - "coins": [ - { - "denom": "uatom", - "amount": "308440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tr5var87ga3fyy9d0r76uurpmkfm05rg52jg5q", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1trqsnq9jkugpslstnf0y3rpl0qwzs0zfp46fr2", - "coins": [ - { - "denom": "uatom", - "amount": "432820000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1trtdsqckllr0lyszm0c0v4rz8qxjhjvhjwaphv", - "coins": [ - { - "denom": "uatom", - "amount": "4514000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ttj5h6n4kpmhda8m08qeugppzglf33z6y2h7k0", - "coins": [ - { - "denom": "uatom", - "amount": "8593000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tumrwcmgtz8sj7yvux457cwv95g4n4wz9ykdpk", - "coins": [ - { - "denom": "uatom", - "amount": "497077000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tvqhaznwr8vc8e746esugcet4sk6p5ptaf8yut", - "coins": [ - { - "denom": "uatom", - "amount": "34890150000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1txqn8qm8cj3964j28guffxlcpcrydcpce5v80e", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1txugpka5zzffaau7hlqqgxye2qk4ekyzkl0t3m", - "coins": [ - { - "denom": "uatom", - "amount": "8500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "8500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1tysr6zanywwwqq2t23ajvu3qv6vfluz7fpayw6", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tysu7n60waa24lsr5t6qpn5qs59tpqgh094jlf", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tzkmqgpwtv24xjjwjrp005z96jptrlv3gpu7l9", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u2w2c7qj6p2xellxmqd6gllc8ly6dcunvgw7r9", - "coins": [ - { - "denom": "uatom", - "amount": "2899440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u3vw6awaxhrhzg8t2f2tqgscuej2rl99e63mm7", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u60synv0qpup9jr0nmlzwgpan3gvaw6w3g9zfr", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u6ddcsjueax884l3tfrs66497c7g86skk24gr0", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u6f8zgdrvyj793ahpzgnz69uxl9say23xuhh9q", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u9km7tuma5w9tg4lpz0zw97jy7n6ey9p9z7kxg", - "coins": [ - { - "denom": "uatom", - "amount": "5807030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uafmj8ygu0m8hec0e30uztk005x4mjyu7lu4hw", - "coins": [ - { - "denom": "uatom", - "amount": "95427000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uan2eh7lqapfjj8aze84lgc72skvtle9dk4gmz", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1udqmh9zttxerhht8m9cf0xpntyqdmjafdq3y2l", - "coins": [ - { - "denom": "uatom", - "amount": "136110000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uevc8wcnzq29ma0apnmanwaun7ulerj8x7n8a5", - "coins": [ - { - "denom": "uatom", - "amount": "4620260000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ufs8s3ttfy99m8fns6mf5uk7rumwkufwq59kjg", - "coins": [ - { - "denom": "uatom", - "amount": "22388000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ug4p9pyeqnfd2kvtvgl5ulu2h7k428sywsvrra", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ug6gutaanays5x2yglxwdth205n4auu6k3jj3c", - "coins": [ - { - "denom": "uatom", - "amount": "119243620000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uhnsxv6m83jj3328mhrql7yax3nge5svxcw7kt", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ujqvs49hfldegaygjhsu3zc6g2n5vpwleg6uh0", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uketaldk42ddqk5l476r5n52005thvuqsjaxvv", - "coins": [ - { - "denom": "uatom", - "amount": "59090830000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ul2me6vukg2vac2p6ltxmqlaa7jywdgtz5203m", - "coins": [ - { - "denom": "uatom", - "amount": "1020388000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1umc5pztqz8qrnjrvlkaka0esasgcwdem5hl6mj", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1unc788q8md2jymsns24eyhua58palg5kc7cstv", - "coins": [ - { - "denom": "uatom", - "amount": "6083156550000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1upa3etjxpjr2j39p7h2fpxs02mlkuwkk58uhtg", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1upxh3pgpvfs43jav04e5st8p5htyyff6ejv6cs", - "coins": [ - { - "denom": "uatom", - "amount": "104705690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ur3fagntpk0fq8jk37pz9sdzqky6527gk7uphg", - "coins": [ - { - "denom": "uatom", - "amount": "232687540000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1urde3ce4xxvg79fav0aarquhdvavy2dlmwn49l", - "coins": [ - { - "denom": "uatom", - "amount": "81414000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1urtpxwfuu8k57aqt0h5zhsvmjt4m2mmdxmxfwm", - "coins": [ - { - "denom": "uatom", - "amount": "12680290000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uv26ytrnmydyctq0s58ve2k6wn2p653m9yn69g", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uwdfjpacp89yv66h995klvmyw25s0kx3zuqx2w", - "coins": [ - { - "denom": "uatom", - "amount": "1130000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uwgts6wgmqj2l702dkd5kc8c429ntr26fzzc8h", - "coins": [ - { - "denom": "uatom", - "amount": "3316910000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uwvxkzvcy4p2t5aq07dzkyze2p3e2rkg8w03jj", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ux99fvzsve0dzfrjj3p8nwemjkph3xutjufk67", - "coins": [ - { - "denom": "uatom", - "amount": "2260000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uxh465053nq3at4dn0jywgwq3s9sme3lc9ek2f", - "coins": [ - { - "denom": "uatom", - "amount": "15378000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uxs50xa9s0fcqjhkuyhn52qng5pjl07nkhse58", - "coins": [ - { - "denom": "uatom", - "amount": "147860000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uyvpffp3skd84s7jfcnlwpjfp8g32luxpl27jw", - "coins": [ - { - "denom": "uatom", - "amount": "818000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uz4wtx83k6vaj666tnc7jg6hd3gmgsd962qst9", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1v0zu2hd2z2tr7q3gdrqw9jdh84tp407wdeluu3", - "coins": [ - { - "denom": "uatom", - "amount": "10855000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1v5s04rfryjd2606q3deauz4jlar3p4vcddzgjq", - "coins": [ - { - "denom": "uatom", - "amount": "34890960000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1v60nl7wzelzush0c0vqata60pjffc0rxe7xkfj", - "coins": [ - { - "denom": "uatom", - "amount": "5879000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1v864d3j7gagyud93a5ywnzk30mhm5ud4gf0l0c", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1val86306r2s4pdvax0nfs44u8vv6f08eekc8mv", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vam7f3edpkgn8nh8zxdvf47lwhgem0qqu4n36u", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vcqgjz8dgu4n28rr7yw74dzjcjhaesep0kyrtr", - "coins": [ - { - "denom": "uatom", - "amount": "512573800000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vgd0w955mvvgluhhywewz6g04nyfdkf2mnp7r0", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vjhuhye9eq389298vm0guya0n28z7xerte6pyq", - "coins": [ - { - "denom": "uatom", - "amount": "12077690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vjqault583hwktfj63k2hh7r02sj2a66v0chv3", - "coins": [ - { - "denom": "uatom", - "amount": "2261500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vjrx0lks65yefnsz4xk92vugda2z25esym5ypp", - "coins": [ - { - "denom": "uatom", - "amount": "639915690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vjsrfv693ng3f7jafduqdljmh6ynunwgsl4j8w", - "coins": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1vjz9ddg0dppsrkk73wuc4qjuqpkj8647zfkgd7", - "coins": [ - { - "denom": "uatom", - "amount": "6106000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vk6n2u902vd3keafeanppp6rgj5apdz89yu6rk", - "coins": [ - { - "denom": "uatom", - "amount": "13848000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vmex3mcg43fcp7skpqg3s4ucuq5xwh4q597xkm", - "coins": [ - { - "denom": "uatom", - "amount": "45139000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vp8w0ayytg5hkqwafggn8sg7m86dylc5hm3vv2", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vpwnq5sfxwgl94tmxvshjvwmgcnl3yku484pxm", - "coins": [ - { - "denom": "uatom", - "amount": "3825000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vrl8z2t4sh28l052zw09x5f6yuxuaqnz5ngx5c", - "coins": [ - { - "denom": "uatom", - "amount": "678000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vrlt99wgwwdpukhu9nf5yaps0yc4khqn33uktr", - "coins": [ - { - "denom": "uatom", - "amount": "1130750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vsa3xfa4w46ysvvm5a4qtpsuev9f38k6r9agnj", - "coins": [ - { - "denom": "uatom", - "amount": "4062940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vsw4244aesg3u2ekygxtkmhv6v09ja24wszz06", - "coins": [ - { - "denom": "uatom", - "amount": "996420000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vt9n9ccueagv5ye6pdenfteseuctchut89cfzt", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vu5uw0447u6d7a8cntnlyn5d45qqh2xdpvs240", - "coins": [ - { - "denom": "uatom", - "amount": "7981610000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vudtpjyplxrau4822u4uu9kfkavdfxg4gzms7a", - "coins": [ - { - "denom": "uatom", - "amount": "18092000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vusvp7jl4qkrg8ump6lppknv9vjd6ynhvvzdag", - "coins": [ - { - "denom": "uatom", - "amount": "21242140000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vuxqxymmpa2csgv4sdz9uw2ctxmxhp6txvalgl", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vvc7x8zv8tpqtuwyt0e2ct938r3yjwp5px6dd2", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vwcjdfgz8fqweapnzmwqutzntxuxdqslza6kzl", - "coins": [ - { - "denom": "uatom", - "amount": "666666670000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vwedycp8u53pywr7q03rzsrtc3jr9nzvj9nfhg", - "coins": [ - { - "denom": "uatom", - "amount": "151245690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vwtv6ryr49usqxckhd8awk4yl6ghhfkcjzag4r", - "coins": [ - { - "denom": "uatom", - "amount": "135690000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vxh2hsg7qmnljw23t4u4nfmdfp60kfhlletcw6", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vxkye0mpdtjhzrc6va5lcnxnuaa7m64khj8klc", - "coins": [ - { - "denom": "uatom", - "amount": "1266440000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vxn96csepjh44zn9994zjr5m2yvlhz00v2m0ee", - "coins": [ - { - "denom": "uatom", - "amount": "10428450000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vymppkgus2ez4xy0xuuh82sehc9vz85htjfr8l", - "coins": [ - { - "denom": "uatom", - "amount": "471975000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vzj0lluc43k64gagvy9wsygh33dk84h07a3rsu", - "coins": [ - { - "denom": "uatom", - "amount": "393486390000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w0494h0l4mneaq7ajkrcjvn73m2n04l8mx7xuc", - "coins": [ - { - "denom": "uatom", - "amount": "110523190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w0wd6wqg5h05ma2jlnn8vpgmgylkwlj04xn4kh", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w2dnvs7ea7xh0z8mda4s8a5rrw2jtxmwgw9xs0", - "coins": [ - { - "denom": "uatom", - "amount": "10113140000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w42lm7zv55jrh5ggpecg0v643qeatfkdqf5ua6", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w4w5zkxs6yvqc2qrvfyzpgdew7weupzlmdwat8", - "coins": [ - { - "denom": "uatom", - "amount": "1154190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w4yjwj3xkfhxpmleen09r43a8x5flple06f24q", - "coins": [ - { - "denom": "uatom", - "amount": "8716940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w5cun0sk4h9qznqvp9n04jr5gtryt585jhpg97", - "coins": [ - { - "denom": "uatom", - "amount": "94000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w7r7juymfdfk5gwjrn4m9ed8c6t7z0mv2j2tdj", - "coins": [ - { - "denom": "uatom", - "amount": "500298570000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wak4cqy6xe0e7qg48awmrx6hy2pcakpel6lvm7", - "coins": [ - { - "denom": "uatom", - "amount": "1141647140000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wctg56a2sry7y0s0q9hrps94pydpp3s6dc40z7", - "coins": [ - { - "denom": "uatom", - "amount": "250442210000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wdl73a63fpazz2yu5kt2043ttssssdwwuh5xgj", - "coins": [ - { - "denom": "uatom", - "amount": "45682000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1we6knm8qartmmh2r0qfpsz6pq0s7emv3um0vsa", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wejum9vngzlpaxjpa70f9w4jrs5rscx8cm7j2n", - "coins": [ - { - "denom": "uatom", - "amount": "69800690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wf3sncgk7s2ykamrhy4etf09y94rrrg43cdad7", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wg4hsxrhxzh5zc7d6nh0rydlchtjqpe6jls03w", - "coins": [ - { - "denom": "uatom", - "amount": "40707000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wgxc064ufumuk4d0yeg88t35lu36shey0m236y", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wk30uz6drwuz7vkjrml5jthn0c0m3yhdqruu6t", - "coins": [ - { - "denom": "uatom", - "amount": "35225000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wl34gmc5taa5h8dcr8rs3cmjdu7h0cy5cm2e39", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wqyzk3w0u50jr8c4ywdjrc7zc7rasdgmuhjtse", - "coins": [ - { - "denom": "uatom", - "amount": "823869600000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ws4uldqhet3td5mvn8p67f2m4dc9hd0gg6mr7f", - "coins": [ - { - "denom": "uatom", - "amount": "45348580000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wtv0kp6ydt03edd8kyr5arr4f3yc52vp5g7na0", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wv22tswlg3ll44zv33qvtktlra3dzf2q2tp6sa", - "coins": [ - { - "denom": "uatom", - "amount": "13481470000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wvyvy6xjcsmc7z7dxafsahyh8vzkx9cmknw42r", - "coins": [ - { - "denom": "uatom", - "amount": "235816600000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wxwt28758hs0efju99y7h74gkr4p9nn5yps04y", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wy5wm52aetuz0zlsgczducvat4rt3klmenddnd", - "coins": [ - { - "denom": "uatom", - "amount": "27137000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wz5hhslzj2zh7jspspyzs80l5tc72t9crw89z3", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x2eu920g3j8lr7uk3j36mlx3wgr94y5w9urw8s", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x3aysmuw5aay9cwfpchacnhh9kqazec8uc0alv", - "coins": [ - { - "denom": "uatom", - "amount": "8000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "8000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1x44ehmsaf8tpw6jsexxhgp04zg2fmz8v05x4yz", - "coins": [ - { - "denom": "uatom", - "amount": "1377580000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x53k8gwzy9nvrsrlf4pxhl76wy9efmhhrqqdgn", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x87epck7c83fhmpwfpr0cwd9ytptlp87r6shvj", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x88j7vp2xnw3zec8ur3g4waxycyz7m0mcreeaj", - "coins": [ - { - "denom": "uatom", - "amount": "271380000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x932mup5wtkrgmmrve4d93q2r2gvywe8gz02qa", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x9au3m6xwp6u3wrvl64jrxd9tdq5mwk86f0vf3", - "coins": [ - { - "denom": "uatom", - "amount": "34893360000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xd8mwh3gjwqmpzsh2gu64j9vqdl2qz7v5kq99u", - "coins": [ - { - "denom": "uatom", - "amount": "11759000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xdq8z0f04857d585pt5qusu0vah4akghq06fw6", - "coins": [ - { - "denom": "uatom", - "amount": "11624000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xgfc763f5mt3283ahu7ajjhks8vtg2nhsv3xfs", - "coins": [ - { - "denom": "uatom", - "amount": "10000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "10000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1xkaurjjuyskmwlss9dpdd44vuf3j4agv64y94y", - "coins": [ - { - "denom": "uatom", - "amount": "499242540000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xkr952sj2f4xnhcq785w0ujj5yj5s50wfj9tvc", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xl6453f6q6dv5770c9ue6hspdc0vxfuqtudkhz", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xlql2yz8jw96c66m693pldzhqw36hzeq88urh0", - "coins": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1xn58cd3dth3sjtsukm8j4tar2yverjk9nkrzfw", - "coins": [ - { - "denom": "uatom", - "amount": "11594390000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xnh9rtnq2fwhkrjvak93346a30kmatk0lpzqp8", - "coins": [ - { - "denom": "uatom", - "amount": "9051120000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xppn98w0gg6wl0q2g2nasmkqlf2elwpkl7fc5y", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xtd2tgzj8tkeduj7fne64rwc6rs40x8m95rv6l", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xu5c29muv8dxk63ya6h3xfqhqnzrxdqpmc0kmp", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xum25ncl3svu8sptzqkr45gkrmd8jr7ksdmz0q", - "coins": [ - { - "denom": "uatom", - "amount": "101617000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xx3aqk6cel64jr5cmz8am4asyrffgyp6cpu64z", - "coins": [ - { - "denom": "uatom", - "amount": "11397000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xxpgxrhf7wtc462zpx7f57umcm45fnqj4334q0", - "coins": [ - { - "denom": "uatom", - "amount": "219817000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xxwvuvjvwzm60y5d79ju4aez2ullwxuw6qy3ps", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xz0n6fp570p23txzs0kex79tjhtymsghlwtzjf", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y0neqnxfpdekxkhegkgvztzckq8rhyumx83k6t", - "coins": [ - { - "denom": "uatom", - "amount": "98888190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y2q70f9jmdj8857nwz02xa7zyjd7a33v3eqlu7", - "coins": [ - { - "denom": "uatom", - "amount": "30584000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y32l54dp5huuv7mx8t7xefpe4vy3gqa77uj4yh", - "coins": [ - { - "denom": "uatom", - "amount": "180920000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y4jjwr9d4w0dg8wve6fn9wfgrgr3armjv2d3p2", - "coins": [ - { - "denom": "uatom", - "amount": "257217270000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y5v9twn4pypaudmhkf4p0hzsl4plgvgyvkagmv", - "coins": [ - { - "denom": "uatom", - "amount": "1333333330000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y5y7tutmzwuplxt63pw5s5weafl9vjvkecw4ed", - "coins": [ - { - "denom": "uatom", - "amount": "5556530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y740a2v76mlnydq0kez9vvfh3s3xhw84spxey8", - "coins": [ - { - "denom": "uatom", - "amount": "2311870000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y7arffhms3jhh955a647fvdst375fmfl655438", - "coins": [ - { - "denom": "uatom", - "amount": "13921240000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y8h0gzrdhfc3ptluavpq3v74vj9dg8478x9632", - "coins": [ - { - "denom": "uatom", - "amount": "66940000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y9yu4vvxshxqzy904qgscvlvph5xh5ksmnp77n", - "coins": [ - { - "denom": "uatom", - "amount": "11614060000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yahqdasye5d79uqyq6rdk8q2vtrq24w6pjuuny", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yazk9957eem97zcy3hq9aqjexnh3vy2khfjz5c", - "coins": [ - { - "denom": "uatom", - "amount": "232681380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yc3sw5kj867csny2t23py8j6c2ne2n3xpl7935", - "coins": [ - { - "denom": "uatom", - "amount": "35361090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ycf7umr5vj9qmhgvpwy5r9vv564fdcgxnyc8n2", - "coins": [ - { - "denom": "uatom", - "amount": "1130000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yct7yameeejv8ljy959vy4v5ywl93ataasfdks", - "coins": [ - { - "denom": "uatom", - "amount": "90000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ydesvs9m0aqg8gsfcwc2f6dfya2xar6crf65zw", - "coins": [ - { - "denom": "uatom", - "amount": "3172430000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ydewfzrdlx83qcl5xzta2x04duru8vgc39e97g", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ydsqs2p3r529rrp5rpsn54flv7lygw28kq43ku", - "coins": [ - { - "denom": "uatom", - "amount": "2668000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yef6dalq4amrrlaumd9uy4jq2j6ym8xjrplmp4", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yenask6kcrdkadhnwhterzj5agsmd3qp9ns2lx", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yfjealyy4svdsktws79nk2rrk0xtnfwjff2s33", - "coins": [ - { - "denom": "uatom", - "amount": "5317190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yglfznjlrdwq3n2wtsf0m2ekrjmvg0hylkh79d", - "coins": [ - { - "denom": "uatom", - "amount": "93070690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yh8gzq85gculfv4pq6h7dyjxjy4ljdep6vpysn", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yjp9yeqkcjzhucc2vwghq3nzwtv56f5y05xg2d", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yju626npdhx6lyfk80p0jmkk3rp0veldafnl9p", - "coins": [ - { - "denom": "uatom", - "amount": "598495090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yl6l479x8sxg4naf0uxlta6tutk3qt7glarpmk", - "coins": [ - { - "denom": "uatom", - "amount": "34630190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ylz6tqpgz0flpl6h5szmj6mmzyr598rqe3908y", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ymq7v8rqu2c4tmljrp6rtuyqtd9tgcza8r7ug0", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yng9j50r23j4nvmqdg6tyjmk4clnrq9d8yyqzw", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ypca4duq4atmfde35cpf9hzd8aa3nputvlrfxz", - "coins": [ - { - "denom": "uatom", - "amount": "337410000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yq579wvfak45g3mdvrj2a4pmsmmejwew33ggak", - "coins": [ - { - "denom": "uatom", - "amount": "4499000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yrt3mu0ryc3425tcvytfqvadvdq675wjma8td5", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ytef32w0uaz3z0vgkvp3rqslxtnlt9453rxr5l", - "coins": [ - { - "denom": "uatom", - "amount": "3604000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yuyzaal450k3mmdkwwqg5k3x3mva73g0pkrljs", - "coins": [ - { - "denom": "uatom", - "amount": "32568690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yvjx84cumayq9vpg76czm8ad33eq27t9xteerh", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yy7vsp09r4ejaymszul5whufu750m725kcw7sw", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yz77vz7k2jf8z8wyeu7fh4rxvs02x0ua3rm4f6", - "coins": [ - { - "denom": "uatom", - "amount": "572440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z0lzrc83s7uszl8camqs23xtd3z43wud9effa9", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z0ssgfj0khzf8fc6x2j28mysgalug8aeq6qnef", - "coins": [ - { - "denom": "uatom", - "amount": "7236000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z3qfattrhkxxra9mnxgpegh0q7l8jj86glk9e2", - "coins": [ - { - "denom": "uatom", - "amount": "107040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z4zz489uuz8jasrwhhtxpzv0e6g20ya6gemxx5", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z8mzakma7vnaajysmtkwt4wgjqr2m84tzvyfkz", - "coins": [ - { - "denom": "uatom", - "amount": "14194031940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z9vvzlmce95ph8zm7g3zmd28tsgypu9g5wzcam", - "coins": [ - { - "denom": "uatom", - "amount": "6454580000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zahpv7wpr8xezu2mgqw7nfqc6zvzrp6lnr3ygz", - "coins": [ - { - "denom": "uatom", - "amount": "18996000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zded29cyakc0t9s5thjkm8404g3vesf4au43aw", - "coins": [ - { - "denom": "uatom", - "amount": "2798831000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zeuwy2zd3ww66luhzpsvqjstj77383wtwkm7hr", - "coins": [ - { - "denom": "uatom", - "amount": "19027160000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zexgegsg80lpyhk0anscets32eskcvs59vtl8m", - "coins": [ - { - "denom": "uatom", - "amount": "3618000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zfkep87pvq8grgkf7dslu4j3adpk5s4czj4gt5", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zg7q48ujrc5yvdc7egxx5wjdacth6mlew4rhz8", - "coins": [ - { - "denom": "uatom", - "amount": "860990000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zg8e4th5yhdnyc4reg4ynlquryqh6y6ul7dqv7", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zh6xxv0smkd3uszdltlxvcgr2ar6ax0gnm7p6g", - "coins": [ - { - "denom": "uatom", - "amount": "3868640000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zjsxej47y34srzyldvgunq6jx2uqtt7ha2jc5d", - "coins": [ - { - "denom": "uatom", - "amount": "174506380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zksx3dj68w397hj02n64taxsqsp0jle64nmy4w", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1zkwwyvzqapxzvew7dyjza2mpj5t68zlur2wp3r", - "coins": [ - { - "denom": "uatom", - "amount": "18001000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zm7llltwd2cdap8f4gp7qtnrufp865sfmyg3hp", - "coins": [ - { - "denom": "uatom", - "amount": "22597000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zn6awjea0zd499vk8rkhhav0cjyy4jt349vpy6", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1znjfq796hxmaj85sjmp7tvy0e50v8g8ghh6zlz", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1znww7wjy3qq8hqf9fg49qln7lmdgdpmqulxmjk", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zp6kg7qlmztyw2km2af4z5ruz5vn04cpq84vjk", - "coins": [ - { - "denom": "uatom", - "amount": "1000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zqgheeawp7cmqk27dgyctd80rd8ryhqsltfszt", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zr7aswwzskhav7w57vwpaqsafuh5uj7nv8a964", - "coins": [ - { - "denom": "uatom", - "amount": "6784500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ztfk3dglwhskqyktms2ts4n8dgq62s46ug6s97", - "coins": [ - { - "denom": "uatom", - "amount": "10176000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ztrlkfdx7e20quxahyhftvcvul82c2sxknxhf5", - "coins": [ - { - "denom": "uatom", - "amount": "6971690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zu5twe54gddsz9drlv9s0jprhfl73dnrf0cqde", - "coins": [ - { - "denom": "uatom", - "amount": "5296250000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zvrhk7jxhdg4y2alpslswnfphg520wytz9e0at", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zxcxurm8gwp43n4efqms6484gkdnnq763w03t6", - "coins": [ - { - "denom": "uatom", - "amount": "34890800000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zxt0a26csdu4rzlegfz2mg4lfxru3l2ln568dk", - "coins": [ - { - "denom": "uatom", - "amount": "397920000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zyk2s4mguxej7chvf9aglrd29qmen0mxqt6gw8", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zyqm8gmermk5mfncpvkdapaa6az4yy7kyjwgau", - "coins": [ - { - "denom": "uatom", - "amount": "70106000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zyqxtvzqfadl8l7nksvtfs6letxkzhl7zf64kd", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zza99afg3y0vzcpqxcuqrxxnmhdk87yhhsfrs0", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zzumx3n287tkauya4dvm4lhzhhvtca6v57yz9v", - "coins": [ - { - "denom": "uatom", - "amount": "180919000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - } - ], - "auth": { - "collected_fees": null, - "params": { - "max_memo_characters": "512", - "tx_sig_limit": "7", - "tx_size_cost_per_byte": "10", - "sig_verify_cost_ed25519": "590", - "sig_verify_cost_secp256k1": "1000" - } - }, - "bank": { - "send_enabled": false - }, - "staking": { - "pool": { - "not_bonded_tokens": "236198958120000", - "bonded_tokens": "0" - }, - "params": { - "unbonding_time": "1814400000000000", - "max_validators": 100, - "max_entries": 7, - "bond_denom": "uatom" - }, - "last_total_power": "0", - "last_validator_powers": null, - "validators": null, - "delegations": null, - "unbonding_delegations": null, - "redelegations": null, - "exported": false - }, - "mint": { - "minter": { - "inflation": "0.070000000000000000", - "annual_provisions": "0.000000000000000000" - }, - "params": { - "mint_denom": "uatom", - "inflation_rate_change": "0.130000000000000000", - "inflation_max": "0.200000000000000000", - "inflation_min": "0.070000000000000000", - "goal_bonded": "0.670000000000000000", - "blocks_per_year": "6311520" - } - }, - "distr": { - "fee_pool": { - "community_pool": null - }, - "community_tax": "0.020000000000000000", - "base_proposer_reward": "0.010000000000000000", - "bonus_proposer_reward": "0.040000000000000000", - "withdraw_addr_enabled": false, - "delegator_withdraw_infos": null, - "previous_proposer": "", - "outstanding_rewards": null, - "validator_accumulated_commissions": null, - "validator_historical_rewards": null, - "validator_current_rewards": null, - "delegator_starting_infos": null, - "validator_slash_events": null - }, - "gov": { - "starting_proposal_id": "1", - "deposits": null, - "votes": null, - "proposals": null, - "deposit_params": { - "min_deposit": [ - { - "denom": "uatom", - "amount": "512000000" - } - ], - "max_deposit_period": "1209600000000000" - }, - "voting_params": { - "voting_period": "1209600000000000" - }, - "tally_params": { - "quorum": "0.400000000000000000", - "threshold": "0.500000000000000000", - "veto": "0.334000000000000000" - } - }, - "slashing": { - "params": { - "max_evidence_age": "1814400000000000", - "signed_blocks_window": "10000", - "min_signed_per_window": "0.050000000000000000", - "downtime_jail_duration": "600000000000", - "slash_fraction_double_sign": "0.050000000000000000", - "slash_fraction_downtime": "0.000100000000000000" - }, - "signing_infos": {}, - "missed_blocks": {} - }, - "gentxs": [ - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "ATEAM", - "identity": "0CB9A4E7643FF992", - "website": "nodeateam.com", - "details": "Node A-Team promises to provide validator node operation services at the highest quality." - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "5000", - "delegator_address": "cosmos14l0fp639yudfl46zauvv8rkzjgd4u0zk0fyvgr", - "validator_address": "cosmosvaloper14l0fp639yudfl46zauvv8rkzjgd4u0zk2aseys", - "pubkey": "cosmosvalconspub1zcjduepq7jsrkl9fgqk0wj3ahmfr8pgxj6vakj2wzn656s8pehh0zhv2w5as5gd80a", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A6WjB8Rb39iqfkPqTU+2oNa/EFzhzCqo4MPNFiMgNQHQ" - }, - "signature": "pQAaAGR1XjxWsm+jKuKkSDwmjcr2pKKSahxf4sJ48UIDODvQb66bH3+ANa/LibPg7aGjyD4jwNU3xDdWrmMYew==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Auberdine", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.170000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.200000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos1vzj0lluc43k64gagvy9wsygh33dk84h07a3rsu", - "validator_address": "cosmosvaloper1vzj0lluc43k64gagvy9wsygh33dk84h0mf9ku0", - "pubkey": "cosmosvalconspub1zcjduepqfqhyah5dlxlnpwr8s3dmt7td8w5sug0vpfmmnkh9wuyymcuhh5zqfxqgg0", - "value": { - "denom": "uatom", - "amount": "21000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ai017zYj1UVWQKSvcSBv861jUmKYOdeyTcUpnRbOwkwA" - }, - "signature": "D6GB0XEU3qm7mrn5Bbj7+wV964B109XZ/g/aeDaf2Vh4e/JJor8eePON48+hds9QJCIuk9XefF2i2oQHoqPUQw==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Bianjie", - "identity": "A6DFF8A48236A5C7", - "website": "https://www.bianjie.ai/cosmos", - "details": "Core developer of IRISnet, active contributor to Cosmos." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.020000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ssm0d433seakyak8kcf93yefhknjleed4psy4g", - "validator_address": "cosmosvaloper1ssm0d433seakyak8kcf93yefhknjleeds4y3em", - "pubkey": "cosmosvalconspub1zcjduepqrgyyjxpe0ujefxwnkpmqz9m0hj03y09tdz9lwc0s7mvy469hulfq69f8sd", - "value": { - "denom": "uatom", - "amount": "1000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AnJHwzfg3FEcviT+CFXhNpxiP5msBLZXJG2D3eK3dAdR" - }, - "signature": "vk32Ye5g0VlXclScjLJWAJyUvA5AGfAYUAT5XdIVm6ttrWT9G/ezK3wm+uuu8j5S6QbqXsjC8CBZG4X0i+ijvQ==" - } - ], - "memo": "3e54abe1133a7c61a0732098dcd4d4998d38d2be@cosmos-sentry.bianjie.ai:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Blockpower", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1rpgtz9pskr5geavkjz02caqmeep7cwwpf29g2p", - "validator_address": "cosmosvaloper1rpgtz9pskr5geavkjz02caqmeep7cwwpv73axj", - "pubkey": "cosmosvalconspub1zcjduepq04y0dtylyed2f8drc9t78dmptfuta7l6xyujwmsgrqefs0sxpgjsnzpsj6", - "value": { - "denom": "uatom", - "amount": "50000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AsmAoZJSg2Y6OPffgfB1zgMkLxjozbg2LXShEVnwf/kf" - }, - "signature": "judY7OkDn6wdRduwTmPZBmcA6HBVQ17FqA07Pn23K1Bx3N2E+LrhH1DAwYUj1DXbjlFdWnvpJgu8ztfz3YSgIg==" - } - ], - "memo": "d0f26063f5e44f361897e448f81ff0953d7ed2f2@cosmos-sentry.blockpower:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "BouBouNode", - "identity": "", - "website": "https://boubounode.com", - "details": "AI-based Validator. #1 AI Validator on Game of Stakes. Fairly priced. Don't trust (humans), verify. Made with BouBou love." - }, - "commission": { - "rate": "0.061000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1eh5mwu044gd5ntkkc2xgfg8247mgc56f8pycyz", - "validator_address": "cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fz4sdg3", - "pubkey": "cosmosvalconspub1zcjduepq8hu49qdl5594rzxmdsww3hleu8phxrajjfsseqjere9mjrrrv9tq35mll4", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AoAsj4KOrkiwIV2WZasfD+lekYHj7uIjYTanDjT6i9w/" - }, - "signature": "614bt6iFO0QigPFN5fsfUUWXVOSLAW4iYBjnimyct+48YhUTiVehxhXfUvWP4gbtpwKEa8LIR7/wUzO7b+pYQQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "ChainPool", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1cf9yqlamxgeza4nsn7y08vpkcs7qqjp4lzw9ac", - "validator_address": "cosmosvaloper1cf9yqlamxgeza4nsn7y08vpkcs7qqjp46k6s3t", - "pubkey": "cosmosvalconspub1zcjduepqh743r5du0f53zazrztdu3zj2twp38y7em55lmaeuxdlmna78argqw2s95s", - "value": { - "denom": "uatom", - "amount": "100000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Awyy4qzKg2GKO9KU611j0dusfruU0S/5mEnG6hpcfsPN" - }, - "signature": "C04Q2qlhl1xIIaHRixhEpT+k42CL1xuxkWgMy9b0Bg9LuE9o1E/lQw64a1yprVKql7YHUkrs8uQcF/7WUOM1Bg==" - } - ], - "memo": "e4a6bd1744a029b87bf530e983da30ea58ac50f5@38.143.1.26:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Coinone Node", - "identity": "", - "website": "https://node.coinone.co.kr", - "details": "The more, the easier. Coinone Node manages your assets securely." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1pz6yu5vdxfzw85cn6d7rp52me4lu8khx7lpkzd", - "validator_address": "cosmosvaloper1pz6yu5vdxfzw85cn6d7rp52me4lu8khxmt4rw7", - "pubkey": "cosmosvalconspub1zcjduepq562qtt42wsqmmmhpj5vmgp3dprpeclzc5u57hdvkpq762nthr3vqh8yaf7", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AwTiHwim/dD3CZzUodiZ70trDOLbrKlNuCs8st5jItBK" - }, - "signature": "mOUNQJaxBJupeg2Vn7xAW01QdHFqIIryL/i7pFwBdC44DAaxB1fa9BB0ex8rePVuVmlN67hS2Onz6zx4PpPCXA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Compass", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ff0dw8kawsnxkrgj7p65kvw7jxxakyf8kqnyy4", - "validator_address": "cosmosvaloper1ff0dw8kawsnxkrgj7p65kvw7jxxakyf8n583gx", - "pubkey": "cosmosvalconspub1zcjduepqu08f7tuce8k88tgewhwer69kfvk5az3cn5lz3v8phl8gvu9nxu8qhrjxfj", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A8kyShNhoxSGVQq/8l4HDqtM8bCaIJFGZq/2aLT1u8Q3" - }, - "signature": "itEhxkOBaZ2/U464Soa90Sw61e/ANyyADAUM4TTvTXM9FDc7XCh96i1cDU7WxSvk2D3qCd+bQnA3aU2v2m49Rw==" - } - ], - "memo": "629ced1ee45898a7684bb4e1732f8685d37f490d@172.31.20.234:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Cosmostation", - "identity": "AE4C403A6E7AA1AC", - "website": "https://www.cosmostation.io", - "details": "CØSMOSTATION Validator. Delegate your atoms and Start Earning Staking Rewards" - }, - "commission": { - "rate": "0.120000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos1clpqr4nrk4khgkxj78fcwwh6dl3uw4ep4tgu9q", - "validator_address": "cosmosvaloper1clpqr4nrk4khgkxj78fcwwh6dl3uw4epsluffn", - "pubkey": "cosmosvalconspub1zcjduepq0dc9apn3pz2x2qyujcnl2heqq4aceput2uaucuvhrjts75q0rv5smjjn7v", - "value": { - "denom": "uatom", - "amount": "30000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "An0yrOygz23oiJQZg63gJSbg4nkrWmHBC02/6Am2oDrS" - }, - "signature": "6l0B/lTVJxiKoNmo3F4qH5bRPmA9uh2dL43b9w5beUdODGYEXNSe2DG+rSfjg1JBrBvhFKYTt7Rl/5PpdlgKgg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Cryptium Labs", - "identity": "5A309B5CA189D8B3", - "website": "https://cryptium.ch", - "details": "Secure and available validation from the Swiss Alps" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1kj0h4kn4z5xvedu2nd9c4a9a559wvpuvemr0vq", - "validator_address": "cosmosvaloper1kj0h4kn4z5xvedu2nd9c4a9a559wvpuvu0h6qn", - "pubkey": "cosmosvalconspub1zcjduepqvc5xdrpvduse3fc084s56n4a6dhzudyzjmywjx25fkgw2fhsj70searwgy", - "value": { - "denom": "uatom", - "amount": "100000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeyMultisigThreshold", - "value": { - "threshold": "2", - "pubkeys": [ - { - "type": "tendermint/PubKeySecp256k1", - "value": "AlHMIiMT4+ubmUFOJswrv9fwUJ33cWolv2e5ddzm51P9" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "ApYO482K2n1xA754WsviWNSRZ9IyA9zodACZKCSedq10" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "AiRJtkfOtRkVHpB/4edZmTi/AKTNq+jPQjFWb0X3Hn22" - } - ] - } - }, - "signature": "CgUIAxIBYBJA79FZoB4WSa1b7jxsyoSp0iYuWcRGQuJYGp3x2jJQI78v6mvypi1Wa9VMllH5xdnNPHD/5sfhmKx0V+f4Eh1swhJAP+nHIWbVq2DxIV7XBJD/QU5HbOp8suIK9YpqHPRSx2glRHMwWOvV4lG0Z7H6ZS31YSON+Tta/sZVXFHc0sqS6g==" - } - ], - "memo": "89e4b72625c0a13d6f62e3cd9d40bfc444cbfa77@34.65.7.199:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Cypher Core", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1pjmngrwcsatsuyy8m3qrunaun67sr9x78qhlvr", - "validator_address": "cosmosvaloper1pjmngrwcsatsuyy8m3qrunaun67sr9x7z5r2qs", - "pubkey": "cosmosvalconspub1zcjduepqcdav5ylt2zst90qmuh8e5w07xmxv9y6wufp5k9ngzmx7v9qewqtqkcq4z8", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AlX825sr2FmvR8R/sizJMm2zuY74AxBrL+tbgrGPG+JN" - }, - "signature": "me9a7TbytgR4O8qH3gdDkU/RNJHIIxM0/IYHdQH/9tQ1a5zkxJZHVciaQqWU6JqKMjy832TruxhNBReUAZAl1A==" - } - ], - "memo": "58aa4b7ebb241b3a87e3a0a965b8ac076566de62@45.76.225.89:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "DokiaCapital-ION", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.150000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos14lultfckehtszvzw4ehu0apvsr77afvyhgqhwh", - "validator_address": "cosmosvaloper14lultfckehtszvzw4ehu0apvsr77afvyju5zzy", - "pubkey": "cosmosvalconspub1zcjduepqp0j4vum7ryt6nl6zsgq9ar347afmq2c5z6jmzeavv2p2ns6m0dgs5zmg4z", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "ArSpHTTpHAZ17Co4dsgfY0fuF5RAA5OZtxnmZLA2Z6vI" - }, - "signature": "ujZakKBUNg3w3OmaUSD4usC3evYt3LK4ZgBlrgOEIqU+/65UF56nuxzkLCv6tPO+dK+atrJLUX5OlH/LbbLdUw==" - } - ], - "memo": "51da73aaf1280016998efada239b2fd59ccc4116@--node-id:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "DragonStake", - "identity": "EA61A46F31742B22", - "website": "https://dragonstake.io", - "details": "BlockChain Technologies" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos15r4tc0m6hc7z8drq3dzlrtcs6rq2q9l2kc6z4s", - "validator_address": "cosmosvaloper15r4tc0m6hc7z8drq3dzlrtcs6rq2q9l2nvwher", - "pubkey": "cosmosvalconspub1zcjduepqjcp9ez3dzmvsdfcw2h5kllmqvjgqnhtlvhad4q9wzcqf34gf6ewq6zl5mm", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A28+XBwoLf8Q40ivs5UGkBidWs+wkg3VBs1gzriPtmuX" - }, - "signature": "O0azW4WNvLnHLaFSl/hoec2B2X9HEEWzNUm+GWQxDgsb81jrZQuAQKu/rIK0vp3/DRX78X6X1RoQxsGucTZkhg==" - } - ], - "memo": "7c4bc7818858487674e6b532d0ba1640ae675ea3@1.2.3.4:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "F4RM", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos14az9dmutwtz4vuycvae8csm4wwwtm0au7lt5d2", - "validator_address": "cosmosvaloper14az9dmutwtz4vuycvae8csm4wwwtm0aumtlppe", - "pubkey": "cosmosvalconspub1zcjduepq59t2nm3ph5k6uc804w0n7ey69ul8ntee2dy47d7u53q248ud822sunv93j", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "ApA4WPGwNrJs7QX96kS20y1TbPIuX2ZyMbKHFN24UOOR" - }, - "signature": "GkrExkLIrtZiOn1zHC2p181vyx7HgzqAqSKRpc0O6Epo3x41J8FsSyKPWVFJdptuZcVr4oa2jWwEvxekJfpHWw==" - } - ], - "memo": "F4RM@0.0.0.0:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Firmamint", - "identity": "", - "website": "https://www.firmamint.io/", - "details": "The FUTURE is at STAKE - Proudly Canadian - Holder of the Game of Stakes NEVER JAILED Title - By delegating, you confirm that you are aware of the risk of slashing and that Firmamint is not liable for any potential damages to your investment." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.030000000000000000" - }, - "min_self_delegation": "1500000000", - "delegator_address": "cosmos19kwwdw0j64xhrmgkz49l0lmu5uyujjayrfzmuq", - "validator_address": "cosmosvaloper19kwwdw0j64xhrmgkz49l0lmu5uyujjayxakwsn", - "pubkey": "cosmosvalconspub1zcjduepq668g4epaumjtx35rk3ucz2nlm7l7zuewkt0kzutg9hha859zjxmsvl2v67", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A95wHrbxhpQ91P2+0HV4uN2E9dKO+a87iNSceBuu1w+Z" - }, - "signature": "/hxfCtPF9s2WcN1nDaSSlNT/4bOSrWekR6380pUnsasUcBhTf/dXhdxxICP5AWGC24ehbaCYJHOqsG1b2s2pSQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "HyperBlocksPro", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ul2me6vukg2vac2p6ltxmqlaa7jywdgtz5203m", - "validator_address": "cosmosvaloper1ul2me6vukg2vac2p6ltxmqlaa7jywdgt8q76ag", - "pubkey": "cosmosvalconspub1zcjduepq0cet8ez89wj4yz8uencych7aldc5wyyrpx6jvh6n6kxxslumln5sxkq922", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A870fEa2W+PInGJCjSTyhjosx0gL2TyQqqtKx2FtUrr+" - }, - "signature": "9oCPJFo4WyUzrZUU6+Tp5XiJ64//mrdCjr1DBdBQBbE5X3u/OalCUEgH2oOSHFvOZ9Pfa2rKKKkYLy8HIXePnw==" - } - ], - "memo": "override@override:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "KalpaTech", - "identity": "6A0D65E29A4CBC8E", - "website": "kalpatech.co", - "details": "KalpaTech offers integrated blockchain solutions for proof of stake networks" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ehkfl7palwrh6w2hhr2yfrgrq8jetguceek792", - "validator_address": "cosmosvaloper1ehkfl7palwrh6w2hhr2yfrgrq8jetgucudztfe", - "pubkey": "cosmosvalconspub1zcjduepqvmmhug9hcmm26ce7we0n3esavn4c6tfcfd6zgnuj732ls7khjq4srpg0ft", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AowlwmoBjAAw2DUilvPuu5GuPePi1w0l9zsR1JfMr8tb" - }, - "signature": "ZeWGlnpTJdIPBhiNJQB3t2vKAg8l/siYxD3OG8G+evcJIz5ygJJjEhcu7hjOOeRS8lNo2sVcX2xt2ye/27JQSA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Mythos", - "identity": "2E9FDF34351A5112", - "website": "https://mythos.services", - "details": "Staking and validator services for crypto networks" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1w42lm7zv55jrh5ggpecg0v643qeatfkdqf5ua6", - "validator_address": "cosmosvaloper1w42lm7zv55jrh5ggpecg0v643qeatfkd9aqf3f", - "pubkey": "cosmosvalconspub1zcjduepqz679nxu2dkfd6y9hytqwvf2z4yuevraqykkm2464ag4e6z278h3qdq92xu", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AlCWhRIIBlQOV2OuT4Fxx9qbbnafyrSpD2ra8F6s5tOa" - }, - "signature": "lQ9o0uU0KGbWw+hMPIOUI/rIwmZYKpeT0+VhGfYU6s4EvGEBOFcV4usVKpOugS6Xk8OnvvGAUW6rYmPjexe13w==" - } - ], - "memo": "4eb6ef5af7bf1e6c27825f72b1f22ea16213ba50@192.168.0.178:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "P2P.ORG - P2P Validator", - "identity": "E12F4695036D8072", - "website": "https://p2p.org", - "details": "One of the winners of Cosmos Game of Stakes. We provide a simple, secure and intelligent staking service to help you generate rewards on your blockchain assets across 9+ networks within a single interface. Let’s stake together - p2p.org." - }, - "commission": { - "rate": "0.080000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos132juzk0gdmwuxvx4phug7m3ymyatxlh9m9paea", - "validator_address": "cosmosvaloper132juzk0gdmwuxvx4phug7m3ymyatxlh9734g4w", - "pubkey": "cosmosvalconspub1zcjduepq9xu9z6ky3nz3k544ar4zhupjehkxdlpmt2l90kekxkrvuu7hxfgslcdqwy", - "value": { - "denom": "uatom", - "amount": "4900000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ahq7wODVSvcGba3EsI9KgH9e9uE9/M15J0klT5uUsous" - }, - "signature": "phh3TZySvLK5vTHVdlVM3xglJvIaLs7rymdL9JmN79B4LMAYYRV3ccyAm8TpM/B32svtfaFTbn6Dfvu1QILcOg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "SNZHolding", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1s6x9fy4wc49wj9jx4jv6czredqsmp46hmc8rxn", - "validator_address": "cosmosvaloper1s6x9fy4wc49wj9jx4jv6czredqsmp46h7vnk2q", - "pubkey": "cosmosvalconspub1zcjduepqfkkyuexns2l7rw2mx2ms988heah0rjv42e9q88scc3ms5hzg45psycrvr4", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ap5WX8/zhs4cyHtUSruBuYi77o3zv/aKqHQfnEbi/6Nd" - }, - "signature": "+Qcgb5PXFsxsdAU2A/jmGKco7B31mDpbo1mi7+pIY/VGly0HslwkGhx8vb+UjxEMr2AE3FVyMRjuUNpyOI0YTQ==" - } - ], - "memo": "f7e106f5db9f10bde1f89d177bf0fe12d593f993@10.0.32.24:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Simply-VC-Validator", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1vjqault583hwktfj63k2hh7r02sj2a66v0chv3", - "validator_address": "cosmosvaloper1vjqault583hwktfj63k2hh7r02sj2a66fmvzqz", - "pubkey": "cosmosvalconspub1zcjduepqduk3drqxx5g8s2vtvlpz97pq06u67ewn5wt7r2wgvtnewfymy9gs0lrzrl", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ah2SOnyRtwfHRT/Y1CERA7MiLIdkx37DEOwEu3IOQbCU" - }, - "signature": "JSOY7O6BijCI/MfokfkShlWnMaNLFlpzNdHMl1T1tpFq0fKcJiQOy/bzX9nJOFfPma3+fZAl4PEcCOd5FKsiAQ==" - } - ], - "memo": "MemoryLost@Was.Here:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Skystar Capital", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1uhnsxv6m83jj3328mhrql7yax3nge5svxcw7kt", - "validator_address": "cosmosvaloper1uhnsxv6m83jj3328mhrql7yax3nge5svrv6t6c", - "pubkey": "cosmosvalconspub1zcjduepql42t7mstnewp5rgweteuw95hawzystll7mq8dl24n5yh0th7q2jqetcy07", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Amz9q7DWeRFuItDxfaAyEcW8mLfF5zmhqsv3qZ/x1mjN" - }, - "signature": "bAcqw/EYSCD+KufZavFQntExIW8kKUzaJ5KA/wljCs1xJAM0yIedSFjNklb4FV6+wNRpoGXjvf6hUhnyZTLXBw==" - } - ], - "memo": "527df2fb5f01052d174285da1eb0f0234d590890@138.68.45.219:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Staked", - "identity": "7B3A2EFE5B3FCDF8", - "website": "https://staked.us/", - "details": "Staked is the most trusted validator in crypto, delivering highly available and highly secure staking nodes." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.020000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1we6knm8qartmmh2r0qfpsz6pq0s7emv3um0vsa", - "validator_address": "cosmosvaloper1we6knm8qartmmh2r0qfpsz6pq0s7emv3e0meuw", - "pubkey": "cosmosvalconspub1zcjduepq6adydsk7nw3d63qtn30t5rexhfg56pq44sw4l9ld0tcj6jvnx30s5xw9ar", - "value": { - "denom": "uatom", - "amount": "4500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A4ox0f6xVNCbdP6xlzk2zkvoyTryEmaQp+vc+nWfUd2o" - }, - "signature": "3xACydJ2/vq/aNQ4HH2oU2wVDn4zoPqJUvpzPXrSoj5T461QggzXi4aKKpqBupOcpYcCMvqjm63K5glucn0E/g==" - } - ], - "memo": "71f9ed4d7a7adc737914c901396a7ba3aef22c37@100.97.62.209:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Wetez", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1s05va5d09xlq3et8mapsesqh6r5lqy7mnr69mg", - "validator_address": "cosmosvaloper1s05va5d09xlq3et8mapsesqh6r5lqy7mkhwshm", - "pubkey": "cosmosvalconspub1zcjduepqgx5xdrx0xktl5r8e3w7vj329fgh3fnep8ahgx8027nd5nkjxzuqs5us5en", - "value": { - "denom": "uatom", - "amount": "10000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AkQg0kfkxZ+L30N/e3zNIT17Ay47sQxckf6Dxq/TqoR2" - }, - "signature": "dTY1Tc4OVZ39aYT1ax2icV35557HOasqV52NorV/MgdlzDFRWCfRYQwOeuPgL302HblzESzX4YyVUEpGYRBp7Q==" - } - ], - "memo": "3d08a88019e609c207eaa636ac4e03543d086cb8@172.20.73.240:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Atom Sandler", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.250000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1cql9ska0xl2rkg6gcv0np4333gn6fygs3qf90r", - "validator_address": "cosmosvaloper1cql9ska0xl2rkg6gcv0np4333gn6fygs55asrs", - "pubkey": "cosmosvalconspub1zcjduepq902trqaqmnaay5wh44jdj8ljp2qeugg8r6wn5afmxzwpry205d0qd472ha", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Auq/pdNq4/JnJSPjHLlHCHlnegLIwhUuXiENLvstNPNp" - }, - "signature": "u9BoewGMm0StTmH93UyZl4F9HuH/m2QGeXAIRwSi9uQ4B40c4irw84zftfP5CQ1uPCady+FL6ZwSIu7TEh9DAw==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Bison Trails", - "identity": "A296556FF603197C", - "website": "https://bisontrails.co", - "details": "Bison Trails is the easiest way to run infrastructure on multiple blockchains." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1uxh465053nq3at4dn0jywgwq3s9sme3lc9ek2f", - "validator_address": "cosmosvaloper1uxh465053nq3at4dn0jywgwq3s9sme3la3drx6", - "pubkey": "cosmosvalconspub1zcjduepqc5y2du793cjut0cn6v7thp3xlvphggk6rt2dhw9ekjla5wtkm7nstmv5vy", - "value": { - "denom": "uatom", - "amount": "13000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ai+y59+qJLiZeh+8GdOJO2GJkLvtS4sD9UDOBEELUETM" - }, - "signature": "UwNBWnjLPegS+cITJybwFXvaSb/0bPLvn4D6Bvb4z+0RLgV+wWv1RrXJKIlWqfxlP13u3j3kQ1tNm7+xMA5A6Q==" - } - ], - "memo": "54a82740a61e39f384e5fb1cc01de79502d05ba2@10.0.1.202:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "bity.com", - "identity": "", - "website": "https://bity.com", - "details": "We offer professional, secure, and reliable crypto staking services for investors looking to stake their coins with trusted third parties, such as the Cosmos Network." - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1uv26ytrnmydyctq0s58ve2k6wn2p653m9yn69g", - "validator_address": "cosmosvaloper1uv26ytrnmydyctq0s58ve2k6wn2p653mqs80fm", - "pubkey": "cosmosvalconspub1zcjduepqmpm39a9aqllqr8dm9w3ww0sp0v32vvphqmgxt20fpw7949ayhhqshx7n9c", - "value": { - "denom": "uatom", - "amount": "20000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A/MVFYmNRfeBJraFOJMmdVvdZRLNpfkSgwZy8j90DzoM" - }, - "signature": "4WmtMo09/FO+SP5+ThIbr8xWI0LLc0d2+4cAhgIn6HtFGlKktIzvga3uf3W/Oq1xac7D8Wau64bnruiMz4Wa8Q==" - } - ], - "memo": "659787510cdb818ad1a3a2eed3ce68a6827354e2@cosmos.bity.com:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "blockmatrix", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos1n5pu2rtz4e2skaeatcmlexza7kheedzhzf70tu", - "validator_address": "cosmosvaloper1n5pu2rtz4e2skaeatcmlexza7kheedzh8a2680", - "pubkey": "cosmosvalconspub1zcjduepqnd9kzfhhvuv5k2cq62yu0e5v73ymsgxa0wlen9c7999ucwg7hg6qdm34pm", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AzKw26WQQPFK/cvMjrFIcTG1CPpj225RzIcDXwOXUzlj" - }, - "signature": "iQDu63RYmDLNK8UONr/jNf+LMGyVgNgqODlcVQJVaOoay91IHYBpST5rQ9dNKaUPgLufCehM8YEOUh1OY8xPEQ==" - } - ], - "memo": "e275ba168d9379eacb186e11b2ffa8a0dd02a63e@1.2.3.4:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "cephalopod equipment coop", - "identity": "", - "website": "", - "details": "Cephalopod Equipment Coop" - }, - "commission": { - "rate": "0.250000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1000000", - "delegator_address": "cosmos1fghgwhgtxtcshj4a9alp7u2qv6n2wffqj4jdl9", - "validator_address": "cosmosvaloper1fghgwhgtxtcshj4a9alp7u2qv6n2wffqhpxcnk", - "pubkey": "cosmosvalconspub1zcjduepqwzmcs4kpsetyk7fn7czvdljgawa93r6mnzvcwt9a366rep2gcs0q4jpxu5", - "value": { - "denom": "uatom", - "amount": "42000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A8NUKnGCZXhpay1nTggs9kB60tui7lWeifpQkuRjWSeo" - }, - "signature": "PxVmWkumWSfc2Ard4gpL3d/IN/ZG/oD+Ee4voBOl++BRp6o1nWv9gyJunrROCc6LeyWpTwMYNSUd6BrgqtWk4A==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Certus One", - "identity": "ABD51DF68C0D1ECF", - "website": "https://certus.one", - "details": "Stake and earn rewards with the most secure and stable validator. Winner of the Game of Stakes. Operated by Certus One Inc. By delegating, you confirm that you are aware of the risk of slashing and that Certus One Inc is not liable for any potential damages to your investment." - }, - "commission": { - "rate": "0.125000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1qwl879nx9t6kef4supyazayf7vjhennyjqwjgr", - "validator_address": "cosmosvaloper1qwl879nx9t6kef4supyazayf7vjhennyh568ys", - "pubkey": "cosmosvalconspub1zcjduepqwrjpn0slu86e32zfu5xxg8l42uk40guuw6er44vw2yl6s7wc38est6l0ux", - "value": { - "denom": "uatom", - "amount": "55000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A0hW8ESfYxhZt8Jxix/qgLOIl3TjnOrpTDSEGzo0qRm0" - }, - "signature": "FxQ3VLXQeaRbeSQoumEvr52mcZC6ej1WAGH1papeukN5EkUGpY5NicoHMFNIRV4BGRKgSNoiFIwvVCfTHIWXhQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "chainflow-cosmos-prodval-01", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1j0vaeh27t4rll7zhmarwcuq8xtrmvqhughud6h", - "validator_address": "cosmosvaloper1j0vaeh27t4rll7zhmarwcuq8xtrmvqhudrgcky", - "pubkey": "cosmosvalconspub1zcjduepqvn4a4skwj88c8e0jvns3qjrhyy0whvnuwmth3k8kexvqk5vupw4qsdje47", - "value": { - "denom": "uatom", - "amount": "500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A7s/Wt/O0q/TXK1wm/AC/iYkHAUlTnT2csEcB6hTOoVE" - }, - "signature": "y+kaSKQwdN0VMPLUhZUpoVv4W16SoHLmlBDre6cwG59IAkvuQyW8CxILF9/TpaFb0TObVBxDZT1WnLScgcIMdQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Chorus One", - "identity": "00B79D689B7DC1CE", - "website": "https://chorus.one/", - "details": "Secure Cosmos and shape its future by delegating to Chorus One, a highly secure and stable validator. By delegating, you agree to the terms of service at: https://chorus.one/cosmos/tos" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.020000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos15urq2dtp9qce4fyc85m6upwm9xul3049um7trd", - "validator_address": "cosmosvaloper15urq2dtp9qce4fyc85m6upwm9xul3049e02707", - "pubkey": "cosmosvalconspub1zcjduepqjc07nu2ya8tyzl8m385rnc382pkulwt2gh8yary73f3a96jak7pqsf63xf", - "value": { - "denom": "uatom", - "amount": "4500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AoUAnGnBsT7xGv2PTnIQbfK4t4oNyimGk2AhPwfgxq3T" - }, - "signature": "Zoxl7XkkI8Frefnck9lKsqsnqUHefYZerjK7a9gG/wlCNG8v5E9iFnqoepDLykjo3MVB6YQup2Ub+vS2ZeFM9w==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Colmena", - "identity": "", - "website": "https://www.coworkingcolmena.com/", - "details": "May the force be with you" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos16gdxm24ht2mxtpz9cma6tr6a6d47x63hlq4pxt", - "validator_address": "cosmosvaloper16gdxm24ht2mxtpz9cma6tr6a6d47x63h65p52c", - "pubkey": "cosmosvalconspub1zcjduepq9s5y3sk6g6x35pk2ljzs446xgfmamzuptrlrgs9mquc982j0ujuqq0vzhf", - "value": { - "denom": "uatom", - "amount": "1000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AzaSKwy1GgbQmJlWIbFBR8l4Q9YSvWDwyakmccdgoqOs" - }, - "signature": "LGBPGXGU3rhkQBdoHHeMMOOrVfu32gqrpVjNMmJhft8jY5mCinzdR6IgKFUwu2qe6LdKE1kDRaWPJirONkZCHA==" - } - ], - "memo": "34b6a464293de57570540bf8cb37a0458a94d138@0.0.0.0:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "cosmospool.org", - "identity": "", - "website": "http://cosmospool.org", - "details": "Cosmospool.org Delegation Services" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.400000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "100000000", - "delegator_address": "cosmos1ps7dmygt4wm72t8l9kdjetelhggsv8w7m0ezaz", - "validator_address": "cosmosvaloper1ps7dmygt4wm72t8l9kdjetelhggsv8w77mdh33", - "pubkey": "cosmosvalconspub1zcjduepqupgzsdq2w7m77h4xyrtywzx8mlqnj97ucdv7kaae78w5p7xadqfs3e34w8", - "value": { - "denom": "uatom", - "amount": "20000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A7noP7sKUSsy4PJeNJf/yApZQa/V1rcuBYk5IalYItyc" - }, - "signature": "jedggMAw6ArULMZiLKe6efia7DqPXTVWa9yz9RNoH29vDVCs8238roGA4HYonV27kf8zdp9momNToaY7fvgS2Q==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "darkqueen", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1f63lrmnn4upu722kxdhw04taxa6w50lnchnjp4", - "validator_address": "cosmosvaloper1f63lrmnn4upu722kxdhw04taxa6w50lnar88dx", - "pubkey": "cosmosvalconspub1zcjduepqqypxy7l8tav52nengx8esff2h3v78taqpj3qpcugy0rk3ee79sxs5la5u6", - "value": { - "denom": "uatom", - "amount": "100000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ay1sFLp6lSJwXRYLWsh2TBoWDZ/ocs8ctamkIqDbNeto" - }, - "signature": "EsT6nUo9HpcCBz+6EZ15lNzccaH3s/VkBPgoFBffy2M5FzWtS/2U9t1NzUIhTmo9I1vLBYWFp83LtwMRf6nslQ==" - } - ], - "memo": "5cc113055ac56e03e80a71b37127146beaf62419@45.79.106.28:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Delega", - "identity": "1BED7C08416A619F", - "website": "https://delega.io", - "details": "Your trusted validator for PoS" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1mrkn3uug9dm32hyp9tcxs5dmmuspt7nezrdmhz", - "validator_address": "cosmosvaloper1mrkn3uug9dm32hyp9tcxs5dmmuspt7ne8hewm3", - "pubkey": "cosmosvalconspub1zcjduepqxr0r707t6djym8vwrq39j7u4t3cjsx6ka0a08aew9fqh8hv50fyqck470f", - "value": { - "denom": "uatom", - "amount": "1000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A+turACQcuu0YWxdJxSt1FG2NlAoNevwUaMe4UxfenLB" - }, - "signature": "rV0m9uDoMkF5Jz71JwPLSDPHei7GJhYzu79CGOYb8QkgwFwnaMw5AYyhSCWyhcfWb/+2FslKhb2grSPE832/Mg==" - } - ], - "memo": "d490b109cf63e880fce61928331c2ea3eb73fe8a@192.168.2.238:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "figment", - "identity": "E5F274B870BDA01D", - "website": "https://figment.network", - "details": "Based in Canada. The #1 Legal and Compliant Cosmos Validator." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1hjct6q7npsspsg3dgvzk3sdf89spmlpfg8wwf7", - "validator_address": "cosmosvaloper1hjct6q7npsspsg3dgvzk3sdf89spmlpfdn6m9d", - "pubkey": "cosmosvalconspub1zcjduepqnltddase4lqjcfhup8ymg0qex3srakg54ppv06pstvwdjxkm6tmq08znvs", - "value": { - "denom": "uatom", - "amount": "4800000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A/ME5Wre92HJOJH4wBFveSeq3Yj8wZJrn/pEWc3pcrSc" - }, - "signature": "KkpNbaYCHI2B4RoUhuo0+RglExyN/xSH+b7WFhn8fIgbtVyrpk1bpPuMJqehMkjUiBrqw5/RSPoNUrn2nPgX3w==" - } - ], - "memo": "6659591b5e73d5a5cbc5e6e892d7a478564e10f9@54.39.178.218:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "firstblock.io", - "identity": "23D9B8528FC93D58", - "website": "https://firstblock.io", - "details": "You Delegate. We Validate." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1s65zmn32zugl57ysj47s7vmfcek0rtd7jd2mp2", - "validator_address": "cosmosvaloper1s65zmn32zugl57ysj47s7vmfcek0rtd7he7wde", - "pubkey": "cosmosvalconspub1zcjduepqrc6g9m2eyy4zs7kyeph8vk5ldpgnceveelc39zf7lc32j8k3shqssevdlg", - "value": { - "denom": "uatom", - "amount": "3000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AlLytZYcIwiP/kUu5EeR9seek332Mc1857kHeiwPYFNL" - }, - "signature": "ngZIoTD7oaCbH+7jH+/SqdNq2vOxV8ssU8KDyc2Sf0V9g5PIOh0cYgoPckYhLcEZZlgy1k1VM5GIyQlEBrHbDA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Forbole", - "identity": "4A5D9C100A76D9A8", - "website": "https://www.forbole.com/cosmos-hub-validator/", - "details": "Forbole is a Genesis Validator on Cosmos Hub. We are a named winner in Game of Stakes and HackAtom3 by Cosmos. We are a very helpful contributor in both the English and Chinese community." - }, - "commission": { - "rate": "0.125000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos14kn0kk33szpwus9nh8n87fjel8djx0y0mmswhp", - "validator_address": "cosmosvaloper14kn0kk33szpwus9nh8n87fjel8djx0y070ymmj", - "pubkey": "cosmosvalconspub1zcjduepqmfxl36td7rcdzszzrk6c7kzp5l3jlw4lnxz8zms3py7qcsa9xlns7zxfd6", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AhF73wdGhoSfbDgqjxIeefFGBYtBU2PBIDG/6OhPt60+" - }, - "signature": "wzt26vJnEhSe92C8Of6MuSETfrk4cm0ya+iKEucUGUVQ4HEYvzzC3gM6cvPjGPWUuYfU8XhHpGKByUzzVy6Dzg==" - } - ], - "memo": "e20dca7582870356c7a843115374c7a97dc06ae8@10.6.0.46:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "clawmvp | 01no.de", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos17mggn4znyeyg25wd7498qxl7r2jhgue8ep585n", - "validator_address": "cosmosvaloper17mggn4znyeyg25wd7498qxl7r2jhgue8u4qjcq", - "pubkey": "cosmosvalconspub1zcjduepqlzmd0spn9m0m3eq9zp93d4w6e5tugamv44yqjzyacelnvra634fqnfec0r", - "value": { - "denom": "uatom", - "amount": "20000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A9isBJO7xtwuV0PlTRTcJJN9Vk+cYDtjD35IUExoWVGW" - }, - "signature": "DqgDxTiOvltlH1Oy2PFfvocGXHnxH8a5gDne50RjD7J+l0iglJQ5UdE2vI+F0ybQ+JXHahMJaKJebwB62tHB9g==" - } - ], - "memo": "01no.de@0.0.0.0:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Castlenode", - "identity": "", - "website": "https://www.castlenode.com/cosmos", - "details": "Castlenode is a validator operator focused on security and run by experienced professionals. Please read our Terms and Conditions on our website before delegating" - }, - "commission": { - "rate": "0.090000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.050000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1qs8tnw2t8l6amtzvdemnnsq9dzk0ag0z37gh3h", - "validator_address": "cosmosvaloper1qs8tnw2t8l6amtzvdemnnsq9dzk0ag0z52uzay", - "pubkey": "cosmosvalconspub1zcjduepqsszd2gzte82dzt0xpa3w0ky8lxhjs6zpd5ft8akmkscwujpftymsnt83qc", - "value": { - "denom": "uatom", - "amount": "14750000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A6YjD9RkuLPQ1tCzRVQoWEG1FmyNgPoVTAN1HrCkHoI9" - }, - "signature": "cA9XsVaNPNhbgTsfi6LQhaXCnxpgshINIu8N0YVNAlANKwlQKT57OihEWojs3/ycMQruSuEZi/404PSpEuaxDw==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "hashquark_cosmos", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1cgh5ksjwy2sd407lyre4l3uj2fdrqhpk84m04f", - "validator_address": "cosmosvaloper1cgh5ksjwy2sd407lyre4l3uj2fdrqhpkzp06e6", - "pubkey": "cosmosvalconspub1zcjduepq3f6wnsk6k6qu6g8n5vly4z7ajw7q930wh3qx6zkxhktnh49l40kszf5lry", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ai0Bs9o/qWp5uKB7R2w1XsvBhKpCOLOO7ZNObt3PZh2L" - }, - "signature": "9AEpXvgQnyI3G4P3YQ62+hF8lL/xe2LPM+F1j+t9mhctPsIBFU1/pfkUdwoH9NJ/d1zY44OBmjLvNFeP0N4Knw==" - } - ], - "memo": "fc8abc401ade02fdc41a41d1accc5ffdd634f9fb@10.10.10.60:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "in3s.com", - "identity": "", - "website": "https://in3s.com", - "details": "cosmosvaloper1rcp29q3hpd246n6qak7jluqep4v006cdsc2kkl" - }, - "commission": { - "rate": "1.000000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1rcp29q3hpd246n6qak7jluqep4v006cd4v7r6v", - "validator_address": "cosmosvaloper1rcp29q3hpd246n6qak7jluqep4v006cdsc2kkl", - "pubkey": "cosmosvalconspub1zcjduepq7mft6gfls57a0a42d7uhx656cckhfvtrlmw744jv4q0mvlv0dypskehfk8", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AmbZ4oUx+GWVQDUo2z+NB0YzOpj9g4Px/n8H3EbId7aC" - }, - "signature": "CISlc+hUODhDWFiY30aYhYwouOa7SZbtSzRueJRIjvZmRXJ5Gf4OQoUj5b8pU7soPJFQCXBBLdBrVQzkkKbadQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "liangping", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.200000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1jxv0u20scum4trha72c7ltfgfqef6nscj25050", - "validator_address": "cosmosvaloper1jxv0u20scum4trha72c7ltfgfqef6nsch7q6cu", - "pubkey": "cosmosvalconspub1zcjduepqnru7aa6ayyuwddd5qsa6tvutzs7xl9jk6pfx4ka5dr4y9d3q6eesgz9rz7", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A+MHfxshRkw5H0UDZ0IxglCOQkVF1jhZWJpgdh3ajH6r" - }, - "signature": "62IXmtbUCEG7Rq/UxWNALrnlR2kxmyy3YbkFNI/Qb0c3EuAx0a9osXkZI3Qry/5oARbq1YmksIKdgHTjezzlaA==" - } - ], - "memo": "cdfae2ab251678159b0d32be815afc64e3702574@172.24.230.219:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "cosmos-Inspiron-7570", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.070000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.200000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ma02nlc7lchu7caufyrrqt4r6v2mpsj92s3mw7", - "validator_address": "cosmosvaloper1ma02nlc7lchu7caufyrrqt4r6v2mpsj90y9wzd", - "pubkey": "cosmosvalconspub1zcjduepqxtu8am2qmf0qnglqtvkar9gaclhccfn29tsp7n82vasrtnc8m2fsulp4h2", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A74AjNDhszhX7e38QZAk5nSCqpsfBtjiUBhZakx+Xbg7" - }, - "signature": "TO4eXKAifpxjndtE25q9xp+nd7/ui7EWiLz3y4Coj6R2he59bTKqxu2nG51q0EhIMTh4Tmy7ZPkMWBXJ+tbPiQ==" - } - ], - "memo": "2f3aef5af1d925a609c66912d452cbce52d09099@172.19.3.215:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "iqlusion", - "identity": "7843656AA22520BC", - "website": "iqlusion.io", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "100000000000", - "delegator_address": "cosmos1grgelyng2v6v3t8z87wu3sxgt9m5s03xvslewd", - "validator_address": "cosmosvaloper1grgelyng2v6v3t8z87wu3sxgt9m5s03xfytvz7", - "pubkey": "cosmosvalconspub1zcjduepqdgvppnyr5c9pulsrmzr9e9rp7qpgm9jwp5yu8g3aumekgjugxacq8a9p2c", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeyMultisigThreshold", - "value": { - "threshold": "2", - "pubkeys": [ - { - "type": "tendermint/PubKeySecp256k1", - "value": "ArTJsvxtWUcdZX8fyNTR922d/O09KTy0RcWtsU2T9ysY" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "Am45Rm3Hp7G7Y6/Vnk0keHtcxBxfj158jLWuxo+QCA+C" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "A0OjtIUCFJM3AobJ9HJTWKP9RZV2+WPcwVjLgsAidrZ/" - } - ] - } - }, - "signature": "CgUIAxIBoBJA0vtPzD/AYC7skr82W0VfJl3Jn4SXIUqDzL0SijWSoC8lFHFK0HR3XwhR5Q132c3fV+h9KHPIj/7AHoochEsc/xJAErPuh81ahn/+ZQ8CAh6auyaYIhDkajWXJmBs+v39kEUIxjx8iZI8vgc9KzBfwHchMSKMaDxm9sV1rbh75qBmDg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "kochacolaj", - "identity": "1E9CE94FD0BA5CFEB901F90BC658D64D85B134D2", - "website": "", - "details": "Top 5 Game Of Stakes winner with a low commission! https://blog.cosmos.network/game-of-stakes-closing-ceremonies-eddb71d3b114#147d" - }, - "commission": { - "rate": "0.090000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1emaa7mwgpnpmc7yptm728ytp9quamsvuz92x5u", - "validator_address": "cosmosvaloper1emaa7mwgpnpmc7yptm728ytp9quamsvu837nc0", - "pubkey": "cosmosvalconspub1zcjduepqfuxvufupnsm7v5anpwd7z8ec70z2k209j7xclnm25zz7vauhyc5qjgxx3h", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A9IQHKHGskTTRO16DO7H9c325dg5HqcHoj2XTpxLGsIL" - }, - "signature": "kSGKCs8FujbEEA99OKF71rEy/hnN6U2UYj2N0uoflIN8K0/5JzNh8ziNw+rIBTtoo9zckIAlMByxeeGba7pWFg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "kytzu", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1000000", - "delegator_address": "cosmos1wtv0kp6ydt03edd8kyr5arr4f3yc52vp5g7na0", - "validator_address": "cosmosvaloper1wtv0kp6ydt03edd8kyr5arr4f3yc52vp3u2x3u", - "pubkey": "cosmosvalconspub1zcjduepq0zyaquh6c8vmjfzft43uqylf2ejjpjcvup2zrtsk40uyz8xsq29s0k4eaw", - "value": { - "denom": "uatom", - "amount": "1490000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A2Jl4SgkOkb8cD3D0GQjaDndOCbTftt9ziWQ0oQFwV7O" - }, - "signature": "aeE+ZC9nl0AYfCRn+jrVKC2lBFSUDERVLZK26DJVlHARCZwGkj8CoxMY+hs7CA9kcm05LDIWqy13hQ705Ze2rw==" - } - ], - "memo": "b236fa97193239ce5e4032be0caf55957ac17a3c@167.86.70.194:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "lunamint", - "identity": "4F26823468DD7518", - "website": "https://lunamint.com", - "details": "Always adding value to Cosmos. Check out Lunagram, the Cosmos wallet built into Telegram." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ec3p6a75mqwkv33zt543n6cnxqwun37rxqj2vl", - "validator_address": "cosmosvaloper1ec3p6a75mqwkv33zt543n6cnxqwun37rr5xlqv", - "pubkey": "cosmosvalconspub1zcjduepqd85nu5nelvcyyzcsrr0yaglh8rfvn6cv9pp3p0hgmwtk8hf3cazqc7vz5c", - "value": { - "denom": "uatom", - "amount": "6500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A5jDkVzd9IL+B6ZPeFIWW8VkZuTGQ8lOKtduG0Z37GkB" - }, - "signature": "etBUdqf+/JeKvgPIii8jen+aIefOpYTUr/8fAL98P41u8cQpAAkUg7HHaMwfDZUN1hwlQ0mpdpa6VzrnKpsrUg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "CosmosTrust-meleaTrust", - "identity": "4BE49EABAA41B8BF", - "website": "https://meleatrust.com/", - "details": "Validator service secure and trusted, we speak English, Spanish, Portuguese, Catalan." - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1zqgheeawp7cmqk27dgyctd80rd8ryhqsltfszt", - "validator_address": "cosmosvaloper1zqgheeawp7cmqk27dgyctd80rd8ryhqs6la9wc", - "pubkey": "cosmosvalconspub1zcjduepq5tm478lhn4du7l46yp6fgu9e8fcfks0j4kf87pk4z8vc3clckxzqvh2q72", - "value": { - "denom": "uatom", - "amount": "511111111" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AyPH2QpEl1JRsQtRDDfgNcQEtXzZx0QdWd/zdROcI1eM" - }, - "signature": "RRLvPZPnHLSn/aM62S6OYAR9D/IXVqia2PsAZgyBq5Ne2KytrEMHXF8rR5Wilfyi0VghiO+4bhs+/DrowP93Mw==" - } - ], - "memo": "287b57b07756a06a6583ee0f7a55184e661eacb6@51.38.113.59:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "nylira", - "identity": "6A0D65E29A4CBC8E", - "website": "https://nylira.net", - "details": "Nylira is a Cosmos validator service run by Peng Zhong @zcpeng" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1000000", - "delegator_address": "cosmos1dany3yuj5qzcyl33qjcxwc6m478a3wftv347sh", - "validator_address": "cosmosvaloper1dany3yuj5qzcyl33qjcxwc6m478a3wftf9ptuy", - "pubkey": "cosmosvalconspub1zcjduepqg93r2qwfj0vkzl8mvr0vqtnz2ukpm4785kmaw692g7s964w4mv3s95lufg", - "value": { - "denom": "uatom", - "amount": "20000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AgdcjdT2Pxb2stqtGP0pq8R/KFEhP0Moco561uulsyLj" - }, - "signature": "GWsQu+QKq4v+7UQpVJSPdRnKOhJCupsc416c7LOkZqUwz1TibxCcpDqV5KFxJCiBl/Lc4hATu/PVry/7JLfLmg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "piggy-coin.com", - "identity": "9979ae5a5da54bf04719b8c8ebdc0d24", - "website": "https://www.piggy-coin.com/", - "details": "Delegate here to support piggy-coin's hard-spoon to tendermint / cosmos" - }, - "commission": { - "rate": "0.250000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.005000000000000000" - }, - "min_self_delegation": "100000000", - "delegator_address": "cosmos1zp6kg7qlmztyw2km2af4z5ruz5vn04cpq84vjk", - "validator_address": "cosmosvaloper1zp6kg7qlmztyw2km2af4z5ruz5vn04cp9npe79", - "pubkey": "cosmosvalconspub1zcjduepq5supzpux2jafyv06qw2dnd0fzshd2enmea9zeak9emu2ft5rs8nswzlqxf", - "value": { - "denom": "uatom", - "amount": "1000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A92fKIknHSbNXRS3MpM+IUTuCJ01AG6SwabK1nMvZVoj" - }, - "signature": "iW0RF/rSEe0fXtiGn0cZrv0VHdOprJnObmd0Ziyp3u8U93oKgJF4umj/GwNJn93oHBcCnxkDlOLoJXHkD/SbDg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Polychain Labs", - "identity": "", - "website": "https://cosmos.polychainlabs.com", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos16m93gjfqvnjajzrfyszml8qm92a0w67ntjhd3d", - "validator_address": "cosmosvaloper16m93gjfqvnjajzrfyszml8qm92a0w67nwxrca7", - "pubkey": "cosmosvalconspub1zcjduepqfgl6yafrrlx0saks9w2nafptm3lvmvzwdwhmvsqmx4l6cnqfn7ss9tdah3", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A8mJRMqtUZDBLPHWEZXaPeMW7ieIyCn/7CjQaB/gojGT" - }, - "signature": "I8K3bM4gER/ONfqOdNvdvWyLALoxh7xh9sgpAF92dH1PQyFeivtGAxbDo3lqWuLerZ5q6vWEEXoA3YaGNX1wfA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Sentinel", - "identity": "D54C8032CF19C407", - "website": "sentinel.co", - "details": "We are Team-Sentinel https://github.com/sentinel-official/sentinel" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1000000", - "delegator_address": "cosmos1u6ddcsjueax884l3tfrs66497c7g86skk24gr0", - "validator_address": "cosmosvaloper1u6ddcsjueax884l3tfrs66497c7g86skn7pa0u", - "pubkey": "cosmosvalconspub1zcjduepq87zcnf8sm4ewacjafqujfevt8rhwj5qk9uwtx4ef89ctuqmndkeq446ahw", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A9OBEL9yE1gG2+gbzUxKa3T1GIPInHGkzi34CXdDXq+0" - }, - "signature": "rmc8rAi/u2kLkGaXvYvIvm9hb7zPOHyKJF0ogXg8R6Ra0AagGKTn6m2IJhPi1VzBkrjPTLlUQjJgay/N5Rdr9g==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Sikka", - "identity": "https://keybase.io/team/sikka", - "website": "sikka.tech", - "details": "Sunny Aggarwal (@sunnya97) and Dev Ojha (@ValarDragon)" - }, - "commission": { - "rate": "0.000000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ey69r37gfxvxg62sh4r0ktpuc46pzjrmz29g45", - "validator_address": "cosmosvaloper1ey69r37gfxvxg62sh4r0ktpuc46pzjrm873ae8", - "pubkey": "cosmosvalconspub1zcjduepqg6y8magedjwr9p6s2c28zp28jdjtecxhn97ew6tnuzqklg63zgfspp9y3n", - "value": { - "denom": "uatom", - "amount": "20190313" - } - } - } - ], - "fee": { - "amount": null, - "gas": "566626" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeyMultisigThreshold", - "value": { - "threshold": "2", - "pubkeys": [ - { - "type": "tendermint/PubKeySecp256k1", - "value": "AldOvgv8dU9ZZzuhGydQD5FYreLhfhoBgrDKi8ZSTbCQ" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "AxUMR/GKoycWplR+2otzaQZ9zhHRQWJFt3h1bPg1ltha" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "AlI9yVj2Aejow6bYl2nTRylfU+9LjQLEl3keq0sERx9+" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "A0UvHPcvCCaIoFY9Ygh0Pxq9SZTAWtduOyinit/8uo+Q" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "As7R9fDUnwsUVLDr1cxspp+cY9UfXfUf7i9/w+N0EzKA" - } - ] - } - }, - "signature": "CgUIBRIBSBJAYzfuW4yNj3lH4MWAzKrScBY9gEQxra+nfui3irKad04nDR5wyDIfCZEdPnnh555hVA1oLYIuEz7YAUF3ns8pExJAZlNUh6V+yz42UoGkJQY0L7veKXRWvltxOK0xxt2KdwZYqr6UA1E1ttJhGdyzlh0PyNXuYV2xGZ3UVbz5Qrx2/w==" - } - ], - "memo": "Brexit vote must be put on hold, MPs warn May" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "SparkPool", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.040000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.050000000000000000" - }, - "min_self_delegation": "100000000000", - "delegator_address": "cosmos1rwh0cxa72d3yle3r4l8gd7vyphrmjy2kydpnje", - "validator_address": "cosmosvaloper1rwh0cxa72d3yle3r4l8gd7vyphrmjy2kpe4x72", - "pubkey": "cosmosvalconspub1zcjduepq5kg8xls9l35ftulkm2rt70hexeeyr5cqqkcv4h7936z5uasvvazqla8eck", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AiAgJzJcreOXL0Ghqq3TCv4KV1y3dqULgMac4sxMLEbs" - }, - "signature": "ep2jqnCzJvSGFW6vkQbA4tQVojHSly2jduIvqHeesqZwTTSLaGMrxhbvMSne0hzt9pimv3Y1GqhUWBOR55p79Q==" - } - ], - "memo": "cba84e07b094cc836bf182d0b82a4c28e4d9546f@192.168.65.3:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "stake.zone", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.080000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.030000000000000000" - }, - "min_self_delegation": "50000000000", - "delegator_address": "cosmos1rfpar0qx3umnhu0f6wjp4hvnr3x6u538qdmsep", - "validator_address": "cosmosvaloper1rfpar0qx3umnhu0f6wjp4hvnr3x6u5389e094j", - "pubkey": "cosmosvalconspub1zcjduepqe4egjtvcewavewd4rvukeks60jeaxpujevl6kkgcwj0phpxgg3sse83m68", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AtKB3oTNvxcWGQp9h1INAe1G6m2ozq+Ev/stQS0wV/aB" - }, - "signature": "dTAR4ntqNAgxYkB/uEgO1bhit5QeXvOKTIrc/lqQL/5ZH606Apg4K2PNbeYMxnU55KSnxl7er3lg8faK6kU5Eg==" - } - ], - "memo": "123456789@192.168.100.100:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Stake Capital", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.080000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.030000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1k9a0cs97vul8w2vwknlfmpez6prv8klv29tea7", - "validator_address": "cosmosvaloper1k9a0cs97vul8w2vwknlfmpez6prv8klv03lv3d", - "pubkey": "cosmosvalconspub1zcjduepqfgpyq4xk4s96ksmkfrr7juea9kmdxkl5ht94xgpxe240743u9cvsht489p", - "value": { - "denom": "uatom", - "amount": "2500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A5GqfkKy7ureduVOAcgBW5hf/yKJ6cVxEM7bOe8Fe9m0" - }, - "signature": "Qerv6mMtvwcESO8+nciMcU7GpkrgALeJ5BGKH6XPnEguscuF5Rb6lWGPue8q/ohemWJ4vPc4twqMz4wsEhShMg==" - } - ], - "memo": "a4396a9d621dad287124da4f8861bd8d5fd99a69@10.0.1.134:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "stake.fish", - "identity": "", - "website": "stake.fish", - "details": "Winner of the Game of Stakes. Brought to you by stake.fish and bitfish." - }, - "commission": { - "rate": "0.040000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1sjllsnramtg3ewxqwwrwjxfgc4n4ef9u0tvx7u", - "validator_address": "cosmosvaloper1sjllsnramtg3ewxqwwrwjxfgc4n4ef9u2lcnj0", - "pubkey": "cosmosvalconspub1zcjduepq6fpkt3qn9xd7u44478ypkhrvtx45uhfj3uhdny420hzgsssrvh3qnzwdpe", - "value": { - "denom": "uatom", - "amount": "19000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A2/+IgTx8HlG4xa68Nkw6dXOWobR+PFOKDhMTrYS5q0r" - }, - "signature": "gOrq4fFvvAB9fCh561hK8lzKPklftQoowQ7u52gkk1Zk13i0bYa3V/aFCZWXIaxlBs74Z2jlxXHGg64TYorrYw==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "StakeWith.Us", - "identity": "", - "website": "https://stakewith.us", - "details": "Secured Staking Made Easy. Put Your Crypto to Work - Hassle Free. Disclaimer: Delegators should understand that delegation comes with slashing risk. By delegating to StakeWithUs Pte Ltd, you acknowledge that StakeWithUs Pte Ltd is not liable for any losses on your investment." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1urtpxwfuu8k57aqt0h5zhsvmjt4m2mmdxmxfwm", - "validator_address": "cosmosvaloper1urtpxwfuu8k57aqt0h5zhsvmjt4m2mmdr0juzg", - "pubkey": "cosmosvalconspub1zcjduepqqf375ynp09sdnfdld0h0y5guphjr0pey06tjnfatrk2ck96vzvcq0r0kxj", - "value": { - "denom": "uatom", - "amount": "12680000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A9QrxM2cU3P1k021CIDIsieZxK83etp7wQQB7IxF7pCL" - }, - "signature": "vxaaUIsfe0nJxYgjAA6kPq9uOJvrX3oxMfOojpnBpp9RuxqN6eJfmsfV3ZOlaF4kZwQZVWeEiHAiH+YtZhM8tA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Staking Facilities", - "identity": "6B0DF6793DE1FB1F", - "website": "stakingfacilities.com", - "details": "Earn rewards with one of the most experienced and secure validators. More than 150k USD in customer rewards paid out. We exclude liability for any financial damage resulting from delegating." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "100000000000", - "delegator_address": "cosmos1x88j7vp2xnw3zec8ur3g4waxycyz7m0mcreeaj", - "validator_address": "cosmosvaloper1x88j7vp2xnw3zec8ur3g4waxycyz7m0mahdv3p", - "pubkey": "cosmosvalconspub1zcjduepqhm6gjjkwecqyfrgey96s5up7drnspnl4t3rdr79grklkg9ff6zaqnfl2dg", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Aubaj/1yDFn0RecGGbjuWBun0rXWKO99oT5mfaAMwtKi" - }, - "signature": "m7QOXS7YQgJQOUgE3LXggI0Inz1/H6fjiUXuRDd6xDUgaLRdaBERJFX/491Z/9UPodukO8GAieQqNjLVupk3hA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Staking Fund ✔ - Winner of the GoS", - "identity": "805F39B20E881861", - "website": "https://www.staking.fund", - "details": "Staking Fund has been participating in the validating role since early 2018, and we are a proud winner of the Game of Stakes." - }, - "commission": { - "rate": "0.010000000000000000", - "max_rate": "0.334000000000000000", - "max_change_rate": "0.012019031323000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1000ya26q2cmh399q4c5aaacd9lmmdqp92z6l7q", - "validator_address": "cosmosvaloper1000ya26q2cmh399q4c5aaacd9lmmdqp90kw2jn", - "pubkey": "cosmosvalconspub1zcjduepqe93asg05nlnj30ej2pe3r8rkeryyuflhtfw3clqjphxn4j3u27msrr63nk", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A0sSh9hdJ/AmahR47jRwcMRtvUE5Q582oHRduBDzLwDd" - }, - "signature": "J5rzM9Vo/uegl2GTLb6/deJOrlCBTLhf/EDS1wPu2/Q/yvodFJxQXlfUo7RIp05+6u19AWVNBJhh2w/HKkGBWg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "syncnode", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos19j2hd230c3hw6ds843yu8akc0xgvdvyu83c6xl", - "validator_address": "cosmosvaloper19j2hd230c3hw6ds843yu8akc0xgvdvyuz9v02v", - "pubkey": "cosmosvalconspub1zcjduepq9ge7uqrfp9qkdapzd29tjtwrqpt2mm9meptx395ygxgm40tdc8ysrzj40a", - "value": { - "denom": "uatom", - "amount": "1495000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ahnp+4CCJLf8bdFqYv+6FN3dYAEx5fKwaVwOcKKumGzn" - }, - "signature": "7BhOphVBSpsrzz96uGT+LtW24f1nQxIJ6Z4UyaPZAp0X+/8S8mbdKylTnzxcW3THkuwgur2nGkqEWXjDpFbJLw==" - } - ], - "memo": "fbc52e72126c560697a7d9bddc969746c451859c@116.202.25.145:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Tezos Capital", - "identity": "", - "website": "https://tezos.capital", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1s7jnk7t6yqzensdgpvkvkag022udk8429exc87", - "validator_address": "cosmosvaloper1s7jnk7t6yqzensdgpvkvkag022udk842qdjdtd", - "pubkey": "cosmosvalconspub1zcjduepqnnh28nlj55sc329ppnhcr0xx7kuc9vnsp3dpwc28wdhhxtjc7jfs9k57f7", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ag+I0OzjX2AHatgaW1kJjNRs+Ck/2UQe8t0eDr5Av3/6" - }, - "signature": "pFmZrSFtfH/LrHnLAyWvs9o/YJJDb9TA5RbnKxmLua1rNlOv3x+zHgelJeFCsy8n4qedMqZ9QZbxJ7snUZacQA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Umbrella", - "identity": "A530AC4D75991FE2", - "website": "https://umbrellavalidator.com", - "details": "Validating service from the USA ☔" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1lktjhnzkpkz3ehrg8psvmwhafg56kfss5597tg", - "validator_address": "cosmosvaloper1lktjhnzkpkz3ehrg8psvmwhafg56kfss3q3t8m", - "pubkey": "cosmosvalconspub1zcjduepqelcwpat987h9yq0ck6g9fsc8t0mththk547gwvk0w4wnkpl0stnspr3hdc", - "value": { - "denom": "uatom", - "amount": "666" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AqunADN83SgkEatv9N7TKhxzYgXxYC39Gt+xEBKu1/2g" - }, - "signature": "IYdZ3q6fZ39EOgn8SJMc8YNRJA0yoJ0f+vD/iIcZCfs5MzbZNzckuxMhXGfQ1MOBHdMEA55Ia1+GABWEI8iAYA==" - } - ], - "memo": "🚀" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Validator Network", - "identity": "357F80896B3311B4", - "website": "https://validator.network", - "details": "Highly resilient and secure validator operating out of Northern Europe. See website for terms of service." - }, - "commission": { - "rate": "0.125000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "100000000", - "delegator_address": "cosmos1sxx9mszve0gaedz5ld7qdkjkfv8z992arw3rr5", - "validator_address": "cosmosvaloper1sxx9mszve0gaedz5ld7qdkjkfv8z992ax69k08", - "pubkey": "cosmosvalconspub1zcjduepqjnnwe2jsywv0kfc97pz04zkm7tc9k2437cde2my3y5js9t7cw9mstfg3sa", - "value": { - "denom": "uatom", - "amount": "14000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A874FW2YoONx6zbQemNXwaJSqtQ6Wb9BRg0HRLWvtp2o" - }, - "signature": "DVtmJ7kqp3rdMktRn/0yHTr6zsCJBH5R4/qNHVELm1hOCwKP3nRp2Udb8EEhorqMt0Q83T7zP14nwttFagox/w==" - } - ], - "memo": "4e2e13e5552000e0a80eac8a4f291a0a3e4012f8@52.57.20.18:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Ztake.org", - "identity": "", - "website": "https://ztake.org/", - "details": "We are a team of tech-savvy blockchain developers and enthusiasts who run nodes on PoS and PoA blockchains. We took care all of the technical setup needed, so that you could easily stake your assets." - }, - "commission": { - "rate": "0.081000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos102ruvpv2srmunfffxavttxnhezln6fnc3pf7tt", - "validator_address": "cosmosvaloper102ruvpv2srmunfffxavttxnhezln6fnc54at8c", - "pubkey": "cosmosvalconspub1zcjduepq9weu2v0za8fdcvx0w3ps972k5v7sm6h5as9qaznc437vwpfxu37q0f3lyg", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "ApAH7o7BzCs5sI0aACr5yojkRm4A84GG8IO9zMBaxyf1" - }, - "signature": "k6UTw4nGFkx/Bq8OosgCL05iu6mfusciANxHRHJQkpxmeujy/ehMXFvrh7ELdycKhLHR+P+7RoKdLNIUSvqs0Q==" - } - ], - "memo": "" - } - } - ] - } - } - } -} diff --git a/rpc/tests/support/health.json b/rpc/tests/support/health.json deleted file mode 100644 index 865629214..000000000 --- a/rpc/tests/support/health.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": {} -} diff --git a/rpc/tests/support/net_info.json b/rpc/tests/support/net_info.json deleted file mode 100644 index e8b7f368c..000000000 --- a/rpc/tests/support/net_info.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "listening": true, - "listeners": [ - "Listener(@)" - ], - "n_peers": "2", - "peers": [ - { - "node_info": { - "protocol_version": { - "p2p": "7", - "block": "10", - "app": "0" - }, - "id": "9d55f7d40ba4925cca86e3880bc287f30451230e", - "listen_addr": "tcp://11.22.33.44:26656", - "network": "cosmoshub-2", - "version": "0.30.1", - "channels": "4020212223303800", - "moniker": "shredder", - "other": { - "tx_index": "on", - "rpc_address": "tcp://0.0.0.0:26657" - } - }, - "is_outbound": true, - "connection_status": { - "Duration": "3350648332604", - "SendMonitor": { - "Active": true, - "Start": "2019-04-19T12:57:18.04Z", - "Duration": "3350640000000", - "Idle": "3350640000000", - "Bytes": "19", - "Samples": "1", - "InstRate": "0", - "CurRate": "0", - "AvgRate": "0", - "PeakRate": "0", - "BytesRem": "0", - "TimeRem": "0", - "Progress": 0 - }, - "RecvMonitor": { - "Active": true, - "Start": "2019-04-19T12:57:18.04Z", - "Duration": "3350640000000", - "Idle": "3350640000000", - "Bytes": "0", - "Samples": "1", - "InstRate": "0", - "CurRate": "0", - "AvgRate": "0", - "PeakRate": "0", - "BytesRem": "0", - "TimeRem": "0", - "Progress": 0 - }, - "Channels": [ - { - "ID": 48, - "SendQueueCapacity": "1", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 64, - "SendQueueCapacity": "1000", - "SendQueueSize": "0", - "Priority": "10", - "RecentlySent": "19" - }, - { - "ID": 32, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 33, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "10", - "RecentlySent": "0" - }, - { - "ID": 34, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 35, - "SendQueueCapacity": "2", - "SendQueueSize": "0", - "Priority": "1", - "RecentlySent": "0" - }, - { - "ID": 56, - "SendQueueCapacity": "1", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 0, - "SendQueueCapacity": "10", - "SendQueueSize": "0", - "Priority": "1", - "RecentlySent": "0" - } - ] - }, - "remote_ip": "11.22.33.44" - }, - { - "node_info": { - "protocol_version": { - "p2p": "7", - "block": "10", - "app": "0" - }, - "id": "a5ceaad3a1907665b2514db4e741939f0a5ab7dd", - "listen_addr": "tcp://0.0.0.0:26656", - "network": "cosmoshub-2", - "version": "0.30.1", - "channels": "4020212223303800", - "moniker": "kraang", - "other": { - "tx_index": "on", - "rpc_address": "tcp://0.0.0.0:26657" - } - }, - "is_outbound": true, - "connection_status": { - "Duration": "20412582851", - "SendMonitor": { - "Active": true, - "Start": "2019-04-19T13:52:48.28Z", - "Duration": "20400000000", - "Idle": "3100000000", - "Bytes": "209809", - "Samples": "56", - "InstRate": "0", - "CurRate": "1505", - "AvgRate": "10285", - "PeakRate": "210610", - "BytesRem": "0", - "TimeRem": "0", - "Progress": 0 - }, - "RecvMonitor": { - "Active": true, - "Start": "2019-04-19T13:52:48.28Z", - "Duration": "20400000000", - "Idle": "2920000000", - "Bytes": "222732", - "Samples": "53", - "InstRate": "0", - "CurRate": "1823", - "AvgRate": "10918", - "PeakRate": "106300", - "BytesRem": "0", - "TimeRem": "0", - "Progress": 0 - }, - "Channels": [ - { - "ID": 48, - "SendQueueCapacity": "1", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 64, - "SendQueueCapacity": "1000", - "SendQueueSize": "0", - "Priority": "10", - "RecentlySent": "0" - }, - { - "ID": 32, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "4804" - }, - { - "ID": 33, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "10", - "RecentlySent": "17208" - }, - { - "ID": 34, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "43624" - }, - { - "ID": 35, - "SendQueueCapacity": "2", - "SendQueueSize": "0", - "Priority": "1", - "RecentlySent": "36" - }, - { - "ID": 56, - "SendQueueCapacity": "1", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 0, - "SendQueueCapacity": "10", - "SendQueueSize": "0", - "Priority": "1", - "RecentlySent": "0" - } - ] - }, - "remote_ip": "77.66.55.44" - } - ] - } -} - diff --git a/rpc/tests/support/status.json b/rpc/tests/support/status.json deleted file mode 100644 index 5fda29176..000000000 --- a/rpc/tests/support/status.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "node_info": { - "protocol_version": { - "p2p": "7", - "block": "10", - "app": "0" - }, - "id": "6b90d376f9bfdd83c6d9351bf7b2f458b74deacc", - "listen_addr": "tcp://0.0.0.0:26656", - "network": "cosmoshub-2", - "version": "0.30.1", - "channels": "4020212223303800", - "moniker": "technodrome", - "other": { - "tx_index": "on", - "rpc_address": "tcp://0.0.0.0:26657" - } - }, - "sync_info": { - "latest_block_hash": "D4B11143B0C9CB1330BAED825C9FEF13979C91E137DF93C3974A17C9BED663ED", - "latest_app_hash": "38FE3F06E3EB936C2EE14DA6BEA15F97FEF8814824F022EE06635D7B2C39A0BA", - "latest_block_height": "410744", - "latest_block_time": "2019-04-15T13:16:17.316509229Z", - "catching_up": false - }, - "validator_info": { - "address": "C73833E9BD86D34EDAD4AFD571FB5D0926294CD5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "RblzMO4is5L1hZz6wo4kPbptzOyue6LTk4+lPhD1FRk=" - }, - "voting_power": "0" - } - } -} diff --git a/rpc/tests/support/tx_no_prove.json b/rpc/tests/support/tx_no_prove.json deleted file mode 100644 index de000f369..000000000 --- a/rpc/tests/support/tx_no_prove.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "hash": "291B44C883803751917D547238EAC419E968C0171A3154D777B2EA8EA5039C57", - "height": "2", - "index": 0, - "tx_result": { - "code": 0, - "data": "CgYKBHNlbmQ=", - "log": "[{\"events\":[{\"type\":\"message\",\"attributes\":[{\"key\":\"action\",\"value\":\"send\"},{\"key\":\"sender\",\"value\":\"cosmos1s2tw45c7stsafk42vsz9sj09jm09y6tk4qeerh\"},{\"key\":\"module\",\"value\":\"bank\"}]},{\"type\":\"transfer\",\"attributes\":[{\"key\":\"recipient\",\"value\":\"cosmos1nv3uf7hpuvk4em39vxr944hphujtuqa2xl7688\"},{\"key\":\"sender\",\"value\":\"cosmos1s2tw45c7stsafk42vsz9sj09jm09y6tk4qeerh\"},{\"key\":\"amount\",\"value\":\"1samoleans\"}]}]}]", - "info": "", - "gas_wanted": "100000", - "gas_used": "75848", - "events": [ - { - "type": "transfer", - "attributes": [ - { - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMTd4cGZ2YWttMmFtZzk2MnlsczZmODR6M2tlbGw4YzVsc2VycXRh", - "index": true - }, - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - }, - { - "key": "YW1vdW50", - "value": "MXNhbW9sZWFucw==", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "c2VuZA==", - "index": true - } - ] - }, - { - "type": "transfer", - "attributes": [ - { - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4", - "index": true - }, - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - }, - { - "key": "YW1vdW50", - "value": "MXNhbW9sZWFucw==", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "bW9kdWxl", - "value": "YmFuaw==", - "index": true - } - ] - } - ], - "codespace": "" - }, - "tx": "Cp8BCo4BChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEm4KLWNvc21vczFzMnR3NDVjN3N0c2FmazQydnN6OXNqMDlqbTA5eTZ0azRxZWVyaBItY29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4Gg4KCXNhbW9sZWFucxIBMRIJdGVzdCBtZW1vGKlGEmYKTgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQNi056vvgeqQgAUg8xRONa/j2XDlX7qcjc67RonX3JvpBIECgIIARIUCg4KCXNhbW9sZWFucxIBMRCgjQYaQLnVzSrnFPAOZ7wpXnQ3tR651N2DkYQgU9//VQrc03ysHZg3W8dVpbpEVxYO69ArPl2B5O3eTZL1a3utE0marvk=" - } -} diff --git a/rpc/tests/support/tx_search_no_prove.json b/rpc/tests/support/tx_search_no_prove.json deleted file mode 100644 index 272b57a2a..000000000 --- a/rpc/tests/support/tx_search_no_prove.json +++ /dev/null @@ -1,345 +0,0 @@ -{ - "id": "60c1e528-8854-41ee-99ac-8144282f7e9f", - "jsonrpc": "2.0", - "result": { - "total_count": "8", - "txs": [ - { - "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "height": "11", - "index": 0, - "tx": "YXN5bmMta2V5PXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "YXN5bmMta2V5" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "height": "11", - "index": 1, - "tx": "c3luYy1rZXk9dmFsdWU=", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "c3luYy1rZXk=" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "11", - "index": 2, - "tx": "Y29tbWl0LWtleT12YWx1ZQ==", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "height": "18", - "index": 0, - "tx": "dHgwPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgw" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "height": "19", - "index": 0, - "tx": "dHgxPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgx" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "height": "19", - "index": 1, - "tx": "dHgyPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgy" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "height": "20", - "index": 0, - "tx": "dHgzPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgz" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "height": "21", - "index": 0, - "tx": "dHg0PXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHg0" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - } - ] - } -} \ No newline at end of file diff --git a/rpc/tests/support/tx_search_with_prove.json b/rpc/tests/support/tx_search_with_prove.json deleted file mode 100644 index 0a2424b49..000000000 --- a/rpc/tests/support/tx_search_with_prove.json +++ /dev/null @@ -1,437 +0,0 @@ -{ - "id": "942ec9f5-1121-48f3-b3ea-d391a01429f7", - "jsonrpc": "2.0", - "result": { - "total_count": "8", - "txs": [ - { - "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "height": "11", - "index": 0, - "proof": { - "data": "YXN5bmMta2V5PXZhbHVl", - "proof": { - "aunts": [ - "oL+OYRo6LtD+lKo0W5A2kcPlbt4Of3c/VN57Ag54iEk=", - "wq4Wy/oF+/0xsH+eJq1SqY2BgYS2FVXbLAXNcCLkB74=" - ], - "index": "0", - "leaf_hash": "MIH5kVBA0TizrX+JVzLSdnwp6Ful2EOI0E4XpdgmK3o=", - "total": "3" - }, - "root_hash": "F54643B0051065C87DA31A654531B65F9B57380F9BF3332FF5BCA7584567268C" - }, - "tx": "YXN5bmMta2V5PXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "YXN5bmMta2V5" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "height": "11", - "index": 1, - "proof": { - "data": "c3luYy1rZXk9dmFsdWU=", - "proof": { - "aunts": [ - "MIH5kVBA0TizrX+JVzLSdnwp6Ful2EOI0E4XpdgmK3o=", - "wq4Wy/oF+/0xsH+eJq1SqY2BgYS2FVXbLAXNcCLkB74=" - ], - "index": "1", - "leaf_hash": "oL+OYRo6LtD+lKo0W5A2kcPlbt4Of3c/VN57Ag54iEk=", - "total": "3" - }, - "root_hash": "F54643B0051065C87DA31A654531B65F9B57380F9BF3332FF5BCA7584567268C" - }, - "tx": "c3luYy1rZXk9dmFsdWU=", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "c3luYy1rZXk=" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "11", - "index": 2, - "proof": { - "data": "Y29tbWl0LWtleT12YWx1ZQ==", - "proof": { - "aunts": [ - "RaZ3Z52YXK7Rahqt14/2jlvLxqDpG0rmHt9ETIABLus=" - ], - "index": "2", - "leaf_hash": "wq4Wy/oF+/0xsH+eJq1SqY2BgYS2FVXbLAXNcCLkB74=", - "total": "3" - }, - "root_hash": "F54643B0051065C87DA31A654531B65F9B57380F9BF3332FF5BCA7584567268C" - }, - "tx": "Y29tbWl0LWtleT12YWx1ZQ==", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "height": "18", - "index": 0, - "proof": { - "data": "dHgwPXZhbHVl", - "proof": { - "aunts": [], - "index": "0", - "leaf_hash": "3UnhxGnCw+sKtov5uD2YZbCP79vHFwLMc1ZPTaVocKQ=", - "total": "1" - }, - "root_hash": "DD49E1C469C2C3EB0AB68BF9B83D9865B08FEFDBC71702CC73564F4DA56870A4" - }, - "tx": "dHgwPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgw" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "height": "19", - "index": 0, - "proof": { - "data": "dHgxPXZhbHVl", - "proof": { - "aunts": [ - "0eF/BEMF82Y/mIMIM0HX/isU2jI44Z2rAor5MA0PrKM=" - ], - "index": "0", - "leaf_hash": "QnwQk7ERU9NjeD1GlLa4H8lscIRFD3evj6SZulKp3T8=", - "total": "2" - }, - "root_hash": "05E17857792BBFE205D9F8C2498F6C05A3603D046EDF57C50D037D36804F35D1" - }, - "tx": "dHgxPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgx" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "height": "19", - "index": 1, - "proof": { - "data": "dHgyPXZhbHVl", - "proof": { - "aunts": [ - "QnwQk7ERU9NjeD1GlLa4H8lscIRFD3evj6SZulKp3T8=" - ], - "index": "1", - "leaf_hash": "0eF/BEMF82Y/mIMIM0HX/isU2jI44Z2rAor5MA0PrKM=", - "total": "2" - }, - "root_hash": "05E17857792BBFE205D9F8C2498F6C05A3603D046EDF57C50D037D36804F35D1" - }, - "tx": "dHgyPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgy" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "height": "20", - "index": 0, - "proof": { - "data": "dHgzPXZhbHVl", - "proof": { - "aunts": [], - "index": "0", - "leaf_hash": "jt+3kmBnxAUZK7c0gytFbKegUaR38TB3aAlKsIZ0RNU=", - "total": "1" - }, - "root_hash": "8EDFB7926067C405192BB734832B456CA7A051A477F1307768094AB0867444D5" - }, - "tx": "dHgzPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgz" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "height": "21", - "index": 0, - "proof": { - "data": "dHg0PXZhbHVl", - "proof": { - "aunts": [], - "index": "0", - "leaf_hash": "oZPOdbpVGhDcNY2OaPjybbnfL2SMaDmXm9ufOgruPCA=", - "total": "1" - }, - "root_hash": "A193CE75BA551A10DC358D8E68F8F26DB9DF2F648C6839979BDB9F3A0AEE3C20" - }, - "tx": "dHg0PXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHg0" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - } - ] - } -} \ No newline at end of file diff --git a/rpc/tests/support/tx_with_prove.json b/rpc/tests/support/tx_with_prove.json deleted file mode 100644 index 0b6ba25ae..000000000 --- a/rpc/tests/support/tx_with_prove.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "hash": "291B44C883803751917D547238EAC419E968C0171A3154D777B2EA8EA5039C57", - "height": "2", - "index": 0, - "tx_result": { - "code": 0, - "data": "CgYKBHNlbmQ=", - "log": "[{\"events\":[{\"type\":\"message\",\"attributes\":[{\"key\":\"action\",\"value\":\"send\"},{\"key\":\"sender\",\"value\":\"cosmos1s2tw45c7stsafk42vsz9sj09jm09y6tk4qeerh\"},{\"key\":\"module\",\"value\":\"bank\"}]},{\"type\":\"transfer\",\"attributes\":[{\"key\":\"recipient\",\"value\":\"cosmos1nv3uf7hpuvk4em39vxr944hphujtuqa2xl7688\"},{\"key\":\"sender\",\"value\":\"cosmos1s2tw45c7stsafk42vsz9sj09jm09y6tk4qeerh\"},{\"key\":\"amount\",\"value\":\"1samoleans\"}]}]}]", - "info": "", - "gas_wanted": "100000", - "gas_used": "75848", - "events": [ - { - "type": "transfer", - "attributes": [ - { - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMTd4cGZ2YWttMmFtZzk2MnlsczZmODR6M2tlbGw4YzVsc2VycXRh", - "index": true - }, - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - }, - { - "key": "YW1vdW50", - "value": "MXNhbW9sZWFucw==", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "c2VuZA==", - "index": true - } - ] - }, - { - "type": "transfer", - "attributes": [ - { - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4", - "index": true - }, - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - }, - { - "key": "YW1vdW50", - "value": "MXNhbW9sZWFucw==", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "bW9kdWxl", - "value": "YmFuaw==", - "index": true - } - ] - } - ], - "codespace": "" - }, - "tx": "Cp8BCo4BChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEm4KLWNvc21vczFzMnR3NDVjN3N0c2FmazQydnN6OXNqMDlqbTA5eTZ0azRxZWVyaBItY29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4Gg4KCXNhbW9sZWFucxIBMRIJdGVzdCBtZW1vGKlGEmYKTgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQNi056vvgeqQgAUg8xRONa/j2XDlX7qcjc67RonX3JvpBIECgIIARIUCg4KCXNhbW9sZWFucxIBMRCgjQYaQLnVzSrnFPAOZ7wpXnQ3tR651N2DkYQgU9//VQrc03ysHZg3W8dVpbpEVxYO69ArPl2B5O3eTZL1a3utE0marvk=", - "proof": { - "root_hash": "69C402D84BC672506F1B3611046B8B25289C2600FD7A007689C5949A33206557", - "data": "Cp8BCo4BChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEm4KLWNvc21vczFzMnR3NDVjN3N0c2FmazQydnN6OXNqMDlqbTA5eTZ0azRxZWVyaBItY29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4Gg4KCXNhbW9sZWFucxIBMRIJdGVzdCBtZW1vGKlGEmYKTgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQNi056vvgeqQgAUg8xRONa/j2XDlX7qcjc67RonX3JvpBIECgIIARIUCg4KCXNhbW9sZWFucxIBMRCgjQYaQLnVzSrnFPAOZ7wpXnQ3tR651N2DkYQgU9//VQrc03ysHZg3W8dVpbpEVxYO69ArPl2B5O3eTZL1a3utE0marvk=", - "proof": { - "total": "1", - "index": "0", - "leaf_hash": "acQC2EvGclBvGzYRBGuLJSicJgD9egB2icWUmjMgZVc=", - "aunts": [] - } - } - } -} diff --git a/rpc/tests/support/validators.json b/rpc/tests/support/validators.json deleted file mode 100644 index 1e0ef5970..000000000 --- a/rpc/tests/support/validators.json +++ /dev/null @@ -1,595 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "block_height": "42", - "validators": [ - { - "address": "000001E443FD237E4B616E2FA69DF4EE3D49A94F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "9tK9IT+FPdf2qm+5c2qaxi10sWP+3erWTKgftn2PaQM=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "000AA5ABF590A815EBCBDAE070AFF50BE571EB8B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "yWPYIfSf5yi/MlBzEZx2yMhOJ/daXRx8Eg3NOso8V7c=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "02A248C86C78ED6A824D510A8B7AA4C1D290D2DC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "by0WjAY1EHgpi2fCIvggfrmvZdOjl+GpyGLnlySbIVE=" - }, - "voting_power": "100000", - "proposer_priority": "-987557" - }, - { - "address": "064CF05857B556FED63AC32821FF904312D0F2C8", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zXKJLZjLusy5tRs5bNoafLPTB5LLP6tZGHSeG4TIRGE=" - }, - "voting_power": "100000", - "proposer_priority": "-987557" - }, - { - "address": "099E2B09583331AFDE35E5FA96673D2CA7DEA316", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e3BehnEIlGUAnJYn9V8gBXuMh4tXO8xxlxyXD1APGyk=" - }, - "voting_power": "30000", - "proposer_priority": "-2116475" - }, - { - "address": "18C78D135C9D81D74F6234DBD268C47F0F89E844", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "FrxZm4ptkt0QtyLA5iVCqTmWD6AlrbVXVeornQlePeI=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "1E9CE94FD0BA5CFEB901F90BC658D64D85B134D2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TwzOJ4GcN+ZTswub4R8488SrKeWXjY/PaqCF5neXJig=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "2199EAE894CA391FA82F01C2C614BFEB103D056C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "C+VWc34ZF6n/QoIAXo4191OwKxQWpbFnrGKCqcNbe1E=" - }, - "voting_power": "100000", - "proposer_priority": "-987557" - }, - { - "address": "2B19594437F1920B5AF6461FAB81AEC99790FEB1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Sj+idSMfzPh20CuVPqQr3H7NsE5rr7ZAGzV/rEwJn6E=" - }, - "voting_power": "200000", - "proposer_priority": "212443" - }, - { - "address": "2C9CCC317FB283D54AC748838A64F29106039E51", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZOvaws6Rz4Pl8mThEEh3IR7rsnx213jY9smYC1GcC6o=" - }, - "voting_power": "500", - "proposer_priority": "20500" - }, - { - "address": "31920F9BC3A39B66876CC7D6D5E589E10393BF0E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lh/p8UTp1kF8+4noOeInUG3PuWpFzk6Mnopj0updt4I=" - }, - "voting_power": "4500", - "proposer_priority": "184500" - }, - { - "address": "3363E8F97B02ECC00289E72173D827543047ACDA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "mPnu910hOOa1tAQ7pbOLFDxvllbQUmrbtGjqQrYg1nM=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "42D6705E716616B4A5442BDAA050B7C6E9FDDE43", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "K7PFMeLp0twwz3RDAvlWoz0N6vTsCg6KeKx8xwUm5Hw=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "4906F2A5334D906A4C63F9E9D61527A9F593C4EF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "1o6K5D3m5LNGg7R5gSp/37/hcy6y32FxaC3v09Cikbc=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "49BBFB1BA1A75052E3226E8E1E0EFEB33918B8B2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fjKz5EcrpVII/MzwTF/d+3FHEIMJtSZfU9WMaH+b/Ok=" - }, - "voting_power": "100000", - "proposer_priority": "-1097557" - }, - { - "address": "4C92230FAC162303D981C06DD22663A4FC7622BC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "QahmjM81l/oM+Yu8yUVFSi8UzyE/boMd6vTbSdpGFwE=" - }, - "voting_power": "10000", - "proposer_priority": "410000" - }, - { - "address": "4E9CB39F4B1FA617339744A5600B62802652D69C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "nO6jz/KlIYiooQzvgbzG9bmCsnAMWhdhR3Nvcy5Y9JM=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "51DB2566204EE266427EA8A6CB719835AB170BE9", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ovdfH/edW89+uiB0lHC5OnCbQfKtkn8G1RHZiOP4sYQ=" - }, - "voting_power": "511", - "proposer_priority": "20951" - }, - { - "address": "57FEB2461AA77EC70036C636890B8F47CB4FCB0D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "SC5O3o35vzC4Z4RbtfltO6kOIewKd7na5XcITeOXvQQ=" - }, - "voting_power": "21", - "proposer_priority": "861" - }, - { - "address": "5AB353B748D45F20DFCE19D73BA89F26E1C34CF7", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "P4WJpPDdcu7iXUg5JOWLOO7pUBYvHLNXKTlwvgNzbbI=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "671460930CCDC9B06C5D055E4D550EB8DAF2291E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "2k346W3w8NFAQh21j1hBp+Mvur+ZhHFuEQk8DEOlN+c=" - }, - "voting_power": "5020", - "proposer_priority": "205260" - }, - { - "address": "679B89785973BE94D4FDF8B66F84A929932E91C5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Roh99RlsnDKHUFYUcQVHk2S84NeZfZdpc+CBb6NREhM=" - }, - "voting_power": "20", - "proposer_priority": "820" - }, - { - "address": "696ABC95186FD65A07050C28AB00C9358A315030", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GghJGDl/JZSZ07B2ARdvvJ8SPKtoi/dh8PbYSui359I=" - }, - "voting_power": "1", - "proposer_priority": "41" - }, - { - "address": "6F5F44F6FD7CD1642FFB8B12215BAE814A1BE08C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "4FAoNAp3t+9epiDWRwjH38E5F9zDWet3ufHdQPjdaBM=" - }, - "voting_power": "20000", - "proposer_priority": "820000" - }, - { - "address": "70C5B4E6779C59A24CFD9146581E27021C2AEC26", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "aek+Unn7MEILEBjeTqP3ONLJ6wwoQxC+6NuXY90xx0Q=" - }, - "voting_power": "6500", - "proposer_priority": "266500" - }, - { - "address": "732CEEF54C374DDC6ADECBFD707AEFD07FEDC143", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "HjSC7VkhKih6xMhudlqfaFE8ZZnP8RKJPv4iqR7RhcE=" - }, - "voting_power": "3000", - "proposer_priority": "123000" - }, - { - "address": "77064757FCC7828F98B33525B4599DB0FD08DC37", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "cLeIVsGGVkt5M/YExv5I67pYj1uYmYcsvY60PIVIxB4=" - }, - "voting_power": "42", - "proposer_priority": "1722" - }, - { - "address": "7B3A2EFE5B3FCDF819FCF52607314CEFE4754BB6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "11pGwt6bot1EC5xeug8mulFNBBWsHV+X7XrxLUmTNF8=" - }, - "voting_power": "4500", - "proposer_priority": "184500" - }, - { - "address": "7F225CB9ACF7D34C993807A7F9CB3B2851386DE1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "v6sR0bx6aRF0QxLbyIpKW4MTk9ndKf33PDN/uffH6NA=" - }, - "voting_power": "100", - "proposer_priority": "4100" - }, - { - "address": "808D6B054A0B6D3FF5F5EAF0A65CFC64C543F833", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "486fL5jJ7HOtGXXdkei2Sy1OijidPiiw4b/OhnCzNw4=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "81965FE8A15FA8078C9202F32E4CFA72F85F2A22", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "PflSgb+lC1GI22wc6N/54cNzD7KSYQyCWR5LuQxjYVY=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "8328647F309C8AA148CDA5595145E13E455CA704", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "AmPqEmF5YNmlv2vu8lEcDeQ3hyR+lymnqx2VixdMEzA=" - }, - "voting_power": "12680", - "proposer_priority": "519880" - }, - { - "address": "91C823A744DE50F91C17A46B624EDF8F7150A7DD", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/VS/bgueXBoNDsrzxxaX64RIL//2wHb9VZ0Jd67+AqQ=" - }, - "voting_power": "595150", - "proposer_priority": "-474858" - }, - { - "address": "95E060D07713070FE9822F6C50BD76BCCBF9F17A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ahgQzIOmCh5+A9iGXJRh8AKNlk4NCcOiPebzZEuIN3A=" - }, - "voting_power": "1117675", - "proposer_priority": "324236" - }, - { - "address": "991B742CC8660B40321F77873644C195195D4178", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "2HcS9L0H/gGduyui5z4BeyKmMDcG0GWp6Qu8WpekvcE=" - }, - "voting_power": "20000", - "proposer_priority": "820000" - }, - { - "address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Mvh+7UDaXgmj4Fst0ZUdx++MJmoq4B9M6mdgNc8H2pM=" - }, - "voting_power": "100000", - "proposer_priority": "-1097557" - }, - { - "address": "9D07B301D23C547266D55D1B6C5A78CA473383A1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "oVap7iG9La5g76ufP2SaLz55rzlTSV833KRAqp+NOpU=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "9EE94DBB86F72337192BF291B0E767FD2729F00A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hATVIEvJ1NEt5g9i59iH+a8oaEFtErP227Qw7kgpWTc=" - }, - "voting_power": "14750", - "proposer_priority": "604750" - }, - { - "address": "AC2D56057CD84765E6FBE318979093E8E44AA18F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0kNlxBMpm+5WtfHIG1xsWatOXTKPLtmSqn3EiEIDZeI=" - }, - "voting_power": "19000", - "proposer_priority": "779000" - }, - { - "address": "B00A6323737F321EB0B8D59C6FD497A14B60938A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "cOQZvh/h9ZioSeUMZB/1Vy1Xo5x2sjrVjlE/qHnYifM=" - }, - "voting_power": "397062", - "proposer_priority": "1874734" - }, - { - "address": "B0155252D73B7EEB74D2A8CC814397E66970A839", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "w3rKE+tQoLK8G+XPmjn+NszCk07iQ0sWaBbN5hQZcBY=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "B0765A2F6FCC11D8AC46275FAC06DD35F54217C1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "inTpwtq2gc0g86M+Sovdk7wCxe68QG0Kxr2XO9S/q+0=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "B34591DA79AAD0213534E2E915F50DE5CDBDF250", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "m0thJvdnGUsrANKJx+aM9Em4IN17v5mXHilLzDkeujQ=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "B4E1085F1C9EBB0EA994452CB1B8124BA89BED1A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+LbXwDMu37jkBRBLFtXazRfEd2ytSAkIncZ/Ng+6jVI=" - }, - "voting_power": "20000", - "proposer_priority": "820000" - }, - { - "address": "B543A7DF48780AEFEF593A003CD060B593C4E6B5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KjPuAGkJQWb0ImqKuS3DAFat7LvIVmiWhEGRur1twck=" - }, - "voting_power": "1495", - "proposer_priority": "61295" - }, - { - "address": "B6C5D0EEBE1ABB66039A90B80820C10A9CBCA95C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "AQJie+dfWUVPM0GPmCUqvFnjr6AMogDjiCPHaOc+LA0=" - }, - "voting_power": "100", - "proposer_priority": "4100" - }, - { - "address": "BAC33F340F3497751F124868F049EC2E8930AC2F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "9KA7fKlALPdKPb7SM4UGlpnbSU4U9U1A4c3u8V2KdTs=" - }, - "voting_power": "131140", - "proposer_priority": "-93897" - }, - { - "address": "BF4CB4D59D19D451CF5E7BC49349DF4AA222D78B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "eInQcvrB2bkkSV1jwBPpVmUgywzgVCGuFqv4QRzQAos=" - }, - "voting_power": "1490", - "proposer_priority": "61090" - }, - { - "address": "C2356622B495725961B5B201A382DD57CD3305EC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "pZBzfgX8aJXz9tqGvz75NnJB0wAFsMrfxY6FTnYMZ0Q=" - }, - "voting_power": "100000", - "proposer_priority": "-1197557" - }, - { - "address": "C52ACDB32057F5C731BBDD48460B93C3500DD324", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lgJcii0W2QanDlXpb/9gZJAJ3X9l+tqArhYAmNUJ1lw=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "C6D8D6D4DD2A41D2D1B53982196519FA314E7CB4", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "QWI1AcmT2WF8+2DewC5iVywd18elt9doqkegXVXV2yM=" - }, - "voting_power": "20000", - "proposer_priority": "820000" - }, - { - "address": "CA6696F5FE66A480BF21460319BE979930852DD0", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xQim88WOJcW/E9M8u4Ym+wN0Itoa1Nu4ubS/2jl236c=" - }, - "voting_power": "13000", - "proposer_priority": "533000" - }, - { - "address": "CC05882978FC5FDD6A7721687E14C0299AE004B8", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fUj2rJ8mWqSdo8FX47dhWni++/oxOSduCBgymD4GCiU=" - }, - "voting_power": "50000", - "proposer_priority": "-152660" - }, - { - "address": "CEB8DB4286061B32209D33E2ADF6756ACDD7E005", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "pDgRB4ZUupIx+gOU2bXpFC7VZnvPSiz2xc74pK6Dgec=" - }, - "voting_power": "1000", - "proposer_priority": "41000" - }, - { - "address": "D14A542E8756C3A942D9FD8873DC2E9A7798A17F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Zvd+ILfG9q1jPnZfOOYdZOuNLThLdCRPkvRV+HrXkCs=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "D3DB7197312CD60A71E291A66D430B20D197CF41", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "K9Sxg6Dc+9JR161k2R/yCoGeIQcenTp1OzCcEZFPo14=" - }, - "voting_power": "100000", - "proposer_priority": "-1197567" - }, - { - "address": "D4C63291134A25AB7E0AF43C08039341D733733B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "MN4/P8vTZE2djhgiWXuVXHEoG1br+vP3LipBc92Uekg=" - }, - "voting_power": "1000", - "proposer_priority": "41000" - }, - { - "address": "D9F8A41B782AA6A66ADC81F953923C7DCE7B6001", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "n9bW9hmvwSwm/AnJtDwZNGA+2RSoQsfoMFsc2Rrb0vY=" - }, - "voting_power": "4800", - "proposer_priority": "196800" - }, - { - "address": "DA6AAAA959C9EF88A3EB37B1F107CB2667EBBAAB", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KbhRasSMxRtStejqK/Ayzexm/DtavlfbNjWGznPXMlE=" - }, - "voting_power": "4900", - "proposer_priority": "200900" - }, - { - "address": "E800740C68C81B30345C3AE2BA638FA56FF67EEF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vvSJSs7OAESNGSF1CnA+aOcAz/VcRtH4qB2/ZBUp0Lo=" - }, - "voting_power": "100000", - "proposer_priority": "-1197567" - }, - { - "address": "EE73A19751D58C5EC044C11E3FB7AE685A10D2C1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lObsqlAjmPsnBfBE+orb8vBbKrH2G5VskSUlAq/YcXc=" - }, - "voting_power": "14000", - "proposer_priority": "574000" - }, - { - "address": "F1755B14D0F358747185935F820FC06BE602B51F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ppQFrqp0Ab3u4ZUZtAYtCMOcfFinKeu1lgg9pU13HFg=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "F4CAB410DE5567DB203BD56C694FB78D482479A1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZihmjCxvIZinDz1hTU69024uNIKWyOkZVE2Q5Sbwl58=" - }, - "voting_power": "100", - "proposer_priority": "4100" - }, - { - "address": "F919902709B7482F01C030E8B57BF93B8D87043B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TaxOZNOCv+G5WzK3Apz3z27xyZVWSgOeGMR3ClxIrQM=" - }, - "voting_power": "100000", - "proposer_priority": "-1791217" - }, - { - "address": "FA0E5DFACCDCF74957A742144FE55BE61D433377", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "SgJAVNasC6tDdkjH6XM9LbbTW/S6y1MgJsqq/1Y8Lhk=" - }, - "voting_power": "2500", - "proposer_priority": "102500" - } - ], - "total": "65" - } -} diff --git a/tendermint/Cargo.toml b/tendermint/Cargo.toml index 1ac31a315..6ee3f5f14 100644 --- a/tendermint/Cargo.toml +++ b/tendermint/Cargo.toml @@ -34,7 +34,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] async-trait = { version = "0.1", default-features = false } -bytes = { version = "1.0", default-features = false } +bytes = { version = "1.0", default-features = false, features = ["serde"] } chrono = { version = "0.4.19", default-features = false, features = ["serde"] } ed25519 = { version = "1.3", default-features = false } ed25519-dalek = { version = "1", default-features = false, features = ["u64_backend"] } diff --git a/tendermint/src/abci.rs b/tendermint/src/abci.rs index 9a0f84761..cb039806d 100644 --- a/tendermint/src/abci.rs +++ b/tendermint/src/abci.rs @@ -1,29 +1,53 @@ -//! Application BlockChain Interface (ABCI) +//! Application BlockChain Interface ([ABCI]) is the interface between Tendermint +//! (a consensus engine for Byzantine-fault-tolerant replication of a state +//! machine) and an application (the state machine to be replicated). //! -//! NOTE: This module contains types for ABCI responses as consumed from RPC -//! endpoints. It does not contain an ABCI protocol implementation. +//! Using ABCI involves writing an application driven by ABCI methods, exposing +//! that application as an ABCI server, and having Tendermint connect to the +//! server as an ABCI client. //! -//! For that, see: +//! This module does not include an ABCI server implementation itself. Instead, +//! it provides a common set of Rust domain types that model the ABCI protocol, +//! which can be used by both ABCI applications and ABCI server implementations. //! -//! +//! One ABCI server implementation is provided by the [`tendermint_abci`][tmabci] +//! crate. +//! +//! Each ABCI method corresponds to a request/response pair. ABCI requests are +//! modeled by the [`Request`] enum, and responses are modeled by the +//! [`Response`] enum. As described in the [methods and types][mat] page, ABCI +//! methods are split into four categories. Tendermint opens one ABCI connection +//! for each category of messages. These categories are modeled by the +//! [`MethodKind`] enum and by per-category request and response enums: +//! +//! * [`ConsensusRequest`] / [`ConsensusResponse`] for [`MethodKind::Consensus`] methods; +//! * [`MempoolRequest`] / [`MempoolResponse`] for [`MethodKind::Mempool`] methods; +//! * [`InfoRequest`] / [`InfoResponse`] for [`MethodKind::Info`] methods; +//! * [`SnapshotRequest`] / [`SnapshotResponse`] for [`MethodKind::Snapshot`] methods. +//! +//! The domain types in this module have conversions to and from the Protobuf +//! types defined in the [`tendermint_proto`] crate. These conversions are +//! required for ABCI server implementations, which use the protobufs to +//! communicate with Tendermint, but should not be required for ABCI +//! applications, which should use the domain types in an interface defined by +//! their choice of ABCI server implementation. +//! +//! [ABCI]: https://docs.tendermint.com/master/spec/abci/ +//! [mat]: https://docs.tendermint.com/master/spec/abci/abci.html +//! [tmabci]: https://github.com/informalsystems/tendermint-rs/tree/master/abci + +mod event; +mod kind; + +pub mod request; +pub mod response; +pub mod types; -mod code; -mod data; -mod gas; -mod info; -mod log; -mod path; -pub mod responses; -pub mod tag; -pub mod transaction; +pub use event::{Event, EventAttribute, EventAttributeIndexExt}; +#[doc(inline)] pub use self::{ - code::Code, - data::Data, - gas::Gas, - info::Info, - log::Log, - path::Path, - responses::{DeliverTx, Event, Responses}, - transaction::Transaction, + kind::MethodKind, + request::{ConsensusRequest, InfoRequest, MempoolRequest, Request, SnapshotRequest}, + response::{ConsensusResponse, InfoResponse, MempoolResponse, Response, SnapshotResponse}, }; diff --git a/tendermint/src/abci/doc/request-applysnapshotchunk.md b/tendermint/src/abci/doc/request-applysnapshotchunk.md new file mode 100644 index 000000000..fe1c35598 --- /dev/null +++ b/tendermint/src/abci/doc/request-applysnapshotchunk.md @@ -0,0 +1,21 @@ +Applies a snapshot chunk. + +The application can choose to refetch chunks and/or ban P2P peers as +appropriate. Tendermint will not do this unless instructed by the +application. + +The application may want to verify each chunk, e.g., by attaching chunk +hashes in [`Snapshot::metadata`] and/or incrementally verifying contents +against `app_hash`. + +When all chunks have been accepted, Tendermint will make an ABCI [`Info`] +request to verify that `last_block_app_hash` and `last_block_height` match +the expected values, and record the `app_version` in the node state. It then +switches to fast sync or consensus and joins the network. + +If Tendermint is unable to retrieve the next chunk after some time (e.g., +because no suitable peers are available), it will reject the snapshot and try +a different one via `OfferSnapshot`. The application should be prepared to +reset and accept it or abort as appropriate. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#applysnapshotchunk) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-beginblock.md b/tendermint/src/abci/doc/request-beginblock.md new file mode 100644 index 000000000..44b98920a --- /dev/null +++ b/tendermint/src/abci/doc/request-beginblock.md @@ -0,0 +1,6 @@ +Signals the beginning of a new block. + +Called prior to any [`DeliverTx`]s. The `header` contains the height, +timestamp, and more -- it exactly matches the Tendermint block header. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#beginblock) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-checktx.md b/tendermint/src/abci/doc/request-checktx.md new file mode 100644 index 000000000..7d97a6287 --- /dev/null +++ b/tendermint/src/abci/doc/request-checktx.md @@ -0,0 +1,11 @@ +Check whether a transaction should be included in the mempool. + +`CheckTx` is not involved in processing blocks, only in deciding whether a +transaction should be included in the mempool. Every node runs `CheckTx` +before adding a transaction to its local mempool. The transaction may come +from an external user or another node. `CheckTx` need not execute the +transaction in full, but can instead perform lightweight or statateful +validation (e.g., checking signatures or account balances) instead of more +expensive checks (like running code in a virtual machine). + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#checktx) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-commit.md b/tendermint/src/abci/doc/request-commit.md new file mode 100644 index 000000000..0013b8302 --- /dev/null +++ b/tendermint/src/abci/doc/request-commit.md @@ -0,0 +1,4 @@ +Signals the application that it can write the queued state transitions +from the block to its state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#commit) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-delivertx.md b/tendermint/src/abci/doc/request-delivertx.md new file mode 100644 index 000000000..4d449cc56 --- /dev/null +++ b/tendermint/src/abci/doc/request-delivertx.md @@ -0,0 +1,3 @@ +Execute a transaction against the application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#delivertx) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-echo.md b/tendermint/src/abci/doc/request-echo.md new file mode 100644 index 000000000..92658169f --- /dev/null +++ b/tendermint/src/abci/doc/request-echo.md @@ -0,0 +1,3 @@ +Echoes a string to test an ABCI implementation. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#echo) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-endblock.md b/tendermint/src/abci/doc/request-endblock.md new file mode 100644 index 000000000..6e23b6d7c --- /dev/null +++ b/tendermint/src/abci/doc/request-endblock.md @@ -0,0 +1,5 @@ +Signals the end of a block. + +Called after all transactions, and prior to each `Commit`. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#endblock) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-flush.md b/tendermint/src/abci/doc/request-flush.md new file mode 100644 index 000000000..c556d8b2d --- /dev/null +++ b/tendermint/src/abci/doc/request-flush.md @@ -0,0 +1,3 @@ +Indicates that any pending requests should be completed and their responses flushed. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#flush) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-info.md b/tendermint/src/abci/doc/request-info.md new file mode 100644 index 000000000..471ec36c7 --- /dev/null +++ b/tendermint/src/abci/doc/request-info.md @@ -0,0 +1,3 @@ +Requests information about the application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#info) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-initchain.md b/tendermint/src/abci/doc/request-initchain.md new file mode 100644 index 000000000..49180f351 --- /dev/null +++ b/tendermint/src/abci/doc/request-initchain.md @@ -0,0 +1,3 @@ +Called on genesis to initialize chain state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#initchain) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-listsnapshots.md b/tendermint/src/abci/doc/request-listsnapshots.md new file mode 100644 index 000000000..bc89accad --- /dev/null +++ b/tendermint/src/abci/doc/request-listsnapshots.md @@ -0,0 +1,3 @@ +Asks the application for a list of snapshots. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#listsnapshots) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-loadsnapshotchunk.md b/tendermint/src/abci/doc/request-loadsnapshotchunk.md new file mode 100644 index 000000000..70b686d41 --- /dev/null +++ b/tendermint/src/abci/doc/request-loadsnapshotchunk.md @@ -0,0 +1,3 @@ +Used during state sync to retrieve snapshot chunks from peers. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#loadsnapshotchunk) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-offersnapshot.md b/tendermint/src/abci/doc/request-offersnapshot.md new file mode 100644 index 000000000..db0e60b17 --- /dev/null +++ b/tendermint/src/abci/doc/request-offersnapshot.md @@ -0,0 +1,20 @@ +Offers a list of snapshots to the application. + +`OfferSnapshot` is called when bootstrapping a node using state sync. The +application may accept or reject snapshots as appropriate. Upon accepting, +Tendermint will retrieve and apply snapshot chunks via +[`ApplySnapshotChunk`]. The application may also choose to reject a snapshot +in the chunk response, in which case it should be prepared to accept further +`OfferSnapshot` calls. + +Only `app_hash` can be trusted, as it has been verified by the light client. +Any other data can be spoofed by adversaries, so applications should employ +additional verification schemes to avoid denial-of-service attacks. The +verified `app_hash` is automatically checked against the restored application +at the end of snapshot restoration. + +See also the [`Snapshot`] data type and the [ABCI state sync documentation][ssd]. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#offersnapshot) + +[ssd]: https://docs.tendermint.com/master/spec/abci/apps.html#state-sync \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-query.md b/tendermint/src/abci/doc/request-query.md new file mode 100644 index 000000000..5d061c54e --- /dev/null +++ b/tendermint/src/abci/doc/request-query.md @@ -0,0 +1,3 @@ +Queries for data from the application at current or past height. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#query) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-applysnapshotchunk.md b/tendermint/src/abci/doc/response-applysnapshotchunk.md new file mode 100644 index 000000000..bffabe7af --- /dev/null +++ b/tendermint/src/abci/doc/response-applysnapshotchunk.md @@ -0,0 +1,7 @@ +Returns the result of applying a snapshot chunk and associated data. + +The application can choose to refetch chunks and/or ban P2P peers as +appropriate. Tendermint will not do this unless instructed by the +application. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#applysnapshotchunk) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-beginblock.md b/tendermint/src/abci/doc/response-beginblock.md new file mode 100644 index 000000000..255efd098 --- /dev/null +++ b/tendermint/src/abci/doc/response-beginblock.md @@ -0,0 +1,3 @@ +Returns events that occurred when beginning a new block. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#beginblock) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-checktx.md b/tendermint/src/abci/doc/response-checktx.md new file mode 100644 index 000000000..cd31b1703 --- /dev/null +++ b/tendermint/src/abci/doc/response-checktx.md @@ -0,0 +1,3 @@ +Returns the result of checking a transaction for mempool inclusion. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#checktx) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-commit.md b/tendermint/src/abci/doc/response-commit.md new file mode 100644 index 000000000..822aab48d --- /dev/null +++ b/tendermint/src/abci/doc/response-commit.md @@ -0,0 +1,3 @@ +Returns the result of persisting the application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#commit) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-delivertx.md b/tendermint/src/abci/doc/response-delivertx.md new file mode 100644 index 000000000..cb83a6fd9 --- /dev/null +++ b/tendermint/src/abci/doc/response-delivertx.md @@ -0,0 +1,4 @@ +Returns events that occurred while executing a transaction against the +application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#delivertx) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-echo.md b/tendermint/src/abci/doc/response-echo.md new file mode 100644 index 000000000..92658169f --- /dev/null +++ b/tendermint/src/abci/doc/response-echo.md @@ -0,0 +1,3 @@ +Echoes a string to test an ABCI implementation. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#echo) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-endblock.md b/tendermint/src/abci/doc/response-endblock.md new file mode 100644 index 000000000..062cabb84 --- /dev/null +++ b/tendermint/src/abci/doc/response-endblock.md @@ -0,0 +1,3 @@ +Returns validator updates that occur after the end of a block. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#endblock) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-exception.md b/tendermint/src/abci/doc/response-exception.md new file mode 100644 index 000000000..5d8fb6c67 --- /dev/null +++ b/tendermint/src/abci/doc/response-exception.md @@ -0,0 +1 @@ +Returns an exception (undocumented, nondeterministic). \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-flush.md b/tendermint/src/abci/doc/response-flush.md new file mode 100644 index 000000000..6c411e1bf --- /dev/null +++ b/tendermint/src/abci/doc/response-flush.md @@ -0,0 +1,3 @@ +Indicates that all pending requests have been completed with their responses flushed. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#flush) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-info.md b/tendermint/src/abci/doc/response-info.md new file mode 100644 index 000000000..e0c64b1f5 --- /dev/null +++ b/tendermint/src/abci/doc/response-info.md @@ -0,0 +1,3 @@ +Returns information about the application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#info) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-initchain.md b/tendermint/src/abci/doc/response-initchain.md new file mode 100644 index 000000000..b7ea62de7 --- /dev/null +++ b/tendermint/src/abci/doc/response-initchain.md @@ -0,0 +1,3 @@ +Returned on genesis after initializing chain state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#initchain) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-listsnapshots.md b/tendermint/src/abci/doc/response-listsnapshots.md new file mode 100644 index 000000000..48255b800 --- /dev/null +++ b/tendermint/src/abci/doc/response-listsnapshots.md @@ -0,0 +1,3 @@ +Returns a list of local state snapshots. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#listsnapshots) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-loadsnapshotchunk.md b/tendermint/src/abci/doc/response-loadsnapshotchunk.md new file mode 100644 index 000000000..2eaf1c614 --- /dev/null +++ b/tendermint/src/abci/doc/response-loadsnapshotchunk.md @@ -0,0 +1,3 @@ +Returns a snapshot chunk from the application. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#loadsnapshotchunk) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-offersnapshot.md b/tendermint/src/abci/doc/response-offersnapshot.md new file mode 100644 index 000000000..0da7a66fa --- /dev/null +++ b/tendermint/src/abci/doc/response-offersnapshot.md @@ -0,0 +1,7 @@ +Returns the application's response to a snapshot offer. + +See also the [`Snapshot`] data type and the [ABCI state sync documentation][ssd]. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#offersnapshot) + +[ssd]: https://docs.tendermint.com/master/spec/abci/apps.html#state-sync \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-query.md b/tendermint/src/abci/doc/response-query.md new file mode 100644 index 000000000..57eb3bf4a --- /dev/null +++ b/tendermint/src/abci/doc/response-query.md @@ -0,0 +1,3 @@ +Returns data queried from the application. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#query) \ No newline at end of file diff --git a/tendermint/src/abci/event.rs b/tendermint/src/abci/event.rs new file mode 100644 index 000000000..76677572b --- /dev/null +++ b/tendermint/src/abci/event.rs @@ -0,0 +1,183 @@ +use crate::prelude::*; + +/// An event that occurred while processing a request. +/// +/// Application developers can attach additional information to +/// [`BeginBlock`](super::response::BeginBlock), +/// [`EndBlock`](super::response::EndBlock), +/// [`CheckTx`](super::response::CheckTx), and +/// [`DeliverTx`](super::response::DeliverTx) responses. Later, transactions may +/// be queried using these events. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#events) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Event { + /// The kind of event. + /// + /// Tendermint calls this the `type`, but we use `kind` to avoid confusion + /// with Rust types and follow Rust conventions. + pub kind: String, + /// A list of [`EventAttribute`]s describing the event. + pub attributes: Vec, +} + +impl Event { + /// Construct an event from generic data. + /// + /// The `From` impls on [`EventAttribute`] and the [`EventAttributeIndexExt`] + /// trait allow ergonomic event construction, as in this example: + /// + /// ``` + /// use tendermint::abci::{Event, EventAttributeIndexExt}; + /// + /// let event = Event::new( + /// "app", + /// vec![ + /// ("key1", "value1").index(), + /// ("key2", "value2").index(), + /// ("key3", "value3").no_index(), // will not be indexed + /// ], + /// ); + /// ``` + // XXX(hdevalence): remove vec! from example after https://github.com/rust-lang/rust/pull/65819 + pub fn new(kind: K, attributes: I) -> Self + where + K: Into, + I: IntoIterator, + I::Item: Into, + { + Self { + kind: kind.into(), + attributes: attributes.into_iter().map(Into::into).collect(), + } + } +} + +/// A key-value pair describing an [`Event`]. +/// +/// Generic methods are provided for more ergonomic attribute construction, see +/// [`Event::new`] for details. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#events) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct EventAttribute { + /// The event key. + pub key: String, + /// The event value. + pub value: String, + /// Whether Tendermint's indexer should index this event. + /// + /// **This field is nondeterministic**. + pub index: bool, +} + +impl, V: Into> From<(K, V, bool)> for EventAttribute { + fn from((key, value, index): (K, V, bool)) -> Self { + EventAttribute { + key: key.into(), + value: value.into(), + index, + } + } +} + +/// Adds convenience methods to tuples for more ergonomic [`EventAttribute`] +/// construction. +/// +/// See [`Event::new`] for details. +#[allow(missing_docs)] +pub trait EventAttributeIndexExt: private::Sealed { + type Key; + type Value; + + /// Indicate that this key/value pair should be indexed by Tendermint. + fn index(self) -> (Self::Key, Self::Value, bool); + /// Indicate that this key/value pair should not be indexed by Tendermint. + fn no_index(self) -> (Self::Key, Self::Value, bool); +} + +impl, V: Into> EventAttributeIndexExt for (K, V) { + type Key = K; + type Value = V; + fn index(self) -> (K, V, bool) { + let (key, value) = self; + (key, value, true) + } + fn no_index(self) -> (K, V, bool) { + let (key, value) = self; + (key, value, false) + } +} + +mod private { + use crate::prelude::*; + + pub trait Sealed {} + + impl, V: Into> Sealed for (K, V) {} +} + +impl, V: Into> From<(K, V)> for EventAttribute { + fn from((key, value): (K, V)) -> Self { + (key, value, false).into() + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; + +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::EventAttribute { + fn from(event: EventAttribute) -> Self { + Self { + key: event.key, + value: event.value, + index: event.index, + } + } +} + +impl TryFrom for EventAttribute { + type Error = crate::Error; + + fn try_from(event: pb::EventAttribute) -> Result { + Ok(Self { + key: event.key, + value: event.value, + index: event.index, + }) + } +} + +impl Protobuf for EventAttribute {} + +impl From for pb::Event { + fn from(event: Event) -> Self { + Self { + r#type: event.kind, + attributes: event.attributes.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for Event { + type Error = crate::Error; + + fn try_from(event: pb::Event) -> Result { + Ok(Self { + kind: event.r#type, + attributes: event + .attributes + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for Event {} diff --git a/tendermint/src/abci/kind.rs b/tendermint/src/abci/kind.rs new file mode 100644 index 000000000..065a01c9a --- /dev/null +++ b/tendermint/src/abci/kind.rs @@ -0,0 +1,23 @@ +/// A category of ABCI method. +/// +/// ABCI methods are split into four categories. Tendermint opens one ABCI +/// connection for each category and refers to these categories as *connections*, +/// but nothing actually restricts an ABCI connection from calling methods in +/// multiple categories. +/// +/// This enum breaks out the `Flush` method as a distinct category, since it is +/// used to control the execution of other methods. +pub enum MethodKind { + /// A consensus method, driven by the consensus protocol and responsible for + /// block execution. + Consensus, + /// A mempool method, used for validating new transactions before they're + /// shared or included in a block. + Mempool, + /// A snapshot method, used for serving and restoring state snapshots. + Snapshot, + /// An info method, used for initialization and user queries. + Info, + /// The flush method requests that all pending method requests are fully executed. + Flush, +} diff --git a/tendermint/src/abci/request.rs b/tendermint/src/abci/request.rs new file mode 100644 index 000000000..5b1d02628 --- /dev/null +++ b/tendermint/src/abci/request.rs @@ -0,0 +1,306 @@ +//! ABCI requests and request data. +//! +//! The [`Request`] enum records all possible ABCI requests. Requests that +//! contain data are modeled as a separate struct, to avoid duplication of field +//! definitions. + +use crate::prelude::*; + +// IMPORTANT NOTE ON DOCUMENTATION: +// +// The documentation for each request type is adapted from the ABCI Methods and +// Types spec document. However, the same logical request may appear three +// times, as a struct with the request data, as a Request variant, and as a +// CategoryRequest variant. +// +// To avoid duplication, this documentation is stored in the doc/ folder in +// individual .md files, which are pasted onto the relevant items using #[doc = +// include_str!(...)]. +// +// This is also why certain submodules have #[allow(unused)] imports to bring +// items into scope for doc links, rather than changing the doc links -- it +// allows the doc comments to be copied without editing. + +use core::convert::{TryFrom, TryInto}; + +use super::MethodKind; +use crate::Error; + +// bring into scope for doc links +#[allow(unused)] +use super::types::Snapshot; + +mod apply_snapshot_chunk; +mod begin_block; +mod check_tx; +mod deliver_tx; +mod echo; +mod end_block; +mod info; +mod init_chain; +mod load_snapshot_chunk; +mod offer_snapshot; +mod query; + +pub use apply_snapshot_chunk::ApplySnapshotChunk; +pub use begin_block::BeginBlock; +pub use check_tx::{CheckTx, CheckTxKind}; +pub use deliver_tx::DeliverTx; +pub use echo::Echo; +pub use end_block::EndBlock; +pub use info::Info; +pub use init_chain::InitChain; +pub use load_snapshot_chunk::LoadSnapshotChunk; +pub use offer_snapshot::OfferSnapshot; +pub use query::Query; + +/// All possible ABCI requests. +#[allow(clippy::large_enum_variant)] +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum Request { + #[doc = include_str!("doc/request-echo.md")] + Echo(Echo), + #[doc = include_str!("doc/request-flush.md")] + Flush, + #[doc = include_str!("doc/request-info.md")] + Info(Info), + #[doc = include_str!("doc/request-initchain.md")] + InitChain(InitChain), + #[doc = include_str!("doc/request-query.md")] + Query(Query), + #[doc = include_str!("doc/request-beginblock.md")] + BeginBlock(BeginBlock), + #[doc = include_str!("doc/request-checktx.md")] + CheckTx(CheckTx), + #[doc = include_str!("doc/request-delivertx.md")] + DeliverTx(DeliverTx), + #[doc = include_str!("doc/request-endblock.md")] + EndBlock(EndBlock), + #[doc = include_str!("doc/request-commit.md")] + Commit, + #[doc = include_str!("doc/request-listsnapshots.md")] + ListSnapshots, + #[doc = include_str!("doc/request-offersnapshot.md")] + OfferSnapshot(OfferSnapshot), + #[doc = include_str!("doc/request-loadsnapshotchunk.md")] + LoadSnapshotChunk(LoadSnapshotChunk), + #[doc = include_str!("doc/request-applysnapshotchunk.md")] + ApplySnapshotChunk(ApplySnapshotChunk), +} + +impl Request { + /// Get the method kind for this request. + pub fn kind(&self) -> MethodKind { + use Request::*; + match self { + Flush => MethodKind::Flush, + InitChain(_) => MethodKind::Consensus, + BeginBlock(_) => MethodKind::Consensus, + DeliverTx(_) => MethodKind::Consensus, + EndBlock(_) => MethodKind::Consensus, + Commit => MethodKind::Consensus, + CheckTx(_) => MethodKind::Mempool, + ListSnapshots => MethodKind::Snapshot, + OfferSnapshot(_) => MethodKind::Snapshot, + LoadSnapshotChunk(_) => MethodKind::Snapshot, + ApplySnapshotChunk(_) => MethodKind::Snapshot, + Info(_) => MethodKind::Info, + Query(_) => MethodKind::Info, + Echo(_) => MethodKind::Info, + } + } +} + +/// The consensus category of ABCI requests. +#[allow(clippy::large_enum_variant)] +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum ConsensusRequest { + #[doc = include_str!("doc/request-initchain.md")] + InitChain(InitChain), + #[doc = include_str!("doc/request-beginblock.md")] + BeginBlock(BeginBlock), + #[doc = include_str!("doc/request-delivertx.md")] + DeliverTx(DeliverTx), + #[doc = include_str!("doc/request-endblock.md")] + EndBlock(EndBlock), + #[doc = include_str!("doc/request-commit.md")] + Commit, +} + +impl From for Request { + fn from(req: ConsensusRequest) -> Self { + match req { + ConsensusRequest::InitChain(x) => Self::InitChain(x), + ConsensusRequest::BeginBlock(x) => Self::BeginBlock(x), + ConsensusRequest::DeliverTx(x) => Self::DeliverTx(x), + ConsensusRequest::EndBlock(x) => Self::EndBlock(x), + ConsensusRequest::Commit => Self::Commit, + } + } +} + +impl TryFrom for ConsensusRequest { + type Error = Error; + fn try_from(req: Request) -> Result { + match req { + Request::InitChain(x) => Ok(Self::InitChain(x)), + Request::BeginBlock(x) => Ok(Self::BeginBlock(x)), + Request::DeliverTx(x) => Ok(Self::DeliverTx(x)), + Request::EndBlock(x) => Ok(Self::EndBlock(x)), + Request::Commit => Ok(Self::Commit), + _ => Err(Error::invalid_abci_request_type()), + } + } +} + +/// The mempool category of ABCI requests. +#[derive(Clone, PartialEq, Debug)] +pub enum MempoolRequest { + #[doc = include_str!("doc/request-checktx.md")] + CheckTx(CheckTx), +} + +impl From for Request { + fn from(req: MempoolRequest) -> Self { + match req { + MempoolRequest::CheckTx(x) => Self::CheckTx(x), + } + } +} + +impl TryFrom for MempoolRequest { + type Error = Error; + fn try_from(req: Request) -> Result { + match req { + Request::CheckTx(x) => Ok(Self::CheckTx(x)), + _ => Err(Error::invalid_abci_request_type()), + } + } +} + +/// The info category of ABCI requests. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum InfoRequest { + #[doc = include_str!("doc/request-info.md")] + Info(Info), + #[doc = include_str!("doc/request-query.md")] + Query(Query), + #[doc = include_str!("doc/request-echo.md")] + Echo(Echo), +} + +impl From for Request { + fn from(req: InfoRequest) -> Self { + match req { + InfoRequest::Info(x) => Self::Info(x), + InfoRequest::Query(x) => Self::Query(x), + InfoRequest::Echo(x) => Self::Echo(x), + } + } +} + +impl TryFrom for InfoRequest { + type Error = Error; + fn try_from(req: Request) -> Result { + match req { + Request::Info(x) => Ok(Self::Info(x)), + Request::Query(x) => Ok(Self::Query(x)), + Request::Echo(x) => Ok(Self::Echo(x)), + _ => Err(Error::invalid_abci_request_type()), + } + } +} + +/// The snapshot category of ABCI requests. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum SnapshotRequest { + #[doc = include_str!("doc/request-listsnapshots.md")] + ListSnapshots, + #[doc = include_str!("doc/request-offersnapshot.md")] + OfferSnapshot(OfferSnapshot), + #[doc = include_str!("doc/request-loadsnapshotchunk.md")] + LoadSnapshotChunk(LoadSnapshotChunk), + #[doc = include_str!("doc/request-applysnapshotchunk.md")] + ApplySnapshotChunk(ApplySnapshotChunk), +} + +impl From for Request { + fn from(req: SnapshotRequest) -> Self { + match req { + SnapshotRequest::ListSnapshots => Self::ListSnapshots, + SnapshotRequest::OfferSnapshot(x) => Self::OfferSnapshot(x), + SnapshotRequest::LoadSnapshotChunk(x) => Self::LoadSnapshotChunk(x), + SnapshotRequest::ApplySnapshotChunk(x) => Self::ApplySnapshotChunk(x), + } + } +} + +impl TryFrom for SnapshotRequest { + type Error = Error; + fn try_from(req: Request) -> Result { + match req { + Request::ListSnapshots => Ok(Self::ListSnapshots), + Request::OfferSnapshot(x) => Ok(Self::OfferSnapshot(x)), + Request::LoadSnapshotChunk(x) => Ok(Self::LoadSnapshotChunk(x)), + Request::ApplySnapshotChunk(x) => Ok(Self::ApplySnapshotChunk(x)), + _ => Err(Error::invalid_abci_request_type()), + } + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::Request { + fn from(request: Request) -> pb::Request { + use pb::request::Value; + let value = match request { + Request::Echo(x) => Some(Value::Echo(x.into())), + Request::Flush => Some(Value::Flush(Default::default())), + Request::Info(x) => Some(Value::Info(x.into())), + Request::InitChain(x) => Some(Value::InitChain(x.into())), + Request::Query(x) => Some(Value::Query(x.into())), + Request::BeginBlock(x) => Some(Value::BeginBlock(x.into())), + Request::CheckTx(x) => Some(Value::CheckTx(x.into())), + Request::DeliverTx(x) => Some(Value::DeliverTx(x.into())), + Request::EndBlock(x) => Some(Value::EndBlock(x.into())), + Request::Commit => Some(Value::Commit(Default::default())), + Request::ListSnapshots => Some(Value::ListSnapshots(Default::default())), + Request::OfferSnapshot(x) => Some(Value::OfferSnapshot(x.into())), + Request::LoadSnapshotChunk(x) => Some(Value::LoadSnapshotChunk(x.into())), + Request::ApplySnapshotChunk(x) => Some(Value::ApplySnapshotChunk(x.into())), + }; + pb::Request { value } + } +} + +impl TryFrom for Request { + type Error = Error; + + fn try_from(request: pb::Request) -> Result { + use pb::request::Value; + match request.value { + Some(Value::Echo(x)) => Ok(Request::Echo(x.try_into()?)), + Some(Value::Flush(pb::RequestFlush {})) => Ok(Request::Flush), + Some(Value::Info(x)) => Ok(Request::Info(x.try_into()?)), + Some(Value::InitChain(x)) => Ok(Request::InitChain(x.try_into()?)), + Some(Value::Query(x)) => Ok(Request::Query(x.try_into()?)), + Some(Value::BeginBlock(x)) => Ok(Request::BeginBlock(x.try_into()?)), + Some(Value::CheckTx(x)) => Ok(Request::CheckTx(x.try_into()?)), + Some(Value::DeliverTx(x)) => Ok(Request::DeliverTx(x.try_into()?)), + Some(Value::EndBlock(x)) => Ok(Request::EndBlock(x.try_into()?)), + Some(Value::Commit(pb::RequestCommit {})) => Ok(Request::Commit), + Some(Value::ListSnapshots(pb::RequestListSnapshots {})) => Ok(Request::ListSnapshots), + Some(Value::OfferSnapshot(x)) => Ok(Request::OfferSnapshot(x.try_into()?)), + Some(Value::LoadSnapshotChunk(x)) => Ok(Request::LoadSnapshotChunk(x.try_into()?)), + Some(Value::ApplySnapshotChunk(x)) => Ok(Request::ApplySnapshotChunk(x.try_into()?)), + None => Err(crate::Error::missing_data()), + } + } +} + +impl Protobuf for Request {} diff --git a/tendermint/src/abci/request/apply_snapshot_chunk.rs b/tendermint/src/abci/request/apply_snapshot_chunk.rs new file mode 100644 index 000000000..aca95daf2 --- /dev/null +++ b/tendermint/src/abci/request/apply_snapshot_chunk.rs @@ -0,0 +1,70 @@ +use crate::prelude::*; + +use bytes::Bytes; + +// bring into scope for doc links +#[allow(unused)] +use super::{super::types::Snapshot, Info, LoadSnapshotChunk}; + +/// Applies a snapshot chunk. +/// +/// The application can choose to refetch chunks and/or ban P2P peers as +/// appropriate. Tendermint will not do this unless instructed by the +/// application. +/// +/// The application may want to verify each chunk, e.g., by attaching chunk +/// hashes in [`Snapshot::metadata`] and/or incrementally verifying contents +/// against `app_hash`. +/// +/// When all chunks have been accepted, Tendermint will make an ABCI [`Info`] +/// request to verify that `last_block_app_hash` and `last_block_height` match +/// the expected values, and record the `app_version` in the node state. It then +/// switches to fast sync or consensus and joins the network. +/// +/// If Tendermint is unable to retrieve the next chunk after some time (e.g., +/// because no suitable peers are available), it will reject the snapshot and try +/// a different one via `OfferSnapshot`. The application should be prepared to +/// reset and accept it or abort as appropriate. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#applysnapshotchunk) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct ApplySnapshotChunk { + /// The chunk index, starting from `0`. Tendermint applies chunks sequentially. + pub index: u32, + /// The binary chunk contents, as returned by [`LoadSnapshotChunk`]. + pub chunk: Bytes, + /// The P2P ID of the node who sent this chunk. + pub sender: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestApplySnapshotChunk { + fn from(apply_snapshot_chunk: ApplySnapshotChunk) -> Self { + Self { + index: apply_snapshot_chunk.index, + chunk: apply_snapshot_chunk.chunk, + sender: apply_snapshot_chunk.sender, + } + } +} + +impl TryFrom for ApplySnapshotChunk { + type Error = crate::Error; + + fn try_from(apply_snapshot_chunk: pb::RequestApplySnapshotChunk) -> Result { + Ok(Self { + index: apply_snapshot_chunk.index, + chunk: apply_snapshot_chunk.chunk, + sender: apply_snapshot_chunk.sender, + }) + } +} + +impl Protobuf for ApplySnapshotChunk {} diff --git a/tendermint/src/abci/request/begin_block.rs b/tendermint/src/abci/request/begin_block.rs new file mode 100644 index 000000000..bcfe29a19 --- /dev/null +++ b/tendermint/src/abci/request/begin_block.rs @@ -0,0 +1,78 @@ +use crate::prelude::*; + +use bytes::Bytes; + +use crate::block; + +use super::super::types::{Evidence, LastCommitInfo}; +use crate::Error; + +// bring into scope for doc links +#[allow(unused)] +use super::DeliverTx; + +#[doc = include_str!("../doc/request-beginblock.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct BeginBlock { + /// The block's hash. + /// + /// This can be derived from the block header. + pub hash: Bytes, + /// The block header. + pub header: block::Header, + /// Information about the last commit. + /// + /// This includes the round, the list of validators, and which validators + /// signed the last block. + pub last_commit_info: LastCommitInfo, + /// Evidence of validator misbehavior. + pub byzantine_validators: Vec, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestBeginBlock { + fn from(begin_block: BeginBlock) -> Self { + Self { + hash: begin_block.hash, + header: Some(begin_block.header.into()), + last_commit_info: Some(begin_block.last_commit_info.into()), + byzantine_validators: begin_block + .byzantine_validators + .into_iter() + .map(Into::into) + .collect(), + } + } +} + +impl TryFrom for BeginBlock { + type Error = Error; + + fn try_from(begin_block: pb::RequestBeginBlock) -> Result { + Ok(Self { + hash: begin_block.hash, + header: begin_block + .header + .ok_or_else(Error::missing_header)? + .try_into()?, + last_commit_info: begin_block + .last_commit_info + .ok_or_else(Error::missing_last_commit_info)? + .try_into()?, + byzantine_validators: begin_block + .byzantine_validators + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for BeginBlock {} diff --git a/tendermint/src/abci/request/check_tx.rs b/tendermint/src/abci/request/check_tx.rs new file mode 100644 index 000000000..0feb0836b --- /dev/null +++ b/tendermint/src/abci/request/check_tx.rs @@ -0,0 +1,71 @@ +use crate::prelude::*; + +use bytes::Bytes; + +#[doc = include_str!("../doc/request-checktx.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct CheckTx { + /// The transaction bytes. + pub tx: Bytes, + /// The kind of check to perform. + /// + /// Note: this field is called `type` in the protobuf, but we call it `kind` + /// to avoid the Rust keyword. + pub kind: CheckTxKind, +} + +/// The possible kinds of [`CheckTx`] checks. +/// +/// Note: the +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#checktx) +/// calls this `CheckTxType`, but we follow the Rust convention and name it `CheckTxKind` +/// to avoid confusion with Rust types. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[repr(i32)] +pub enum CheckTxKind { + /// A full check is required (the default). + New = 0, + /// Indicates that the mempool is initiating a recheck of the transaction. + Recheck = 1, +} + +impl Default for CheckTxKind { + fn default() -> Self { + CheckTxKind::New + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestCheckTx { + fn from(check_tx: CheckTx) -> Self { + Self { + tx: check_tx.tx, + r#type: check_tx.kind as i32, + } + } +} + +impl TryFrom for CheckTx { + type Error = crate::Error; + + fn try_from(check_tx: pb::RequestCheckTx) -> Result { + let kind = match check_tx.r#type { + 0 => CheckTxKind::New, + 1 => CheckTxKind::Recheck, + _ => return Err(crate::Error::unsupported_check_tx_type()), + }; + Ok(Self { + tx: check_tx.tx, + kind, + }) + } +} + +impl Protobuf for CheckTx {} diff --git a/tendermint/src/abci/request/deliver_tx.rs b/tendermint/src/abci/request/deliver_tx.rs new file mode 100644 index 000000000..456e45733 --- /dev/null +++ b/tendermint/src/abci/request/deliver_tx.rs @@ -0,0 +1,34 @@ +use crate::prelude::*; + +use bytes::Bytes; + +#[doc = include_str!("../doc/request-delivertx.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct DeliverTx { + /// The bytes of the transaction to execute. + pub tx: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestDeliverTx { + fn from(deliver_tx: DeliverTx) -> Self { + Self { tx: deliver_tx.tx } + } +} + +impl TryFrom for DeliverTx { + type Error = crate::Error; + + fn try_from(deliver_tx: pb::RequestDeliverTx) -> Result { + Ok(Self { tx: deliver_tx.tx }) + } +} + +impl Protobuf for DeliverTx {} diff --git a/tendermint/src/abci/request/echo.rs b/tendermint/src/abci/request/echo.rs new file mode 100644 index 000000000..7da97b61a --- /dev/null +++ b/tendermint/src/abci/request/echo.rs @@ -0,0 +1,36 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/request-echo.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Echo { + /// The message to send back. + pub message: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestEcho { + fn from(echo: Echo) -> Self { + Self { + message: echo.message, + } + } +} + +impl TryFrom for Echo { + type Error = crate::Error; + + fn try_from(echo: pb::RequestEcho) -> Result { + Ok(Self { + message: echo.message, + }) + } +} + +impl Protobuf for Echo {} diff --git a/tendermint/src/abci/request/end_block.rs b/tendermint/src/abci/request/end_block.rs new file mode 100644 index 000000000..3d72341ae --- /dev/null +++ b/tendermint/src/abci/request/end_block.rs @@ -0,0 +1,36 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/request-endblock.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct EndBlock { + /// The height of the block just executed. + pub height: i64, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestEndBlock { + fn from(end_block: EndBlock) -> Self { + Self { + height: end_block.height, + } + } +} + +impl TryFrom for EndBlock { + type Error = crate::Error; + + fn try_from(end_block: pb::RequestEndBlock) -> Result { + Ok(Self { + height: end_block.height, + }) + } +} + +impl Protobuf for EndBlock {} diff --git a/tendermint/src/abci/request/info.rs b/tendermint/src/abci/request/info.rs new file mode 100644 index 000000000..a110337fd --- /dev/null +++ b/tendermint/src/abci/request/info.rs @@ -0,0 +1,48 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/request-info.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Info { + /// The Tendermint software semantic version. + pub version: String, + /// The Tendermint block protocol version. + pub block_version: u64, + /// The Tendermint p2p protocol version. + pub p2p_version: u64, + /// The Tendermint ABCI semantic version. + pub abci_version: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestInfo { + fn from(info: Info) -> Self { + Self { + version: info.version, + block_version: info.block_version, + p2p_version: info.p2p_version, + abci_version: info.abci_version, + } + } +} + +impl TryFrom for Info { + type Error = crate::Error; + + fn try_from(info: pb::RequestInfo) -> Result { + Ok(Self { + version: info.version, + block_version: info.block_version, + p2p_version: info.p2p_version, + abci_version: info.abci_version, + }) + } +} + +impl Protobuf for Info {} diff --git a/tendermint/src/abci/request/init_chain.rs b/tendermint/src/abci/request/init_chain.rs new file mode 100644 index 000000000..bf2a697b5 --- /dev/null +++ b/tendermint/src/abci/request/init_chain.rs @@ -0,0 +1,74 @@ +use bytes::Bytes; +use chrono::{DateTime, Utc}; + +use crate::{block, consensus, prelude::*}; + +use super::super::types::ValidatorUpdate; + +/// Called on genesis to initialize chain state. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#initchain) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct InitChain { + /// The genesis time. + pub time: DateTime, + /// The ID of the blockchain. + pub chain_id: String, + /// Initial consensus-critical parameters. + pub consensus_params: consensus::Params, + /// Initial genesis validators, sorted by voting power. + pub validators: Vec, + /// Serialized JSON bytes containing the initial application state. + pub app_state_bytes: Bytes, + /// Height of the initial block (typically `1`). + pub initial_height: block::Height, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use crate::Error; +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestInitChain { + fn from(init_chain: InitChain) -> Self { + Self { + time: Some(init_chain.time.into()), + chain_id: init_chain.chain_id, + consensus_params: Some(init_chain.consensus_params.into()), + validators: init_chain.validators.into_iter().map(Into::into).collect(), + app_state_bytes: init_chain.app_state_bytes, + initial_height: init_chain.initial_height.into(), + } + } +} + +impl TryFrom for InitChain { + type Error = Error; + + fn try_from(init_chain: pb::RequestInitChain) -> Result { + Ok(Self { + time: init_chain + .time + .ok_or_else(Error::missing_genesis_time)? + .try_into()?, + chain_id: init_chain.chain_id, + consensus_params: init_chain + .consensus_params + .ok_or_else(Error::missing_consensus_params)? + .try_into()?, + validators: init_chain + .validators + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + app_state_bytes: init_chain.app_state_bytes, + initial_height: init_chain.initial_height.try_into()?, + }) + } +} + +impl Protobuf for InitChain {} diff --git a/tendermint/src/abci/request/load_snapshot_chunk.rs b/tendermint/src/abci/request/load_snapshot_chunk.rs new file mode 100644 index 000000000..d88885cd0 --- /dev/null +++ b/tendermint/src/abci/request/load_snapshot_chunk.rs @@ -0,0 +1,44 @@ +use crate::{block, prelude::*}; + +#[doc = include_str!("../doc/request-loadsnapshotchunk.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct LoadSnapshotChunk { + /// The height of the snapshot the chunks belong to. + pub height: block::Height, + /// An application-specific identifier of the format of the snapshot chunk. + pub format: u32, + /// The chunk index, starting from `0` for the initial chunk. + pub chunk: u32, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestLoadSnapshotChunk { + fn from(load_snapshot_chunk: LoadSnapshotChunk) -> Self { + Self { + height: load_snapshot_chunk.height.into(), + format: load_snapshot_chunk.format, + chunk: load_snapshot_chunk.chunk, + } + } +} + +impl TryFrom for LoadSnapshotChunk { + type Error = crate::Error; + + fn try_from(load_snapshot_chunk: pb::RequestLoadSnapshotChunk) -> Result { + Ok(Self { + height: load_snapshot_chunk.height.try_into()?, + format: load_snapshot_chunk.format, + chunk: load_snapshot_chunk.chunk, + }) + } +} + +impl Protobuf for LoadSnapshotChunk {} diff --git a/tendermint/src/abci/request/offer_snapshot.rs b/tendermint/src/abci/request/offer_snapshot.rs new file mode 100644 index 000000000..516dc2147 --- /dev/null +++ b/tendermint/src/abci/request/offer_snapshot.rs @@ -0,0 +1,52 @@ +use crate::prelude::*; + +use bytes::Bytes; + +use super::super::types::Snapshot; + +// bring into scope for doc links +#[allow(unused)] +use super::ApplySnapshotChunk; + +#[doc = include_str!("../doc/request-offersnapshot.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct OfferSnapshot { + /// The snapshot offered for restoration. + pub snapshot: Snapshot, + /// The light client verified app hash for this height. + // XXX(hdevalence): replace with apphash + pub app_hash: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestOfferSnapshot { + fn from(offer_snapshot: OfferSnapshot) -> Self { + Self { + snapshot: Some(offer_snapshot.snapshot.into()), + app_hash: offer_snapshot.app_hash, + } + } +} + +impl TryFrom for OfferSnapshot { + type Error = crate::Error; + + fn try_from(offer_snapshot: pb::RequestOfferSnapshot) -> Result { + Ok(Self { + snapshot: offer_snapshot + .snapshot + .ok_or_else(crate::Error::missing_data)? + .try_into()?, + app_hash: offer_snapshot.app_hash, + }) + } +} + +impl Protobuf for OfferSnapshot {} diff --git a/tendermint/src/abci/request/query.rs b/tendermint/src/abci/request/query.rs new file mode 100644 index 000000000..1530f69d2 --- /dev/null +++ b/tendermint/src/abci/request/query.rs @@ -0,0 +1,63 @@ +use bytes::Bytes; + +use crate::{block, prelude::*}; + +#[doc = include_str!("../doc/request-query.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Query { + /// Raw query bytes. + /// + /// Can be used with or in lieu of `path`. + pub data: Bytes, + /// Path of the request, like an HTTP `GET` path. + /// + /// Can be used with or in lieu of `data`. + /// + /// Applications MUST interpret `/store` as a query by key on the underlying + /// store. The key SHOULD be specified in the Data field. Applications SHOULD + /// allow queries over specific types like `/accounts/...` or `/votes/...`. + pub path: String, + /// The block height for which the query should be executed. + /// + /// The default `0` returns data for the latest committed block. Note that + /// this is the height of the block containing the application's Merkle root + /// hash, which represents the state as it was after committing the block at + /// `height - 1`. + pub height: block::Height, + /// Whether to return a Merkle proof with the response, if possible. + pub prove: bool, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestQuery { + fn from(query: Query) -> Self { + Self { + data: query.data, + path: query.path, + height: query.height.into(), + prove: query.prove, + } + } +} + +impl TryFrom for Query { + type Error = crate::Error; + + fn try_from(query: pb::RequestQuery) -> Result { + Ok(Self { + data: query.data, + path: query.path, + height: query.height.try_into()?, + prove: query.prove, + }) + } +} + +impl Protobuf for Query {} diff --git a/tendermint/src/abci/response.rs b/tendermint/src/abci/response.rs new file mode 100644 index 000000000..eed823f9b --- /dev/null +++ b/tendermint/src/abci/response.rs @@ -0,0 +1,289 @@ +//! ABCI responses and response data. +//! +//! The [`Response`] enum records all possible ABCI responses. Responses that +//! contain data are modeled as a separate struct, to avoid duplication of field +//! definitions. + +use crate::prelude::*; + +// IMPORTANT NOTE ON DOCUMENTATION: +// +// The documentation for each request type is adapted from the ABCI Methods and +// Types spec document. However, the same logical request may appear three +// times, as a struct with the request data, as a Request variant, and as a +// CategoryRequest variant. +// +// To avoid duplication, this documentation is stored in the doc/ folder in +// individual .md files, which are pasted onto the relevant items using #[doc = +// include_str!(...)]. +// +// This is also why certain submodules have #[allow(unused)] imports to bring +// items into scope for doc links, rather than changing the doc links -- it +// allows the doc comments to be copied without editing. + +use core::convert::{TryFrom, TryInto}; + +use crate::Error; +// bring into scope for doc links +#[allow(unused)] +use super::types::Snapshot; + +mod apply_snapshot_chunk; +mod begin_block; +mod check_tx; +mod commit; +mod deliver_tx; +mod echo; +mod end_block; +mod exception; +mod info; +mod init_chain; +mod list_snapshots; +mod load_snapshot_chunk; +mod offer_snapshot; +mod query; + +pub use apply_snapshot_chunk::{ApplySnapshotChunk, ApplySnapshotChunkResult}; +pub use begin_block::BeginBlock; +pub use check_tx::CheckTx; +pub use commit::Commit; +pub use deliver_tx::DeliverTx; +pub use echo::Echo; +pub use end_block::EndBlock; +pub use exception::Exception; +pub use info::Info; +pub use init_chain::InitChain; +pub use list_snapshots::ListSnapshots; +pub use load_snapshot_chunk::LoadSnapshotChunk; +pub use offer_snapshot::OfferSnapshot; +pub use query::Query; + +/// All possible ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum Response { + #[doc = include_str!("doc/response-exception.md")] + Exception(Exception), + #[doc = include_str!("doc/response-echo.md")] + Echo(Echo), + #[doc = include_str!("doc/response-flush.md")] + Flush, + #[doc = include_str!("doc/response-info.md")] + Info(Info), + #[doc = include_str!("doc/response-initchain.md")] + InitChain(InitChain), + #[doc = include_str!("doc/response-query.md")] + Query(Query), + #[doc = include_str!("doc/response-beginblock.md")] + BeginBlock(BeginBlock), + #[doc = include_str!("doc/response-checktx.md")] + CheckTx(CheckTx), + #[doc = include_str!("doc/response-delivertx.md")] + DeliverTx(DeliverTx), + #[doc = include_str!("doc/response-endblock.md")] + EndBlock(EndBlock), + #[doc = include_str!("doc/response-commit.md")] + Commit(Commit), + #[doc = include_str!("doc/response-listsnapshots.md")] + ListSnapshots(ListSnapshots), + #[doc = include_str!("doc/response-offersnapshot.md")] + OfferSnapshot(OfferSnapshot), + #[doc = include_str!("doc/response-loadsnapshotchunk.md")] + LoadSnapshotChunk(LoadSnapshotChunk), + #[doc = include_str!("doc/response-applysnapshotchunk.md")] + ApplySnapshotChunk(ApplySnapshotChunk), +} + +/// The consensus category of ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum ConsensusResponse { + #[doc = include_str!("doc/response-initchain.md")] + InitChain(InitChain), + #[doc = include_str!("doc/response-beginblock.md")] + BeginBlock(BeginBlock), + #[doc = include_str!("doc/response-delivertx.md")] + DeliverTx(DeliverTx), + #[doc = include_str!("doc/response-endblock.md")] + EndBlock(EndBlock), + #[doc = include_str!("doc/response-commit.md")] + Commit(Commit), +} + +impl From for Response { + fn from(req: ConsensusResponse) -> Self { + match req { + ConsensusResponse::InitChain(x) => Self::InitChain(x), + ConsensusResponse::BeginBlock(x) => Self::BeginBlock(x), + ConsensusResponse::DeliverTx(x) => Self::DeliverTx(x), + ConsensusResponse::EndBlock(x) => Self::EndBlock(x), + ConsensusResponse::Commit(x) => Self::Commit(x), + } + } +} + +impl TryFrom for ConsensusResponse { + type Error = Error; + fn try_from(req: Response) -> Result { + match req { + Response::InitChain(x) => Ok(Self::InitChain(x)), + Response::BeginBlock(x) => Ok(Self::BeginBlock(x)), + Response::DeliverTx(x) => Ok(Self::DeliverTx(x)), + Response::EndBlock(x) => Ok(Self::EndBlock(x)), + Response::Commit(x) => Ok(Self::Commit(x)), + _ => Err(Error::invalid_abci_response_type()), + } + } +} + +/// The mempool category of ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum MempoolResponse { + #[doc = include_str!("doc/response-checktx.md")] + CheckTx(CheckTx), +} + +impl From for Response { + fn from(req: MempoolResponse) -> Self { + match req { + MempoolResponse::CheckTx(x) => Self::CheckTx(x), + } + } +} + +impl TryFrom for MempoolResponse { + type Error = Error; + fn try_from(req: Response) -> Result { + match req { + Response::CheckTx(x) => Ok(Self::CheckTx(x)), + _ => Err(Error::invalid_abci_response_type()), + } + } +} + +/// The info category of ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum InfoResponse { + #[doc = include_str!("doc/response-echo.md")] + Echo(Echo), + #[doc = include_str!("doc/response-info.md")] + Info(Info), + #[doc = include_str!("doc/response-query.md")] + Query(Query), +} + +impl From for Response { + fn from(req: InfoResponse) -> Self { + match req { + InfoResponse::Echo(x) => Self::Echo(x), + InfoResponse::Info(x) => Self::Info(x), + InfoResponse::Query(x) => Self::Query(x), + } + } +} + +impl TryFrom for InfoResponse { + type Error = Error; + fn try_from(req: Response) -> Result { + match req { + Response::Echo(x) => Ok(Self::Echo(x)), + Response::Info(x) => Ok(Self::Info(x)), + Response::Query(x) => Ok(Self::Query(x)), + _ => Err(Error::invalid_abci_response_type()), + } + } +} + +/// The snapshot category of ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum SnapshotResponse { + #[doc = include_str!("doc/response-listsnapshots.md")] + ListSnapshots(ListSnapshots), + #[doc = include_str!("doc/response-offersnapshot.md")] + OfferSnapshot(OfferSnapshot), + #[doc = include_str!("doc/response-loadsnapshotchunk.md")] + LoadSnapshotChunk(LoadSnapshotChunk), + #[doc = include_str!("doc/response-applysnapshotchunk.md")] + ApplySnapshotChunk(ApplySnapshotChunk), +} + +impl From for Response { + fn from(req: SnapshotResponse) -> Self { + match req { + SnapshotResponse::ListSnapshots(x) => Self::ListSnapshots(x), + SnapshotResponse::OfferSnapshot(x) => Self::OfferSnapshot(x), + SnapshotResponse::LoadSnapshotChunk(x) => Self::LoadSnapshotChunk(x), + SnapshotResponse::ApplySnapshotChunk(x) => Self::ApplySnapshotChunk(x), + } + } +} + +impl TryFrom for SnapshotResponse { + type Error = Error; + fn try_from(req: Response) -> Result { + match req { + Response::ListSnapshots(x) => Ok(Self::ListSnapshots(x)), + Response::OfferSnapshot(x) => Ok(Self::OfferSnapshot(x)), + Response::LoadSnapshotChunk(x) => Ok(Self::LoadSnapshotChunk(x)), + Response::ApplySnapshotChunk(x) => Ok(Self::ApplySnapshotChunk(x)), + _ => Err(Error::invalid_abci_response_type()), + } + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::Response { + fn from(response: Response) -> pb::Response { + use pb::response::Value; + let value = match response { + Response::Exception(x) => Some(Value::Exception(x.into())), + Response::Echo(x) => Some(Value::Echo(x.into())), + Response::Flush => Some(Value::Flush(Default::default())), + Response::Info(x) => Some(Value::Info(x.into())), + Response::InitChain(x) => Some(Value::InitChain(x.into())), + Response::Query(x) => Some(Value::Query(x.into())), + Response::BeginBlock(x) => Some(Value::BeginBlock(x.into())), + Response::CheckTx(x) => Some(Value::CheckTx(x.into())), + Response::DeliverTx(x) => Some(Value::DeliverTx(x.into())), + Response::EndBlock(x) => Some(Value::EndBlock(x.into())), + Response::Commit(x) => Some(Value::Commit(x.into())), + Response::ListSnapshots(x) => Some(Value::ListSnapshots(x.into())), + Response::OfferSnapshot(x) => Some(Value::OfferSnapshot(x.into())), + Response::LoadSnapshotChunk(x) => Some(Value::LoadSnapshotChunk(x.into())), + Response::ApplySnapshotChunk(x) => Some(Value::ApplySnapshotChunk(x.into())), + }; + pb::Response { value } + } +} + +impl TryFrom for Response { + type Error = Error; + + fn try_from(response: pb::Response) -> Result { + use pb::response::Value; + match response.value { + Some(Value::Exception(x)) => Ok(Response::Exception(x.try_into()?)), + Some(Value::Echo(x)) => Ok(Response::Echo(x.try_into()?)), + Some(Value::Flush(_)) => Ok(Response::Flush), + Some(Value::Info(x)) => Ok(Response::Info(x.try_into()?)), + Some(Value::InitChain(x)) => Ok(Response::InitChain(x.try_into()?)), + Some(Value::Query(x)) => Ok(Response::Query(x.try_into()?)), + Some(Value::BeginBlock(x)) => Ok(Response::BeginBlock(x.try_into()?)), + Some(Value::CheckTx(x)) => Ok(Response::CheckTx(x.try_into()?)), + Some(Value::DeliverTx(x)) => Ok(Response::DeliverTx(x.try_into()?)), + Some(Value::EndBlock(x)) => Ok(Response::EndBlock(x.try_into()?)), + Some(Value::Commit(x)) => Ok(Response::Commit(x.try_into()?)), + Some(Value::ListSnapshots(x)) => Ok(Response::ListSnapshots(x.try_into()?)), + Some(Value::OfferSnapshot(x)) => Ok(Response::OfferSnapshot(x.try_into()?)), + Some(Value::LoadSnapshotChunk(x)) => Ok(Response::LoadSnapshotChunk(x.try_into()?)), + Some(Value::ApplySnapshotChunk(x)) => Ok(Response::ApplySnapshotChunk(x.try_into()?)), + None => Err(crate::Error::missing_data()), + } + } +} + +impl Protobuf for Response {} diff --git a/tendermint/src/abci/response/apply_snapshot_chunk.rs b/tendermint/src/abci/response/apply_snapshot_chunk.rs new file mode 100644 index 000000000..cb538c091 --- /dev/null +++ b/tendermint/src/abci/response/apply_snapshot_chunk.rs @@ -0,0 +1,88 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/response-applysnapshotchunk.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct ApplySnapshotChunk { + /// The result of applying the snapshot chunk. + pub result: ApplySnapshotChunkResult, + /// Refetch and reapply the given chunks, regardless of `result`. + /// + /// Only the listed chunks will be refetched, and reapplied in sequential + /// order. + pub refetch_chunks: Vec, + /// Reject the given P2P senders, regardless of `result`. + /// + /// Any chunks already applied will not be refetched unless explicitly + /// requested, but queued chunks from these senders will be discarded, and + /// new chunks or other snapshots rejected. + pub reject_senders: Vec, +} + +/// The result of applying a snapshot chunk. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[repr(i32)] +pub enum ApplySnapshotChunkResult { + /// Unknown result, abort all snapshot restoration. + Unknown = 0, + /// The chunk was accepted. + Accept = 1, + /// Abort snapshot restoration, and don't try any other snapshots. + Abort = 2, + /// Reapply this chunk, combine with + /// [`refetch_chunks`](ApplySnapshotChunk::refetch_chunks) and + /// [`reject_senders`](ApplySnapshotChunk::reject_senders) as appropriate. + Retry = 3, + /// Restart this snapshot from + /// [`OfferSnapshot`](super::super::request::OfferSnapshot), + /// reusing chunks unless instructed otherwise. + RetrySnapshot = 4, + /// Reject this snapshot, try a different one. + RejectSnapshot = 5, +} + +impl Default for ApplySnapshotChunkResult { + fn default() -> Self { + Self::Unknown + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseApplySnapshotChunk { + fn from(apply_snapshot_chunk: ApplySnapshotChunk) -> Self { + Self { + result: apply_snapshot_chunk.result as i32, + refetch_chunks: apply_snapshot_chunk.refetch_chunks, + reject_senders: apply_snapshot_chunk.reject_senders, + } + } +} + +impl TryFrom for ApplySnapshotChunk { + type Error = crate::Error; + + fn try_from(apply_snapshot_chunk: pb::ResponseApplySnapshotChunk) -> Result { + let result = match apply_snapshot_chunk.result { + 0 => ApplySnapshotChunkResult::Unknown, + 1 => ApplySnapshotChunkResult::Accept, + 2 => ApplySnapshotChunkResult::Abort, + 3 => ApplySnapshotChunkResult::Retry, + 4 => ApplySnapshotChunkResult::RetrySnapshot, + 5 => ApplySnapshotChunkResult::RejectSnapshot, + _ => return Err(crate::Error::unsupported_apply_snapshot_chunk_result()), + }; + Ok(Self { + result, + refetch_chunks: apply_snapshot_chunk.refetch_chunks, + reject_senders: apply_snapshot_chunk.reject_senders, + }) + } +} + +impl Protobuf for ApplySnapshotChunk {} diff --git a/tendermint/src/abci/response/begin_block.rs b/tendermint/src/abci/response/begin_block.rs new file mode 100644 index 000000000..2335becfb --- /dev/null +++ b/tendermint/src/abci/response/begin_block.rs @@ -0,0 +1,42 @@ +use crate::prelude::*; + +use super::super::Event; + +#[doc = include_str!("../doc/response-beginblock.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct BeginBlock { + /// Events that occurred while beginning the block. + pub events: Vec, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseBeginBlock { + fn from(begin_block: BeginBlock) -> Self { + Self { + events: begin_block.events.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for BeginBlock { + type Error = crate::Error; + + fn try_from(begin_block: pb::ResponseBeginBlock) -> Result { + Ok(Self { + events: begin_block + .events + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for BeginBlock {} diff --git a/tendermint/src/abci/response/check_tx.rs b/tendermint/src/abci/response/check_tx.rs new file mode 100644 index 000000000..500b9699e --- /dev/null +++ b/tendermint/src/abci/response/check_tx.rs @@ -0,0 +1,92 @@ +use crate::prelude::*; + +use bytes::Bytes; + +use super::super::Event; + +#[doc = include_str!("../doc/response-checktx.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct CheckTx { + /// The response code. + /// + /// Transactions where `code != 0` will be rejected; these transactions will + /// not be broadcast to other nodes or included in a proposal block. + /// Tendermint attributes no other value to the response code. + pub code: u32, + /// Result bytes, if any. + pub data: Bytes, + /// The output of the application's logger. + /// + /// **May be non-deterministic**. + pub log: String, + /// Additional information. + /// + /// **May be non-deterministic**. + pub info: String, + /// Amount of gas requested for the transaction. + pub gas_wanted: i64, + /// Amount of gas consumed by the transaction. + pub gas_used: i64, + /// Events that occurred while checking the transaction. + pub events: Vec, + /// The namespace for the `code`. + pub codespace: String, + /// The transaction's sender (e.g. the signer). + pub sender: String, + /// The transaction's priority (for mempool ordering). + pub priority: i64, + /* mempool_error is contained in the proto, but skipped here: + * > mempool_error is set by Tendermint. + * > ABCI applictions creating a ResponseCheckTX should not set mempool_error. */ +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseCheckTx { + fn from(check_tx: CheckTx) -> Self { + Self { + code: check_tx.code, + data: check_tx.data, + log: check_tx.log, + info: check_tx.info, + gas_wanted: check_tx.gas_wanted, + gas_used: check_tx.gas_used, + events: check_tx.events.into_iter().map(Into::into).collect(), + codespace: check_tx.codespace, + sender: check_tx.sender, + priority: check_tx.priority, + mempool_error: String::default(), + } + } +} + +impl TryFrom for CheckTx { + type Error = crate::Error; + + fn try_from(check_tx: pb::ResponseCheckTx) -> Result { + Ok(Self { + code: check_tx.code, + data: check_tx.data, + log: check_tx.log, + info: check_tx.info, + gas_wanted: check_tx.gas_wanted, + gas_used: check_tx.gas_used, + events: check_tx + .events + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + codespace: check_tx.codespace, + sender: check_tx.sender, + priority: check_tx.priority, + }) + } +} + +impl Protobuf for CheckTx {} diff --git a/tendermint/src/abci/response/commit.rs b/tendermint/src/abci/response/commit.rs new file mode 100644 index 000000000..9cded2e26 --- /dev/null +++ b/tendermint/src/abci/response/commit.rs @@ -0,0 +1,45 @@ +use crate::{block, prelude::*}; + +use bytes::Bytes; + +#[doc = include_str!("../doc/response-commit.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct Commit { + /// The Merkle root hash of the application state + /// + /// XXX(hdevalence) - is this different from an app hash? + /// XXX(hdevalence) - rename to app_hash ? + pub data: Bytes, + /// Blocks below this height may be removed. + pub retain_height: block::Height, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseCommit { + fn from(commit: Commit) -> Self { + Self { + data: commit.data, + retain_height: commit.retain_height.into(), + } + } +} + +impl TryFrom for Commit { + type Error = crate::Error; + + fn try_from(commit: pb::ResponseCommit) -> Result { + Ok(Self { + data: commit.data, + retain_height: commit.retain_height.try_into()?, + }) + } +} + +impl Protobuf for Commit {} diff --git a/tendermint/src/abci/response/deliver_tx.rs b/tendermint/src/abci/response/deliver_tx.rs new file mode 100644 index 000000000..271f82457 --- /dev/null +++ b/tendermint/src/abci/response/deliver_tx.rs @@ -0,0 +1,80 @@ +use crate::prelude::*; + +use bytes::Bytes; + +use super::super::Event; + +#[doc = include_str!("../doc/response-delivertx.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct DeliverTx { + /// The response code. + /// + /// This code should be `0` only if the transaction is fully valid. However, + /// invalid transactions included in a block will still be executed against + /// the application state. + pub code: u32, + /// Result bytes, if any. + pub data: Bytes, + /// The output of the application's logger. + /// + /// **May be non-deterministic**. + pub log: String, + /// Additional information. + /// + /// **May be non-deterministic**. + pub info: String, + /// Amount of gas requested for the transaction. + pub gas_wanted: i64, + /// Amount of gas consumed by the transaction. + pub gas_used: i64, + /// Events that occurred while executing the transaction. + pub events: Vec, + /// The namespace for the `code`. + pub codespace: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseDeliverTx { + fn from(deliver_tx: DeliverTx) -> Self { + Self { + code: deliver_tx.code, + data: deliver_tx.data, + log: deliver_tx.log, + info: deliver_tx.info, + gas_wanted: deliver_tx.gas_wanted, + gas_used: deliver_tx.gas_used, + events: deliver_tx.events.into_iter().map(Into::into).collect(), + codespace: deliver_tx.codespace, + } + } +} + +impl TryFrom for DeliverTx { + type Error = crate::Error; + + fn try_from(deliver_tx: pb::ResponseDeliverTx) -> Result { + Ok(Self { + code: deliver_tx.code, + data: deliver_tx.data, + log: deliver_tx.log, + info: deliver_tx.info, + gas_wanted: deliver_tx.gas_wanted, + gas_used: deliver_tx.gas_used, + events: deliver_tx + .events + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + codespace: deliver_tx.codespace, + }) + } +} + +impl Protobuf for DeliverTx {} diff --git a/tendermint/src/abci/response/echo.rs b/tendermint/src/abci/response/echo.rs new file mode 100644 index 000000000..03cdcb185 --- /dev/null +++ b/tendermint/src/abci/response/echo.rs @@ -0,0 +1,36 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/response-echo.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct Echo { + /// The message sent in the request. + pub message: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseEcho { + fn from(echo: Echo) -> Self { + Self { + message: echo.message, + } + } +} + +impl TryFrom for Echo { + type Error = crate::Error; + + fn try_from(echo: pb::ResponseEcho) -> Result { + Ok(Self { + message: echo.message, + }) + } +} + +impl Protobuf for Echo {} diff --git a/tendermint/src/abci/response/end_block.rs b/tendermint/src/abci/response/end_block.rs new file mode 100644 index 000000000..521a44978 --- /dev/null +++ b/tendermint/src/abci/response/end_block.rs @@ -0,0 +1,63 @@ +use crate::{consensus, prelude::*}; + +use super::super::{types::ValidatorUpdate, Event}; + +#[doc = include_str!("../doc/response-endblock.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct EndBlock { + /// Changes to the validator set, if any. + /// + /// Setting the voting power to 0 removes a validator. + pub validator_updates: Vec, + /// Changes to consensus parameters (optional). + pub consensus_param_updates: Option, + /// Events that occurred while ending the block. + pub events: Vec, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseEndBlock { + fn from(end_block: EndBlock) -> Self { + Self { + validator_updates: end_block + .validator_updates + .into_iter() + .map(Into::into) + .collect(), + consensus_param_updates: end_block.consensus_param_updates.map(Into::into), + events: end_block.events.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for EndBlock { + type Error = crate::Error; + + fn try_from(end_block: pb::ResponseEndBlock) -> Result { + Ok(Self { + validator_updates: end_block + .validator_updates + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + consensus_param_updates: end_block + .consensus_param_updates + .map(TryInto::try_into) + .transpose()?, + events: end_block + .events + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for EndBlock {} diff --git a/tendermint/src/abci/response/exception.rs b/tendermint/src/abci/response/exception.rs new file mode 100644 index 000000000..cbb607c5d --- /dev/null +++ b/tendermint/src/abci/response/exception.rs @@ -0,0 +1,36 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/response-exception.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Exception { + /// Undocumented. + pub error: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseException { + fn from(exception: Exception) -> Self { + Self { + error: exception.error, + } + } +} + +impl TryFrom for Exception { + type Error = crate::Error; + + fn try_from(exception: pb::ResponseException) -> Result { + Ok(Self { + error: exception.error, + }) + } +} + +impl Protobuf for Exception {} diff --git a/tendermint/src/abci/response/info.rs b/tendermint/src/abci/response/info.rs new file mode 100644 index 000000000..02bc6e9a1 --- /dev/null +++ b/tendermint/src/abci/response/info.rs @@ -0,0 +1,55 @@ +use crate::{block, prelude::*, Error}; + +use bytes::Bytes; + +#[doc = include_str!("../doc/response-info.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Info { + /// Some arbitrary information. + pub data: String, + /// The application software semantic version. + pub version: String, + /// The application protocol version. + pub app_version: u64, + /// The latest block for which the app has called [`Commit`](super::super::Request::Commit). + pub last_block_height: block::Height, + /// The latest result of [`Commit`](super::super::Request::Commit). + // XXX(hdevalence): fix this, should be apphash? + pub last_block_app_hash: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseInfo { + fn from(info: Info) -> Self { + Self { + data: info.data, + version: info.version, + app_version: info.app_version, + last_block_height: info.last_block_height.into(), + last_block_app_hash: info.last_block_app_hash, + } + } +} + +impl TryFrom for Info { + type Error = Error; + + fn try_from(info: pb::ResponseInfo) -> Result { + Ok(Self { + data: info.data, + version: info.version, + app_version: info.app_version, + last_block_height: info.last_block_height.try_into()?, + last_block_app_hash: info.last_block_app_hash, + }) + } +} + +impl Protobuf for Info {} diff --git a/tendermint/src/abci/response/init_chain.rs b/tendermint/src/abci/response/init_chain.rs new file mode 100644 index 000000000..6d443b71d --- /dev/null +++ b/tendermint/src/abci/response/init_chain.rs @@ -0,0 +1,62 @@ +use bytes::Bytes; + +use crate::{consensus, prelude::*}; + +use super::super::types::ValidatorUpdate; + +#[doc = include_str!("../doc/response-initchain.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct InitChain { + /// Initial consensus-critical parameters (optional). + pub consensus_params: Option, + /// Initial validator set (optional). + /// + /// If this list is empty, the initial validator set will be the one given in + /// [`request::InitChain::validators`](super::super::request::InitChain::validators). + /// + /// If this list is nonempty, it will be the initial validator set, instead + /// of the one given in + /// [`request::InitChain::validators`](super::super::request::InitChain::validators). + pub validators: Vec, + /// Initial application hash. + pub app_hash: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseInitChain { + fn from(init_chain: InitChain) -> Self { + Self { + consensus_params: init_chain.consensus_params.map(Into::into), + validators: init_chain.validators.into_iter().map(Into::into).collect(), + app_hash: init_chain.app_hash, + } + } +} + +impl TryFrom for InitChain { + type Error = crate::Error; + + fn try_from(init_chain: pb::ResponseInitChain) -> Result { + Ok(Self { + consensus_params: init_chain + .consensus_params + .map(TryInto::try_into) + .transpose()?, + validators: init_chain + .validators + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + app_hash: init_chain.app_hash, + }) + } +} + +impl Protobuf for InitChain {} diff --git a/tendermint/src/abci/response/list_snapshots.rs b/tendermint/src/abci/response/list_snapshots.rs new file mode 100644 index 000000000..ef5353f73 --- /dev/null +++ b/tendermint/src/abci/response/list_snapshots.rs @@ -0,0 +1,46 @@ +use crate::prelude::*; + +use super::super::types::Snapshot; + +#[doc = include_str!("../doc/response-listsnapshots.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct ListSnapshots { + /// A list of local state snapshots. + pub snapshots: Vec, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseListSnapshots { + fn from(list_snapshots: ListSnapshots) -> Self { + Self { + snapshots: list_snapshots + .snapshots + .into_iter() + .map(Into::into) + .collect(), + } + } +} + +impl TryFrom for ListSnapshots { + type Error = crate::Error; + + fn try_from(list_snapshots: pb::ResponseListSnapshots) -> Result { + Ok(Self { + snapshots: list_snapshots + .snapshots + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for ListSnapshots {} diff --git a/tendermint/src/abci/response/load_snapshot_chunk.rs b/tendermint/src/abci/response/load_snapshot_chunk.rs new file mode 100644 index 000000000..406a4470a --- /dev/null +++ b/tendermint/src/abci/response/load_snapshot_chunk.rs @@ -0,0 +1,41 @@ +use crate::prelude::*; + +use bytes::Bytes; + +#[doc = include_str!("../doc/response-loadsnapshotchunk.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct LoadSnapshotChunk { + /// The binary chunk contents, in an arbitrary format. + /// + /// Chunk messages cannot be larger than 16MB *including metadata*, so 10MB + /// is a good starting point. + pub chunk: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseLoadSnapshotChunk { + fn from(load_snapshot_chunk: LoadSnapshotChunk) -> Self { + Self { + chunk: load_snapshot_chunk.chunk, + } + } +} + +impl TryFrom for LoadSnapshotChunk { + type Error = crate::Error; + + fn try_from(load_snapshot_chunk: pb::ResponseLoadSnapshotChunk) -> Result { + Ok(Self { + chunk: load_snapshot_chunk.chunk, + }) + } +} + +impl Protobuf for LoadSnapshotChunk {} diff --git a/tendermint/src/abci/response/offer_snapshot.rs b/tendermint/src/abci/response/offer_snapshot.rs new file mode 100644 index 000000000..7fa64f266 --- /dev/null +++ b/tendermint/src/abci/response/offer_snapshot.rs @@ -0,0 +1,63 @@ +use crate::prelude::*; + +// bring into scope for doc links +#[allow(unused)] +use super::super::types::Snapshot; + +#[doc = include_str!("../doc/response-offersnapshot.md")] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[repr(i32)] +pub enum OfferSnapshot { + /// Unknown result, abort all snapshot restoration + Unknown = 0, + /// Snapshot accepted, apply chunks + Accept = 1, + /// Abort all snapshot restoration + Abort = 2, + /// Reject this specific snapshot, try others + Reject = 3, + /// Reject all snapshots of this format, try others + RejectFormat = 4, + /// Reject all snapshots from the sender(s), try others + RejectSender = 5, +} + +impl Default for OfferSnapshot { + fn default() -> Self { + Self::Unknown + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseOfferSnapshot { + fn from(offer_snapshot: OfferSnapshot) -> Self { + Self { + result: offer_snapshot as i32, + } + } +} + +impl TryFrom for OfferSnapshot { + type Error = crate::Error; + + fn try_from(offer_snapshot: pb::ResponseOfferSnapshot) -> Result { + Ok(match offer_snapshot.result { + 0 => OfferSnapshot::Unknown, + 1 => OfferSnapshot::Accept, + 2 => OfferSnapshot::Abort, + 3 => OfferSnapshot::Reject, + 4 => OfferSnapshot::RejectFormat, + 5 => OfferSnapshot::RejectSender, + _ => return Err(crate::Error::unsupported_offer_snapshot_chunk_result()), + }) + } +} + +impl Protobuf for OfferSnapshot {} diff --git a/tendermint/src/abci/response/query.rs b/tendermint/src/abci/response/query.rs new file mode 100644 index 000000000..fd1b9655d --- /dev/null +++ b/tendermint/src/abci/response/query.rs @@ -0,0 +1,81 @@ +use bytes::Bytes; + +/// XXX(hdevalence): hide merkle::proof and re-export its contents from merkle? +use crate::merkle::proof as merkle; +use crate::{block, prelude::*}; + +#[doc = include_str!("../doc/response-query.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct Query { + /// The response code for the query. + pub code: u32, + /// The output of the application's logger. + /// + /// **May be non-deterministic**. + pub log: String, + /// Additional information. + /// + /// **May be non-deterministic**. + pub info: String, + /// The index of the key in the tree. + pub index: i64, + /// The key of the matching data. + pub key: Bytes, + /// The value of the matching data. + pub value: Bytes, + /// Serialized proof for the value data, if requested, to be verified against + /// the app hash for the given `height`. + pub proof: Option, + /// The block height from which data was derived. + /// + /// Note that this is the height of the block containing the application's + /// Merkle root hash, which represents the state as it was after committing + /// the block at `height - 1`. + pub height: block::Height, + /// The namespace for the `code`. + pub codespace: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseQuery { + fn from(query: Query) -> Self { + Self { + code: query.code, + log: query.log, + info: query.info, + index: query.index, + key: query.key, + value: query.value, + proof_ops: query.proof.map(Into::into), + height: query.height.into(), + codespace: query.codespace, + } + } +} + +impl TryFrom for Query { + type Error = crate::Error; + + fn try_from(query: pb::ResponseQuery) -> Result { + Ok(Self { + code: query.code, + log: query.log, + info: query.info, + index: query.index, + key: query.key, + value: query.value, + proof: query.proof_ops.map(TryInto::try_into).transpose()?, + height: query.height.try_into()?, + codespace: query.codespace, + }) + } +} + +impl Protobuf for Query {} diff --git a/tendermint/src/abci/types.rs b/tendermint/src/abci/types.rs new file mode 100644 index 000000000..710342130 --- /dev/null +++ b/tendermint/src/abci/types.rs @@ -0,0 +1,310 @@ +//! ABCI-specific data types used in requests and responses. +//! +//! These types have changes from the core data structures to better accomodate +//! ABCI applications. +//! +//! [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#data-types) + +use core::convert::{TryFrom, TryInto}; + +use bytes::Bytes; +use chrono::{DateTime, Utc}; + +use crate::{block, prelude::*, vote, Error, PublicKey}; + +/// A validator address with voting power. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#validator) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Validator { + /// The validator's address (the first 20 bytes of `SHA256(public_key)`). + pub address: [u8; 20], + /// The voting power of the validator. + pub power: vote::Power, +} + +/// A change to the validator set. +/// +/// Used to inform Tendermint of changes to the validator set. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#validatorupdate) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct ValidatorUpdate { + /// The validator's public key. + pub pub_key: PublicKey, + /// The validator's voting power. + pub power: vote::Power, +} + +/// Information about a whether a validator signed the last block. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#voteinfo) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct VoteInfo { + /// Identifies the validator. + pub validator: Validator, + /// Whether or not the validator signed the last block. + pub signed_last_block: bool, +} + +/// The possible kinds of [`Evidence`]. +/// +/// Note: the +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#evidencetype-2) +/// calls this `EvidenceType`, but we follow the Rust convention and name it `EvidenceKind` +/// to avoid confusion with Rust types. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[repr(i32)] +pub enum EvidenceKind { + /// Unknown evidence type (proto default value). + Unknown = 0, + /// Evidence that the validator voted for two different blocks in the same + /// round of the same height. + DuplicateVote = 1, + /// Evidence that a validator attacked a light client. + LightClientAttack = 2, +} + +/// Evidence of validator misbehavior. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#evidence) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Evidence { + /// The kind of evidence. + /// + /// Note: this field is called `type` in the protobuf, but we call it `kind` + /// to avoid the Rust keyword. + pub kind: EvidenceKind, + /// The offending validator. + pub validator: Validator, + /// The height when the offense occurred. + pub height: block::Height, + /// The corresponding time when the offense occurred. + pub time: DateTime, + /// Total voting power of the validator set at `height`. + /// + /// This is included in case the ABCI application does not store historical + /// validators, cf. + /// [#4581](https://github.com/tendermint/tendermint/issues/4581) + pub total_voting_power: vote::Power, +} + +/// Information on the last block commit. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#lastcommitinfo) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct LastCommitInfo { + /// The commit round. + /// + /// Reflects the total number of rounds it took to come to consensus for the + /// current block. + pub round: block::Round, + /// The list of validator addresses in the last validator set, with their + /// voting power and whether or not they signed a vote. + pub votes: Vec, +} + +/// Used for state sync snapshots. +/// +/// When sent across the network, a `Snapshot` can be at most 4 MB. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#snapshot) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Snapshot { + /// The height at which the snapshot was taken + pub height: block::Height, + /// The application-specific snapshot format identifier. + /// + /// This allows applications to version their snapshot data format and make + /// backwards-incompatible changes. Tendermint does not interpret this field. + pub format: u32, + /// The number of chunks in the snapshot. Must be at least 1. + pub chunks: u32, + /// An arbitrary snapshot hash. + /// + /// This hash must be equal only for identical snapshots across nodes. + /// Tendermint does not interpret the hash, only compares it with other + /// hashes. + pub hash: Bytes, + /// Arbitrary application metadata, e.g., chunk hashes or other verification data. + pub metadata: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::Validator { + fn from(v: Validator) -> Self { + Self { + address: Bytes::copy_from_slice(&v.address[..]), + power: v.power.into(), + } + } +} + +impl TryFrom for Validator { + type Error = Error; + + fn try_from(vu: pb::Validator) -> Result { + let address = if vu.address.len() == 20 { + let mut bytes = [0u8; 20]; + bytes.copy_from_slice(&vu.address); + bytes + } else { + return Err(Error::invalid_account_id_length()); + }; + + Ok(Self { + address, + power: vu.power.try_into()?, + }) + } +} + +impl Protobuf for Validator {} + +impl From for pb::ValidatorUpdate { + fn from(vu: ValidatorUpdate) -> Self { + Self { + pub_key: Some(vu.pub_key.into()), + power: vu.power.into(), + } + } +} + +impl TryFrom for ValidatorUpdate { + type Error = Error; + + fn try_from(vu: pb::ValidatorUpdate) -> Result { + Ok(Self { + pub_key: vu + .pub_key + .ok_or_else(Error::missing_public_key)? + .try_into()?, + power: vu.power.try_into()?, + }) + } +} + +impl Protobuf for ValidatorUpdate {} + +impl From for pb::VoteInfo { + fn from(vi: VoteInfo) -> Self { + Self { + validator: Some(vi.validator.into()), + signed_last_block: vi.signed_last_block, + } + } +} + +impl TryFrom for VoteInfo { + type Error = Error; + + fn try_from(vi: pb::VoteInfo) -> Result { + Ok(Self { + validator: vi + .validator + .ok_or_else(Error::missing_validator)? + .try_into()?, + signed_last_block: vi.signed_last_block, + }) + } +} + +impl Protobuf for VoteInfo {} + +impl From for pb::Evidence { + fn from(evidence: Evidence) -> Self { + Self { + r#type: evidence.kind as i32, + validator: Some(evidence.validator.into()), + height: evidence.height.into(), + time: Some(evidence.time.into()), + total_voting_power: evidence.total_voting_power.into(), + } + } +} + +impl TryFrom for Evidence { + type Error = Error; + + fn try_from(evidence: pb::Evidence) -> Result { + let kind = match evidence.r#type { + 0 => EvidenceKind::Unknown, + 1 => EvidenceKind::DuplicateVote, + 2 => EvidenceKind::LightClientAttack, + _ => return Err(Error::invalid_evidence()), + }; + + Ok(Self { + kind, + validator: evidence + .validator + .ok_or_else(Error::missing_validator)? + .try_into()?, + height: evidence.height.try_into()?, + time: evidence.time.ok_or_else(Error::missing_timestamp)?.into(), + total_voting_power: evidence.total_voting_power.try_into()?, + }) + } +} + +impl Protobuf for Evidence {} + +impl From for pb::LastCommitInfo { + fn from(lci: LastCommitInfo) -> Self { + Self { + round: lci.round.into(), + votes: lci.votes.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for LastCommitInfo { + type Error = Error; + + fn try_from(lci: pb::LastCommitInfo) -> Result { + Ok(Self { + round: lci.round.try_into()?, + votes: lci + .votes + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for LastCommitInfo {} + +impl From for pb::Snapshot { + fn from(snapshot: Snapshot) -> Self { + Self { + height: snapshot.height.into(), + format: snapshot.format, + chunks: snapshot.chunks, + hash: snapshot.hash, + metadata: snapshot.metadata, + } + } +} + +impl TryFrom for Snapshot { + type Error = Error; + + fn try_from(snapshot: pb::Snapshot) -> Result { + Ok(Self { + height: snapshot.height.try_into()?, + format: snapshot.format, + chunks: snapshot.chunks, + hash: snapshot.hash, + metadata: snapshot.metadata, + }) + } +} + +impl Protobuf for Snapshot {} diff --git a/tendermint/src/block.rs b/tendermint/src/block.rs index d16d29944..b95b65f13 100644 --- a/tendermint/src/block.rs +++ b/tendermint/src/block.rs @@ -22,7 +22,7 @@ pub use self::{ size::Size, }; use crate::prelude::*; -use crate::{abci::transaction, error::Error, evidence}; +use crate::{error::Error, evidence}; use core::convert::{TryFrom, TryInto}; use serde::{Deserialize, Serialize}; use tendermint_proto::types::Block as RawBlock; @@ -35,18 +35,18 @@ use tendermint_proto::Protobuf; // Default serialization - all fields serialize; used by /block endpoint #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] #[non_exhaustive] +#[serde(try_from = "RawBlock", into = "RawBlock")] pub struct Block { /// Block header pub header: Header, /// Transaction data - pub data: transaction::Data, + pub data: Vec>, /// Evidence of malfeasance pub evidence: evidence::Data, /// Last commit - #[serde(with = "crate::serializers::optional")] pub last_commit: Option, } @@ -75,7 +75,7 @@ impl TryFrom for Block { //} Ok(Block { header, - data: value.data.ok_or_else(Error::missing_data)?.into(), + data: value.data.ok_or_else(Error::missing_data)?.txs, evidence: value .evidence .ok_or_else(Error::missing_evidence)? @@ -87,9 +87,10 @@ impl TryFrom for Block { impl From for RawBlock { fn from(value: Block) -> Self { + use tendermint_proto::types::Data as RawData; RawBlock { header: Some(value.header.into()), - data: Some(value.data.into()), + data: Some(RawData { txs: value.data }), evidence: Some(value.evidence.into()), last_commit: value.last_commit.map(Into::into), } @@ -100,7 +101,7 @@ impl Block { /// constructor pub fn new( header: Header, - data: transaction::Data, + data: Vec>, evidence: evidence::Data, last_commit: Option, ) -> Result { @@ -128,7 +129,7 @@ impl Block { } /// Get data - pub fn data(&self) -> &transaction::Data { + pub fn data(&self) -> &Vec> { &self.data } diff --git a/tendermint/src/block/size.rs b/tendermint/src/block/size.rs index 0781e9058..3260bfeb6 100644 --- a/tendermint/src/block/size.rs +++ b/tendermint/src/block/size.rs @@ -6,7 +6,7 @@ use tendermint_proto::Protobuf; use { crate::serializers, serde::{Deserialize, Serialize}, - tendermint_proto::abci::BlockParams as RawSize, + tendermint_proto::types::BlockParams as RawSize, }; /// Block size parameters diff --git a/tendermint/src/consensus/params.rs b/tendermint/src/consensus/params.rs index 25e2af838..fbc73a6f1 100644 --- a/tendermint/src/consensus/params.rs +++ b/tendermint/src/consensus/params.rs @@ -5,23 +5,23 @@ use crate::prelude::*; use crate::{block, evidence, public_key}; use core::convert::{TryFrom, TryInto}; use serde::{Deserialize, Serialize}; -use tendermint_proto::abci::ConsensusParams as RawParams; +use tendermint_proto::types::ConsensusParams as RawParams; use tendermint_proto::types::ValidatorParams as RawValidatorParams; use tendermint_proto::types::VersionParams as RawVersionParams; use tendermint_proto::Protobuf; -/// Tendermint consensus parameters +/// All consensus-relevant parameters that can be adjusted by the ABCI app. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#consensusparams) #[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)] pub struct Params { - /// Block size parameters + /// Parameters limiting the size of a block and time between consecutive blocks. pub block: block::Size, - - /// Evidence parameters + /// Parameters limiting the validity of evidence of byzantine behaviour. pub evidence: evidence::Params, - - /// Validator parameters + /// Parameters limiting the types of public keys validators can use. pub validator: ValidatorParams, - + /// The ABCI application version. /// Version parameters #[serde(skip)] // Todo: FIXME kvstore /genesis returns '{}' instead of '{app_version: "0"}' pub version: Option, @@ -62,10 +62,12 @@ impl From for RawParams { } } -/// Validator consensus parameters +/// ValidatorParams restrict the public key types validators can use. +/// +/// [Tendermint documentation](https://docs.tendermint.com/master/spec/core/data_structures.html#validatorparams) #[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)] pub struct ValidatorParams { - /// Allowed algorithms for validator signing + /// List of accepted public key types. pub pub_key_types: Vec, } @@ -108,10 +110,13 @@ impl From for RawValidatorParams { } /// Version Parameters +/// +/// [Tendermint documentation](https://docs.tendermint.com/master/spec/core/data_structures.html#versionparams) #[derive(Clone, Serialize, Deserialize, Debug, Eq, PartialEq, Default)] pub struct VersionParams { + /// The ABCI application version. #[serde(with = "crate::serializers::from_str")] - app_version: u64, + pub app_version: u64, } impl Protobuf for VersionParams {} diff --git a/tendermint/src/error.rs b/tendermint/src/error.rs index 85cdfd7a7..62eed778e 100644 --- a/tendermint/src/error.rs +++ b/tendermint/src/error.rs @@ -112,6 +112,27 @@ define_error! { MissingTimestamp |_| { format_args!("missing timestamp field") }, + MissingVersion + |_| { format_args!("missing version") }, + + MissingMaxAgeDuration + |_| { format_args!("missing max_age_duration") }, + + MissingPublicKey + |_| { format_args!("missing public key") }, + + MissingValidator + |_| { format_args!("missing validator") }, + + MissingLastCommitInfo + |_| { format_args!("missing last commit info") }, + + MissingGenesisTime + |_| { format_args!("missing genesis time") }, + + MissingConsensusParams + |_| { format_args!("missing consensus params") }, + InvalidTimestamp { reason: String } | e | { format_args!("invalid timestamp: {}", e.reason) }, @@ -120,9 +141,6 @@ define_error! { { reason: String } | e | { format_args!("invalid block: {}", e.reason) }, - MissingVersion - |_| { format_args!("missing version") }, - InvalidFirstHeader |_| { format_args!("last_block_id is not null on first height") }, @@ -139,6 +157,18 @@ define_error! { InvalidEvidence |_| { format_args!("invalid evidence") }, + InvalidValidatorParams + |_| { format_args!("invalid validator parameters") }, + + InvalidVersionParams + |_| { format_args!("invalid version parameters") }, + + InvalidAbciRequestType + |_| { format_args!("invalid ABCI request type") }, + + InvalidAbciResponseType + |_| { format_args!("invalid ABCI response type") }, + BlockIdFlag |_| { format_args!("invalid block id flag") }, @@ -149,26 +179,23 @@ define_error! { UnsupportedKeyType |_| { format_args!("unsupported key type" ) }, - RawVotingPowerMismatch - { raw: vote::Power, computed: vote::Power } - |e| { format_args!("mismatch between raw voting ({0:?}) and computed one ({1:?})", e.raw, e.computed) }, + UnsupportedCheckTxType + |_| { format_args!("unsupported CheckTx type" ) }, - MissingPublicKey - |_| { format_args!("missing public key") }, + UnsupportedApplySnapshotChunkResult + |_| { format_args!("unsupported ApplySnapshotChunkResult type" ) }, - InvalidValidatorParams - |_| { format_args!("invalid validator parameters") }, + UnsupportedOfferSnapshotChunkResult + |_| { format_args!("unsupported OfferSnapshotChunkResult type" ) }, - InvalidVersionParams - |_| { format_args!("invalid version parameters") }, + RawVotingPowerMismatch + { raw: vote::Power, computed: vote::Power } + |e| { format_args!("mismatch between raw voting ({0:?}) and computed one ({1:?})", e.raw, e.computed) }, NegativeMaxAgeNum [ DisplayOnly ] |_| { format_args!("negative max_age_num_blocks") }, - MissingMaxAgeDuration - |_| { format_args!("missing max_age_duration") }, - ProposerNotFound { account: account::Id } |e| { format_args!("proposer with address '{0}' no found in validator set", e.account) }, @@ -195,3 +222,9 @@ define_error! { |_| { "trust threshold too small (must be >= 1/3)" }, } } + +impl From for Error { + fn from(_never: core::convert::Infallible) -> Error { + unreachable!("Infallible can never be constructed") + } +} diff --git a/tendermint/src/evidence.rs b/tendermint/src/evidence.rs index 66ac5465f..767b7e385 100644 --- a/tendermint/src/evidence.rs +++ b/tendermint/src/evidence.rs @@ -207,19 +207,28 @@ impl AsRef<[Evidence]> for Data { } } -/// Evidence collection parameters +/// EvidenceParams determine how we handle evidence of malfeasance. +/// +/// [Tendermint documentation](https://docs.tendermint.com/master/spec/core/data_structures.html#evidenceparams) #[derive(Deserialize, Serialize, Clone, Debug, Eq, PartialEq)] // Todo: This struct is ready to be converted through tendermint_proto::types::EvidenceParams. // https://github.com/informalsystems/tendermint-rs/issues/741 pub struct Params { - /// Maximum allowed age for evidence to be collected + /// Max age of evidence, in blocks. #[serde(with = "serializers::from_str")] pub max_age_num_blocks: u64, - /// Max age duration + /// Max age of evidence, in time. + /// + /// It should correspond with an app's "unbonding period" or other similar + /// mechanism for handling [Nothing-At-Stake attacks][nas]. + /// + /// [nas]: https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed pub max_age_duration: Duration, - /// Max bytes + /// This sets the maximum size of total evidence in bytes that can be + /// committed in a single block, and should fall comfortably under the max + /// block bytes. The default is 1048576 or 1MB. #[serde(with = "serializers::from_str", default)] pub max_bytes: i64, } diff --git a/tendermint/src/hash.rs b/tendermint/src/hash.rs index 237e640d4..b00271bb9 100644 --- a/tendermint/src/hash.rs +++ b/tendermint/src/hash.rs @@ -233,7 +233,11 @@ impl AsRef<[u8]> for AppHash { impl Debug for AppHash { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "hash::AppHash({:?})", self.0) + write!( + f, + "AppHash({})", + Hex::upper_case().encode_to_string(&self.0).unwrap() + ) } } diff --git a/tendermint/src/prelude.rs b/tendermint/src/prelude.rs index 9ff42a989..3aee8bcda 100644 --- a/tendermint/src/prelude.rs +++ b/tendermint/src/prelude.rs @@ -9,3 +9,6 @@ pub use alloc::vec::Vec; pub use alloc::format; pub use alloc::vec; + +// will be included in 2021 edition. +pub use core::convert::{TryFrom, TryInto}; diff --git a/tendermint/src/serializers.rs b/tendermint/src/serializers.rs index 697ceaa1c..8a0efc8b9 100644 --- a/tendermint/src/serializers.rs +++ b/tendermint/src/serializers.rs @@ -9,6 +9,5 @@ pub use tendermint_proto::serializers::*; pub mod apphash; pub mod hash; -pub mod hash_base64; pub mod option_hash; pub mod time; diff --git a/tendermint/src/serializers/hash_base64.rs b/tendermint/src/serializers/hash_base64.rs deleted file mode 100644 index 5409ef39d..000000000 --- a/tendermint/src/serializers/hash_base64.rs +++ /dev/null @@ -1,33 +0,0 @@ -//! Encoding/decoding ABCI transaction hashes to/from base64. - -use crate::abci::transaction::{Hash, HASH_LENGTH}; -use crate::prelude::*; -use serde::{Deserialize, Deserializer, Serializer}; -use subtle_encoding::base64; - -/// Deserialize a base64-encoded string into a Hash -pub fn deserialize<'de, D>(deserializer: D) -> Result -where - D: Deserializer<'de>, -{ - let s = Option::::deserialize(deserializer)?.unwrap_or_default(); - let decoded = base64::decode(&s).map_err(serde::de::Error::custom)?; - if decoded.len() != HASH_LENGTH { - return Err(serde::de::Error::custom( - "unexpected transaction length for hash", - )); - } - let mut decoded_bytes = [0u8; HASH_LENGTH]; - decoded_bytes.copy_from_slice(decoded.as_ref()); - Ok(Hash::new(decoded_bytes)) -} - -/// Serialize from a Hash into a base64-encoded string -pub fn serialize(value: &Hash, serializer: S) -> Result -where - S: Serializer, -{ - let base64_bytes = base64::encode(value.as_bytes()); - let base64_string = String::from_utf8(base64_bytes).map_err(serde::ser::Error::custom)?; - serializer.serialize_str(&base64_string) -} diff --git a/tools/abci-test/Makefile.toml b/tools/abci-test/Makefile.toml index a33e677fd..d85e02a89 100644 --- a/tools/abci-test/Makefile.toml +++ b/tools/abci-test/Makefile.toml @@ -1,6 +1,6 @@ [env] CONTAINER_NAME = "abci-test" -DOCKER_IMAGE = "informaldev/abci-harness:0.34.0" +DOCKER_IMAGE = "informaldev/abci-harness:0.35.0" HOST_RPC_PORT = 26657 CARGO_MAKE_WAIT_MILLISECONDS = 3500 @@ -22,7 +22,16 @@ dependencies = [ "docker-stop", "docker-rm" ] [tasks.docker-up] command = "docker" -args = ["run", "--name", "${CONTAINER_NAME}", "--rm", "--publish", "26657:${HOST_RPC_PORT}", "--volume", "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/../target/debug:/abci", "--detach", "${DOCKER_IMAGE}", "--verbose" ] +args = [ + "run", + "--name", "${CONTAINER_NAME}", + "--rm", + "--publish", "26657:${HOST_RPC_PORT}", + "--volume", "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/../target/debug:/abci", + "--detach", + "${DOCKER_IMAGE}", + "--verbose", +] dependencies = ["docker-up-stop-old", "docker-up-rm-old"] [tasks.docker-up-debug] @@ -31,7 +40,7 @@ args = ["run", "--name", "${CONTAINER_NAME}", "--rm", "--publish", "26657:${HOST dependencies = ["docker-up-stop-old", "docker-up-rm-old"] [tasks.test] -args = ["run", "--all-features"] +args = ["run", "--all-features", "--", "--verbose"] [tasks.docker-stop] command = "docker" diff --git a/tools/abci-test/src/main.rs b/tools/abci-test/src/main.rs index e69cf48a3..275ef4c9c 100644 --- a/tools/abci-test/src/main.rs +++ b/tools/abci-test/src/main.rs @@ -2,8 +2,8 @@ use futures::StreamExt; use structopt::StructOpt; -use tendermint::abci::Transaction; use tendermint_config::net::Address; +use tendermint_rpc::abci::Transaction; use tendermint_rpc::event::EventData; use tendermint_rpc::query::EventType; use tendermint_rpc::{Client, SubscriptionClient, WebSocketClient}; diff --git a/tools/docker/README.md b/tools/docker/README.md index b1dfeddae..30070e31a 100644 --- a/tools/docker/README.md +++ b/tools/docker/README.md @@ -1,42 +1,56 @@ -# Docker descriptions -This folder contains `Dockerfile` configurations that are used during development and testing. +# Docker images + +This folder contains `Dockerfile` configurations that are used during +development and testing. The folders are named `-`, like `tendermint-0.34.0`. -The created images are uploaded to DockerHub, under the informaldev organization. For example: `informaldev/tendermint:0.34.0`. +The created images are uploaded to DockerHub, under the informaldev +organization. For example: `informaldev/tendermint:0.34.0`. ## tendermint -This image is used during CI testing in the tendermint-rs crate and it can be used during fixture creation with `rpc-probe`. -It tests compatibility with the Tendermint Go implementation. -It is a GitHub Actions "Services"-compatible image: a standalone image that can run on its own. It can create its own -configuration if one was not provided. This ensures that the configuration file is always compatible with the Tendermint -version built into it. + +This image is used during CI testing in the tendermint-rs crate and it can be +used during fixture creation with `rpc-probe`. It tests compatibility with the +Tendermint Go implementation. It is a GitHub Actions "Services"-compatible +image: a standalone image that can run on its own. It can create its own +configuration if one was not provided. This ensures that the configuration file +is always compatible with the Tendermint version built into it. ## gaiad -This image will be used for `rpc-probe`, to generate fixtures for CI testing from a gaiad node. -Contrary to the `tendermint` image, the configuration here is pre-created so the genesis file can be populated with -additional wallets. The corresponding private keys are also saved into a test keyring. +This image will be used for `rpc-probe`, to generate fixtures for CI testing +from a gaiad node. + +Contrary to the `tendermint` image, the configuration here is pre-created so the +genesis file can be populated with additional wallets. The corresponding private +keys are also saved into a test keyring. -All the configuration is in the `n0` folder. Two wallets are created `c0` and `c1` (the validator's key is `n0`.) -Both wallets have `uatom`, `stake` and `n0token` added. +All the configuration is in the `n0` folder. Two wallets are created `c0` and +`c1` (the validator's key is `n0`.) Both wallets have `uatom`, `stake` and +`n0token` added. -Both wallets have an initial signed transaction created for easier population of the network before testing. These transactions -will send uatom tokens from c0 -> c1 and vice versa. They are both signed as `sequence 0` in the wallet, so they can only -be executed as the first transaction of the corresponding wallet. +Both wallets have an initial signed transaction created for easier population of +the network before testing. These transactions will send uatom tokens from c0 -> +c1 and vice versa. They are both signed as `sequence 0` in the wallet, so they +can only be executed as the first transaction of the corresponding wallet. # abci-harness -This image is used during CI testing in the abci-rs crate. -It tests compatibility with the Tendermint Go implementation. -It derives from the Tendermint Docker image above, but it expects a volume attached at `/abci` that contains the ABCI -application to be tested. The name of the ABCI application is `kvstore-rs` by default. This can be changed by setting the -`ABCI_APP` environment variable. - -The image will fire up a Tendermint node (auto-creating the configuration) and then execute the ABCI application -from the attached volume. It logs the Tendermint node log into kvstore-rs.tendermint and the ABCI application log into + +This image is used during CI testing in the abci-rs crate. It tests +compatibility with the Tendermint Go implementation. It derives from the +Tendermint Docker image above, but it expects a volume attached at `/abci` that +contains the ABCI application to be tested. The name of the ABCI application is +`kvstore-rs` by default. This can be changed by setting the `ABCI_APP` +environment variable. + +The image will fire up a Tendermint node (auto-creating the configuration) and +then execute the ABCI application from the attached volume. It logs the +Tendermint node log into kvstore-rs.tendermint and the ABCI application log into kvstore-rs.log on the attached volume. -This image has both the `muslc` and `glibc` libraries installed for easy testing of dynamically linked binaries. +This image has both the `muslc` and `glibc` libraries installed for easy testing +of dynamically linked binaries. Example: ```bash diff --git a/tools/docker/abci-harness-0.35.0/.gitignore b/tools/docker/abci-harness-0.35.0/.gitignore new file mode 100644 index 000000000..0c8c39bef --- /dev/null +++ b/tools/docker/abci-harness-0.35.0/.gitignore @@ -0,0 +1 @@ +tendermint \ No newline at end of file diff --git a/tools/docker/abci-harness-0.35.0/Dockerfile b/tools/docker/abci-harness-0.35.0/Dockerfile new file mode 100644 index 000000000..68c82dc87 --- /dev/null +++ b/tools/docker/abci-harness-0.35.0/Dockerfile @@ -0,0 +1,44 @@ +FROM alpine:3.15 +LABEL maintainer="hello@informal.systems" + +ARG TM_VERSION=0.35.0 +ARG TM_ARCHIVE_HASH=c70dc4538991183905c1eef17263b713666675a995d154a75a52cf0022338724 +ARG GLIBC_VERSION=2.34-r0 +ENV TM_HOME=/tendermint + +#GLIBC for Alpine from: https://github.com/sgerrand/alpine-pkg-glibc +RUN wget https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \ + -O /etc/apk/keys/sgerrand.rsa.pub && \ + wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk \ + https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk \ + https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-i18n-${GLIBC_VERSION}.apk && \ + apk add --no-cache glibc-${GLIBC_VERSION}.apk glibc-bin-${GLIBC_VERSION}.apk glibc-i18n-${GLIBC_VERSION}.apk && \ + rm glibc-${GLIBC_VERSION}.apk glibc-bin-${GLIBC_VERSION}.apk glibc-i18n-${GLIBC_VERSION}.apk && \ + /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 && \ + apk --no-cache add jq bash file && \ + wget https://github.com/freshautomations/sconfig/releases/download/v0.1.0/sconfig_linux_amd64 \ + -O /usr/bin/sconfig && \ + chmod 755 /usr/bin/sconfig && \ + addgroup tendermint && \ + adduser -S -G tendermint tendermint -h "$TM_HOME" && \ + cd /tmp && \ + wget "https://github.com/tendermint/tendermint/releases/download/v${TM_VERSION}/tendermint_${TM_VERSION}_linux_amd64.tar.gz" \ + -O tendermint.tar.gz && \ + echo "${TM_ARCHIVE_HASH} tendermint.tar.gz" > checksum.txt && \ + sha256sum -c checksum.txt && \ + tar xf tendermint.tar.gz && \ + mv tendermint /usr/bin/tendermint && \ + rm /tmp/checksum.txt && \ + rm /tmp/tendermint.tar.gz && \ + chown -R tendermint:tendermint ${TM_HOME} && \ + mkdir -p /var/log/abci && \ + chown tendermint:tendermint /var/log/abci +USER tendermint +WORKDIR $TM_HOME + +EXPOSE 26656 26657 26658 26660 +STOPSIGNAL SIGTERM + +COPY entrypoint /usr/bin/entrypoint +ENTRYPOINT ["/usr/bin/entrypoint"] +VOLUME [ "$TM_HOME", "/abci", "/var/log/abci" ] diff --git a/tools/docker/abci-harness-0.35.0/entrypoint b/tools/docker/abci-harness-0.35.0/entrypoint new file mode 100755 index 000000000..5731479ee --- /dev/null +++ b/tools/docker/abci-harness-0.35.0/entrypoint @@ -0,0 +1,39 @@ +#!/usr/bin/env sh +set -euo pipefail + +ABCI_PATH="/abci/${ABCI_APP:-kvstore-rs}" + +if [ ! -x "${ABCI_PATH}" ]; then + echo "Could not find executable ABCI app at ${ABCI_PATH} ." + echo "Add a volume with the file and use the ABCI_APP environment variable to point to a different file." + exit 1 +else + FILE_TYPE="$(file -b "${ABCI_PATH}")" + if [ -n "${FILE_TYPE##ELF 64-bit*}" ]; then + echo "File is not an ELF 64-bit binary (${FILE_TYPE})." + echo "Build the ABCI application for Linux using Docker:" + echo "docker run -it --rm --user \"\$(id -u)\":\"\$(id -g)\" -v \"\$PWD\":/usr/src/myapp -w /usr/src/myapp rust:latest cargo build-abci" + exit 1 + fi +fi + +if [ ! -d "${TM_HOME}/config" ]; then + + echo "Running tendermint init to create configuration." + /usr/bin/tendermint init validator + + sconfig -s ${TM_HOME}/config/config.toml \ + moniker=${MONIKER:-dockernode} \ + consensus.timeout-commit=500ms \ + rpc.laddr=tcp://0.0.0.0:26657 \ + p2p.addr-book-strict=false \ + instrumentation.prometheus=true + + sconfig -s ${TM_HOME}/config/genesis.json \ + chain_id=${CHAIN_ID:-dockerchain} + +fi + +exec /usr/bin/tendermint node 2>&1 > /var/log/abci/tendermint.log & + +exec "${ABCI_PATH}" "$@" 2>&1 | tee /var/log/abci/abci-app.log diff --git a/tools/docker/tendermint-0.35.0/.gitignore b/tools/docker/tendermint-0.35.0/.gitignore new file mode 100644 index 000000000..9059c6848 --- /dev/null +++ b/tools/docker/tendermint-0.35.0/.gitignore @@ -0,0 +1 @@ +tendermint diff --git a/tools/docker/tendermint-0.35.0/Dockerfile b/tools/docker/tendermint-0.35.0/Dockerfile new file mode 100644 index 000000000..9a7bb1aca --- /dev/null +++ b/tools/docker/tendermint-0.35.0/Dockerfile @@ -0,0 +1,33 @@ +FROM alpine:3.15 +LABEL maintainer="hello@informal.systems" + +ARG TM_VERSION=0.35.0 +ARG TM_ARCHIVE_HASH=c70dc4538991183905c1eef17263b713666675a995d154a75a52cf0022338724 +ENV TM_HOME=/tendermint + +RUN apk --no-cache add jq bash && \ + wget https://github.com/freshautomations/sconfig/releases/download/v0.1.0/sconfig_linux_amd64 \ + -O /usr/bin/sconfig && \ + chmod 755 /usr/bin/sconfig && \ + addgroup tendermint && \ + adduser -S -G tendermint tendermint -h "$TM_HOME" && \ + cd /tmp && \ + wget "https://github.com/tendermint/tendermint/releases/download/v${TM_VERSION}/tendermint_${TM_VERSION}_linux_amd64.tar.gz" \ + -O tendermint.tar.gz && \ + echo "${TM_ARCHIVE_HASH} tendermint.tar.gz" > checksum.txt && \ + sha256sum -c checksum.txt && \ + tar xf tendermint.tar.gz && \ + mv tendermint /usr/bin/tendermint && \ + rm /tmp/checksum.txt && \ + rm /tmp/tendermint.tar.gz && \ + chown -R tendermint:tendermint ${TM_HOME} +USER tendermint +WORKDIR $TM_HOME + +EXPOSE 26656 26657 26660 +STOPSIGNAL SIGTERM + +COPY entrypoint /usr/bin/entrypoint +ENTRYPOINT ["/usr/bin/entrypoint"] +CMD ["node"] +VOLUME [ "$TM_HOME" ] diff --git a/tools/docker/tendermint-0.35.0/entrypoint b/tools/docker/tendermint-0.35.0/entrypoint new file mode 100755 index 000000000..8e99d2320 --- /dev/null +++ b/tools/docker/tendermint-0.35.0/entrypoint @@ -0,0 +1,22 @@ +#!/usr/bin/env sh +set -euo pipefail + +if [ ! -d "${TM_HOME}/config" ]; then + + echo "Running tendermint init to create configuration." + /usr/bin/tendermint init validator + + sconfig -s ${TM_HOME}/config/config.toml \ + proxy-app=${PROXY_APP:-kvstore} \ + moniker=${MONIKER:-dockernode} \ + consensus.timeout-commit=500ms \ + rpc.laddr=tcp://0.0.0.0:26657 \ + p2p.addr-book-strict=false \ + instrumentation.prometheus=true + + sconfig -s ${TM_HOME}/config/genesis.json \ + chain_id=${CHAIN_ID:-dockerchain} + +fi + +exec /usr/bin/tendermint "$@" diff --git a/tools/kvstore-test/Makefile.toml b/tools/kvstore-test/Makefile.toml index 7f811cd39..2df64e61f 100644 --- a/tools/kvstore-test/Makefile.toml +++ b/tools/kvstore-test/Makefile.toml @@ -1,6 +1,6 @@ [env] CONTAINER_NAME = "kvstore-test" -DOCKER_IMAGE = "informaldev/tendermint:0.34.13" +DOCKER_IMAGE = "informaldev/tendermint:0.35.0" HOST_RPC_PORT = 26657 CARGO_MAKE_WAIT_MILLISECONDS = 1000 RUST_LOG = "debug" diff --git a/tools/kvstore-test/tests/light-client.rs b/tools/kvstore-test/tests/light-client.rs index c81185794..0b04931ae 100644 --- a/tools/kvstore-test/tests/light-client.rs +++ b/tools/kvstore-test/tests/light-client.rs @@ -23,7 +23,6 @@ use tendermint_light_client::{ types::{Height, PeerId, Status, TrustThreshold}, }; -use tendermint::abci::transaction::Hash as TxHash; use tendermint_rpc as rpc; use std::convert::TryFrom; @@ -33,7 +32,11 @@ struct TestEvidenceReporter; #[contracts::contract_trait] impl EvidenceReporter for TestEvidenceReporter { - fn report(&self, evidence: Evidence, peer: PeerId) -> Result { + fn report( + &self, + evidence: Evidence, + peer: PeerId, + ) -> Result { panic!( "unexpected fork detected for peer {} with evidence: {:?}", peer, evidence diff --git a/tools/kvstore-test/tests/tendermint.rs b/tools/kvstore-test/tests/tendermint.rs index 38ddca661..869feb50f 100644 --- a/tools/kvstore-test/tests/tendermint.rs +++ b/tools/kvstore-test/tests/tendermint.rs @@ -23,10 +23,10 @@ mod rpc { use futures::StreamExt; use std::convert::TryFrom; use std::sync::atomic::{AtomicU8, Ordering}; - use tendermint::abci::Log; - use tendermint::abci::{Code, Transaction}; use tendermint::block::Height; use tendermint::merkle::simple_hash_from_byte_vectors; + use tendermint_rpc::abci::Log; + use tendermint_rpc::abci::{Code, Transaction}; use tendermint_rpc::endpoint::tx::Response as ResultTx; use tendermint_rpc::event::{Event, EventData, TxInfo}; use tendermint_rpc::query::{EventType, Query}; @@ -107,12 +107,7 @@ mod rpc { // Check for empty merkle root. // See: https://github.com/informalsystems/tendermint-rs/issues/562 let computed_data_hash = simple_hash_from_byte_vectors( - block_info - .block - .data - .iter() - .map(|t| t.to_owned().into()) - .collect(), + block_info.block.data.iter().map(|t| t.to_owned()).collect(), ); assert_eq!( computed_data_hash, @@ -475,7 +470,7 @@ mod rpc { http_client: &HttpClient, websocket_client: &mut WebSocketClient, tx: Transaction, - ) -> Result<(tendermint::abci::transaction::Hash, TxInfo), tendermint_rpc::Error> { + ) -> Result<(tendermint_rpc::abci::transaction::Hash, TxInfo), tendermint_rpc::Error> { let mut subs = websocket_client.subscribe(EventType::Tx.into()).await?; let r = http_client.broadcast_tx_async(tx.clone()).await?; diff --git a/tools/proto-compiler/src/constants.rs b/tools/proto-compiler/src/constants.rs index 6a0fa439c..865ec42d9 100644 --- a/tools/proto-compiler/src/constants.rs +++ b/tools/proto-compiler/src/constants.rs @@ -6,7 +6,7 @@ pub const TENDERMINT_REPO: &str = "https://github.com/tendermint/tendermint"; // Tag: v0.34.0-rc4 // Branch: master // Commit ID (full length): d7d0ffea13c60c98b812d243ba5a2c375f341c15 -pub const TENDERMINT_COMMITISH: &str = "v0.34.9"; +pub const TENDERMINT_COMMITISH: &str = "v0.35.0"; /// Predefined custom attributes for message annotations const PRIMITIVE_ENUM: &str = r#"#[derive(::num_derive::FromPrimitive, ::num_derive::ToPrimitive)]"#; @@ -20,8 +20,7 @@ const HEXSTRING: &str = r#"#[serde(with = "crate::serializers::bytes::hexstring" const BASE64STRING: &str = r#"#[serde(with = "crate::serializers::bytes::base64string")]"#; const VEC_BASE64STRING: &str = r#"#[serde(with = "crate::serializers::bytes::vec_base64string")]"#; const OPTIONAL: &str = r#"#[serde(with = "crate::serializers::optional")]"#; -const VEC_SKIP_IF_EMPTY: &str = - r#"#[serde(skip_serializing_if = "::prost::alloc::vec::Vec::is_empty", with = "serde_bytes")]"#; +const BYTES_SKIP_IF_EMPTY: &str = r#"#[serde(skip_serializing_if = "bytes::Bytes::is_empty")]"#; const NULLABLEVECARRAY: &str = r#"#[serde(with = "crate::serializers::txs")]"#; const NULLABLE: &str = r#"#[serde(with = "crate::serializers::nullable")]"#; const ALIAS_POWER_QUOTED: &str = @@ -30,6 +29,7 @@ const PART_SET_HEADER_TOTAL: &str = r#"#[serde(with = "crate::serializers::part_set_header_total")]"#; const RENAME_EDPUBKEY: &str = r#"#[serde(rename = "tendermint/PubKeyEd25519", with = "crate::serializers::bytes::base64string")]"#; const RENAME_SECPPUBKEY: &str = r#"#[serde(rename = "tendermint/PubKeySecp256k1", with = "crate::serializers::bytes::base64string")]"#; +const RENAME_SRPUBKEY: &str = r#"#[serde(rename = "tendermint/PubKeySr25519", with = "crate::serializers::bytes::base64string")]"#; const RENAME_DUPLICATEVOTE: &str = r#"#[serde(rename = "tendermint/DuplicateVoteEvidence")]"#; const RENAME_LIGHTCLIENTATTACK: &str = r#"#[serde(rename = "tendermint/LightClientAttackEvidence")]"#; @@ -90,7 +90,7 @@ pub static CUSTOM_FIELD_ATTRIBUTES: &[(&str, &str)] = &[ (".tendermint.version.Consensus.app", QUOTED_WITH_DEFAULT), ( ".tendermint.abci.ResponseInfo.last_block_app_hash", - VEC_SKIP_IF_EMPTY, + BYTES_SKIP_IF_EMPTY, ), (".tendermint.abci.ResponseInfo.app_version", QUOTED), (".tendermint.types.BlockID.hash", HEXSTRING), @@ -144,6 +144,7 @@ pub static CUSTOM_FIELD_ATTRIBUTES: &[(&str, &str)] = &[ ".tendermint.crypto.PublicKey.sum.secp256k1", RENAME_SECPPUBKEY, ), + (".tendermint.crypto.PublicKey.sum.sr25519", RENAME_SRPUBKEY), ( ".tendermint.types.Evidence.sum.duplicate_vote_evidence", RENAME_DUPLICATEVOTE, diff --git a/tools/proto-compiler/src/functions.rs b/tools/proto-compiler/src/functions.rs index a3e992049..541e0cb72 100644 --- a/tools/proto-compiler/src/functions.rs +++ b/tools/proto-compiler/src/functions.rs @@ -2,13 +2,13 @@ use git2::build::{CheckoutBuilder, RepoBuilder}; use git2::{AutotagOption, Commit, FetchOptions, Oid, Reference, Repository}; use std::fs::{copy, create_dir_all, remove_dir_all, File}; use std::io::Write; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use subtle_encoding::hex; use walkdir::WalkDir; /// Clone or open+fetch a repository and check out a specific commitish /// In case of an existing repository, the origin remote will be set to `url`. -pub fn get_commitish(dir: &PathBuf, url: &str, commitish: &str) { +pub fn get_commitish(dir: &Path, url: &str, commitish: &str) { let repo = if dir.exists() { fetch_existing(dir, url) } else { @@ -17,7 +17,7 @@ pub fn get_commitish(dir: &PathBuf, url: &str, commitish: &str) { checkout_commitish(&repo, commitish) } -fn clone_new(dir: &PathBuf, url: &str) -> Repository { +fn clone_new(dir: &Path, url: &str) -> Repository { println!( " [info] => Cloning {} into {} folder", url, @@ -34,7 +34,7 @@ fn clone_new(dir: &PathBuf, url: &str) -> Repository { builder.clone(url, dir).unwrap() } -fn fetch_existing(dir: &PathBuf, url: &str) -> Repository { +fn fetch_existing(dir: &Path, url: &str) -> Repository { println!( " [info] => Fetching from {} into existing {} folder", url, @@ -115,7 +115,7 @@ fn find_reference_or_commit<'a>( ) -> (Option>, Commit<'a>) { let mut tried_origin = false; // we tried adding 'origin/' to the commitish - let mut try_reference = repo.resolve_reference_from_short_name(&commitish); + let mut try_reference = repo.resolve_reference_from_short_name(commitish); if try_reference.is_err() { // Local branch might be missing, try the remote branch try_reference = repo.resolve_reference_from_short_name(&format!("origin/{}", commitish)); @@ -151,7 +151,7 @@ fn find_reference_or_commit<'a>( } /// Copy generated files to target folder -pub fn copy_files(src_dir: &PathBuf, target_dir: &PathBuf) { +pub fn copy_files(src_dir: &Path, target_dir: &Path) { // Remove old compiled files remove_dir_all(target_dir).unwrap_or_default(); create_dir_all(target_dir).unwrap(); @@ -203,7 +203,7 @@ pub fn find_proto_files(proto_paths: Vec) -> Vec { } /// Create tendermint.rs with library information -pub fn generate_tendermint_lib(prost_dir: &PathBuf, tendermint_lib_target: &PathBuf) { +pub fn generate_tendermint_lib(prost_dir: &Path, tendermint_lib_target: &Path) { let file_names = WalkDir::new(prost_dir) .into_iter() .filter_map(|e| e.ok()) @@ -238,7 +238,7 @@ pub fn generate_tendermint_lib(prost_dir: &PathBuf, tendermint_lib_target: &Path ); for part in parts { - tab_count = tab_count - 1; + tab_count -= 1; let tabs = tab.repeat(tab_count); //{tabs} pub mod {part} { //{inner_content} diff --git a/tools/proto-compiler/src/main.rs b/tools/proto-compiler/src/main.rs index 8be0203d4..7de037997 100644 --- a/tools/proto-compiler/src/main.rs +++ b/tools/proto-compiler/src/main.rs @@ -55,8 +55,12 @@ fn main() { // List available proto files let protos = find_proto_files(proto_paths); - // Compile proto files with added annotations, exchange prost_types to our own let mut pb = prost_build::Config::new(); + + // Use shared Bytes buffers for ABCI messages: + pb.bytes(&[".tendermint.abci"]); + + // Compile proto files with added annotations, exchange prost_types to our own pb.out_dir(&out_dir); for type_attribute in CUSTOM_TYPE_ATTRIBUTES { pb.type_attribute(type_attribute.0, type_attribute.1); diff --git a/tools/rpc-probe/Makefile.toml b/tools/rpc-probe/Makefile.toml index ee1f5a6d4..00e4fbe7b 100644 --- a/tools/rpc-probe/Makefile.toml +++ b/tools/rpc-probe/Makefile.toml @@ -1,6 +1,6 @@ [env] CONTAINER_NAME = "kvstore-rpc-probe" -DOCKER_IMAGE = "informaldev/tendermint:0.34.13" +DOCKER_IMAGE = "informaldev/tendermint:0.35.0" HOST_RPC_PORT = 26657 CARGO_MAKE_WAIT_MILLISECONDS = 3500 @@ -10,7 +10,7 @@ dependencies = [ "docker-up", "wait", "run", "docker-down" ] [tasks.run] command = "cargo" -args = ["run"] +args = ["run", "--", "--verbose"] [tasks.docker-down] dependencies = [ "docker-stop", "docker-rm" ] diff --git a/tools/rpc-probe/src/client.rs b/tools/rpc-probe/src/client.rs index 905cbe5e2..1085125b9 100644 --- a/tools/rpc-probe/src/client.rs +++ b/tools/rpc-probe/src/client.rs @@ -39,9 +39,10 @@ impl Client { response_tx, }) .await?; - response_rx.recv().await.ok_or_else(|| { - Error::InternalError("internal channel communication problem".to_string()) - })? + response_rx + .recv() + .await + .ok_or_else(|| Error::Internal("internal channel communication problem".to_string()))? } pub async fn subscribe( @@ -59,7 +60,7 @@ impl Client { }) .await?; let response = response_rx.recv().await.ok_or_else(|| { - Error::InternalError("internal channel communication problem".to_string()) + Error::Internal("internal channel communication problem".to_string()) })??; Ok((subscription_rx, response)) } @@ -93,7 +94,7 @@ impl Client { return Ok(()); } } - Err(Error::InternalError(format!( + Err(Error::Internal(format!( "subscription terminated before we could reach target height of {}", h ))) @@ -105,7 +106,7 @@ impl Client { async fn send_cmd(&mut self, cmd: DriverCommand) -> Result<()> { self.cmd_tx.send(cmd).map_err(|e| { - Error::InternalError(format!( + Error::Internal(format!( "WebSocket driver channel receiving end closed unexpectedly: {}", e.to_string() )) @@ -155,7 +156,7 @@ impl ClientDriver { Some(res) = self.stream.next() => match res { Ok(msg) => self.handle_incoming_msg(msg).await?, Err(e) => return Err( - Error::WebSocketError( + Error::WebSocket( format!("failed to read from WebSocket connection: {}", e), ), ), @@ -179,7 +180,7 @@ impl ClientDriver { async fn send_msg(&mut self, msg: Message) -> Result<()> { self.stream.send(msg).await.map_err(|e| { - Error::WebSocketError(format!("failed to write to WebSocket connection: {}", e)) + Error::WebSocket(format!("failed to write to WebSocket connection: {}", e)) }) } diff --git a/tools/rpc-probe/src/error.rs b/tools/rpc-probe/src/error.rs index a1124f304..dbbf77d37 100644 --- a/tools/rpc-probe/src/error.rs +++ b/tools/rpc-probe/src/error.rs @@ -7,10 +7,10 @@ pub type Result = std::result::Result; #[derive(Debug, Clone, Error)] pub enum Error { #[error("an internal error occurred: {0}")] - InternalError(String), + Internal(String), #[error("WebSocket connection error: {0}")] - WebSocketError(String), + WebSocket(String), #[error("timed out: {0}")] Timeout(String), @@ -25,18 +25,18 @@ pub enum Error { InvalidParamValue(String), #[error("I/O error: {0}")] - IoError(String), + Io(String), #[error("unexpected success response")] - UnexpectedSuccess, + UnexpectedSuccessResponse, #[error("unexpected error response: {0}")] - UnexpectedError(String), + UnexpectedErrorResponse(String), } impl From for Error { fn from(e: async_tungstenite::tungstenite::Error) -> Self { - Self::WebSocketError(e.to_string()) + Self::WebSocket(e.to_string()) } } @@ -54,13 +54,13 @@ impl From for Error { impl From> for Error { fn from(e: tokio::sync::mpsc::error::SendError) -> Self { - Self::InternalError(format!("failed to send to channel: {}", e)) + Self::Internal(format!("failed to send to channel: {}", e)) } } impl From for Error { fn from(e: tokio::task::JoinError) -> Self { - Self::InternalError(format!( + Self::Internal(format!( "failed while waiting for async task to join: {}", e )) @@ -69,6 +69,6 @@ impl From for Error { impl From for Error { fn from(e: std::io::Error) -> Self { - Self::IoError(e.to_string()) + Self::Io(e.to_string()) } } diff --git a/tools/rpc-probe/src/kvstore.rs b/tools/rpc-probe/src/kvstore.rs index a5f4b0eaf..274de641d 100644 --- a/tools/rpc-probe/src/kvstore.rs +++ b/tools/rpc-probe/src/kvstore.rs @@ -114,6 +114,17 @@ pub fn subscribe(query: &str) -> PlannedInteraction { PlannedSubscription::new(query).into() } +pub fn tx(hash: &str, prove: bool) -> PlannedInteraction { + Request::new( + "tx", + json!({ + "hash": hash, + "prove": prove, + }), + ) + .into() +} + pub fn tx_search( query: &str, prove: bool, diff --git a/tools/rpc-probe/src/plan.rs b/tools/rpc-probe/src/plan.rs index 74e7ceaa1..596fd4483 100644 --- a/tools/rpc-probe/src/plan.rs +++ b/tools/rpc-probe/src/plan.rs @@ -366,14 +366,14 @@ async fn execute_request( let response_json = match client.request(&request_json).await { Ok(r) => { if expect_error { - return Err(Error::UnexpectedSuccess); + return Err(Error::UnexpectedSuccessResponse); } r } Err(e) => match e { Error::Failed(_, r) => { if !expect_error { - return Err(Error::UnexpectedError( + return Err(Error::UnexpectedErrorResponse( serde_json::to_string_pretty(&r).unwrap(), )); } @@ -399,7 +399,7 @@ async fn execute_subscription( match client.subscribe(&uuid_v4(), &subs.subscription.query).await { Ok(r) => { if expect_error { - return Err(Error::UnexpectedSuccess); + return Err(Error::UnexpectedSuccessResponse); } r } @@ -408,7 +408,7 @@ async fn execute_subscription( // queries). Error::Failed(_, r) => { if !expect_error { - return Err(Error::UnexpectedError( + return Err(Error::UnexpectedErrorResponse( serde_json::to_string_pretty(&r).unwrap(), )); } diff --git a/tools/rpc-probe/src/quick.rs b/tools/rpc-probe/src/quick.rs index 33df58aa9..63edac51e 100644 --- a/tools/rpc-probe/src/quick.rs +++ b/tools/rpc-probe/src/quick.rs @@ -54,6 +54,16 @@ pub fn quick_probe_plan(output_path: &Path, request_wait: Duration) -> Result 1", false, 1, 10, "asc").with_name("tx_search_no_prove"), tx_search("tx.height > 1", true, 1, 10, "asc").with_name("tx_search_with_prove"), ]),