From 3738472dfd95ab90a656dc427fa7774b6e52d32a Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 30 Jun 2025 15:12:01 +0500 Subject: [PATCH] feat(rpc): add kvstore fixtures for v1 --- rpc/tests/kvstore_fixtures.rs | 1 + rpc/tests/kvstore_fixtures/v1.rs | 1434 +++++++++++ .../v1/incoming/abci_info.json | 13 + .../abci_query_with_existing_key.json | 17 + .../abci_query_with_non_existent_key.json | 17 + .../v1/incoming/block_at_height_0.json | 9 + .../v1/incoming/block_at_height_1.json | 58 + .../v1/incoming/block_at_height_10.json | 65 + .../v1/incoming/block_by_hash.json | 65 + .../incoming/block_results_at_height_10.json | 12 + .../v1/incoming/block_search.json | 2266 +++++++++++++++++ .../v1/incoming/blockchain_from_1_to_10.json | 369 +++ .../v1/incoming/broadcast_tx_async.json | 11 + .../v1/incoming/broadcast_tx_commit.json | 79 + .../v1/incoming/broadcast_tx_sync.json | 11 + .../v1/incoming/commit_at_height_10.json | 53 + .../v1/incoming/consensus_params.json | 34 + .../v1/incoming/consensus_state.json | 30 + .../kvstore_fixtures/v1/incoming/genesis.json | 50 + .../v1/incoming/net_info.json | 12 + .../kvstore_fixtures/v1/incoming/status.json | 42 + .../v1/incoming/subscribe_malformed.json | 9 + .../v1/incoming/subscribe_newblock.json | 1 + .../v1/incoming/subscribe_newblock_0.json | 80 + .../v1/incoming/subscribe_newblock_1.json | 80 + .../v1/incoming/subscribe_newblock_2.json | 80 + .../v1/incoming/subscribe_newblock_3.json | 80 + .../v1/incoming/subscribe_newblock_4.json | 80 + .../v1/incoming/subscribe_txs.json | 5 + .../v1/incoming/subscribe_txs_0.json | 97 + .../v1/incoming/subscribe_txs_1.json | 97 + .../v1/incoming/subscribe_txs_2.json | 97 + .../v1/incoming/subscribe_txs_3.json | 97 + .../v1/incoming/subscribe_txs_4.json | 97 + .../subscribe_txs_broadcast_tx_0.json | 11 + .../subscribe_txs_broadcast_tx_1.json | 11 + .../subscribe_txs_broadcast_tx_2.json | 11 + .../subscribe_txs_broadcast_tx_3.json | 11 + .../subscribe_txs_broadcast_tx_4.json | 11 + .../subscribe_txs_broadcast_tx_5.json | 11 + .../v1/incoming/tx_search_no_prove.json | 612 +++++ .../v1/incoming/tx_search_with_prove.json | 702 +++++ .../v1/outgoing/abci_info.json | 6 + .../abci_query_with_existing_key.json | 8 + .../abci_query_with_non_existent_key.json | 8 + .../v1/outgoing/block_at_height_0.json | 8 + .../v1/outgoing/block_at_height_1.json | 8 + .../v1/outgoing/block_at_height_10.json | 8 + .../v1/outgoing/block_by_hash.json | 8 + .../outgoing/block_results_at_height_10.json | 8 + .../v1/outgoing/block_search.json | 11 + .../v1/outgoing/blockchain_from_1_to_10.json | 9 + .../v1/outgoing/broadcast_tx_async.json | 8 + .../v1/outgoing/broadcast_tx_commit.json | 8 + .../v1/outgoing/broadcast_tx_sync.json | 8 + .../v1/outgoing/commit_at_height_10.json | 8 + .../v1/outgoing/consensus_params.json | 8 + .../v1/outgoing/consensus_state.json | 6 + .../kvstore_fixtures/v1/outgoing/genesis.json | 6 + .../v1/outgoing/net_info.json | 6 + .../kvstore_fixtures/v1/outgoing/status.json | 6 + .../v1/outgoing/subscribe_malformed.json | 8 + .../v1/outgoing/subscribe_newblock.json | 8 + .../v1/outgoing/subscribe_txs.json | 8 + .../subscribe_txs_broadcast_tx_0.json | 8 + .../subscribe_txs_broadcast_tx_1.json | 8 + .../subscribe_txs_broadcast_tx_2.json | 8 + .../subscribe_txs_broadcast_tx_3.json | 8 + .../subscribe_txs_broadcast_tx_4.json | 8 + .../subscribe_txs_broadcast_tx_5.json | 8 + .../v1/outgoing/tx_search_no_prove.json | 12 + .../v1/outgoing/tx_search_with_prove.json | 12 + tools/rpc-probe/Makefile.toml | 2 +- tools/rpc-probe/README.md | 9 +- 74 files changed, 7174 insertions(+), 7 deletions(-) create mode 100644 rpc/tests/kvstore_fixtures/v1.rs create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/abci_info.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/abci_query_with_existing_key.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/abci_query_with_non_existent_key.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_0.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_1.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_10.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/block_by_hash.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/block_results_at_height_10.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/block_search.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/blockchain_from_1_to_10.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_async.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_commit.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_sync.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/commit_at_height_10.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/consensus_params.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/consensus_state.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/genesis.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/net_info.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/status.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_malformed.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_0.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_1.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_2.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_3.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_4.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_0.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_1.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_2.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_3.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_4.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_0.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_1.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_2.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_3.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_4.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_5.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/tx_search_no_prove.json create mode 100644 rpc/tests/kvstore_fixtures/v1/incoming/tx_search_with_prove.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/abci_info.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/abci_query_with_existing_key.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/abci_query_with_non_existent_key.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_0.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_1.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_10.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/block_by_hash.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/block_results_at_height_10.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/block_search.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/blockchain_from_1_to_10.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_async.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_commit.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_sync.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/commit_at_height_10.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/consensus_params.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/consensus_state.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/genesis.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/net_info.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/status.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_malformed.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_newblock.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_0.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_1.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_2.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_3.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_4.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_5.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/tx_search_no_prove.json create mode 100644 rpc/tests/kvstore_fixtures/v1/outgoing/tx_search_with_prove.json diff --git a/rpc/tests/kvstore_fixtures.rs b/rpc/tests/kvstore_fixtures.rs index cf89dc73..1a653eb7 100644 --- a/rpc/tests/kvstore_fixtures.rs +++ b/rpc/tests/kvstore_fixtures.rs @@ -24,6 +24,7 @@ mod kvstore_fixtures { mod v0_34; mod v0_37; mod v0_38; + mod v1; } fn find_fixtures(ver_folder_name: &str, in_out_folder_name: &str) -> Vec { diff --git a/rpc/tests/kvstore_fixtures/v1.rs b/rpc/tests/kvstore_fixtures/v1.rs new file mode 100644 index 00000000..a0f43347 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1.rs @@ -0,0 +1,1434 @@ +use cometbft::consensus::params::VersionParams; + +use super::*; + +#[test] +fn outgoing_fixtures() { + for json_file in find_fixtures("v1", "outgoing") { + let file_name = json_file + .file_name() + .unwrap() + .to_str() + .unwrap() + .strip_suffix(".json") + .unwrap(); + let content = fs::read_to_string(&json_file).unwrap(); + match file_name { + "abci_info" => assert!(serde_json::from_str::< + RequestWrapper, + >(&content) + .is_ok()), + "abci_query_with_existing_key" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert!(wrapped.params().path.is_none()); + assert_eq!(wrapped.params().data, hex::decode("747830").unwrap()); + assert!(wrapped.params().height.is_none()); + assert!(!wrapped.params().prove); + }, + "abci_query_with_non_existent_key" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert!(wrapped.params().path.is_none()); + assert_eq!( + wrapped.params().data, + hex::decode("6e6f6e5f6578697374656e745f6b6579").unwrap() + ); + assert!(wrapped.params().height.is_none()); + assert!(!wrapped.params().prove); + }, + "block_at_height_0" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().height.unwrap().value(), 0); + }, + "block_at_height_1" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().height.unwrap().value(), 1); + }, + "block_at_height_10" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().height.unwrap().value(), 10); + }, + "block_by_hash" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!( + wrapped.params().hash.unwrap().to_string(), + "FCF9C2537FC3534CA71001FE1F14C4F769090948C1A521682F612E7CF73AE639" + ); + }, + "block_results_at_height_10" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!(wrapped.params().height.unwrap().value(), 10); + }, + "block_search" => { + let wrapped = + serde_json::from_str::>( + &content, + ) + .unwrap(); + assert_eq!(wrapped.params().query, "block.height > 1"); + assert_eq!(wrapped.params().page, 1); + assert_eq!(wrapped.params().per_page, 100); + assert_eq!(wrapped.params().order_by, Order::Ascending); + }, + "blockchain_from_1_to_10" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().min_height.value(), 1); + assert_eq!(wrapped.params().max_height.value(), 10); + }, + "broadcast_tx_async" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!( + wrapped.params().tx, + base64::decode("YXN5bmMta2V5PXZhbHVl").unwrap() + ); + }, + "broadcast_tx_commit" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!( + wrapped.params().tx, + base64::decode("Y29tbWl0LWtleT12YWx1ZQ==").unwrap() + ); + }, + "broadcast_tx_sync" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!( + wrapped.params().tx, + base64::decode("c3luYy1rZXk9dmFsdWU=").unwrap() + ); + }, + "commit_at_height_10" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().height.unwrap().value(), 10); + }, + "consensus_params" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + let height = wrapped.params().height.unwrap(); + assert_eq!(u64::from(height), 10u64); + }, + "consensus_state" => assert!(serde_json::from_str::< + RequestWrapper, + >(&content) + .is_ok()), + "genesis" => assert!(serde_json::from_str::< + RequestWrapper>, + >(&content) + .is_ok()), + "net_info" => assert!(serde_json::from_str::< + RequestWrapper, + >(&content) + .is_ok()), + "status" => assert!( + serde_json::from_str::>(&content).is_ok() + ), + "subscribe_malformed" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().query, "malformed query"); + }, + "subscribe_newblock" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().query, "tm.event = 'NewBlock'"); + }, + "subscribe_txs" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().query, "tm.event = 'Tx'"); + }, + "subscribe_txs_broadcast_tx_0" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!(wrapped.params().tx, base64::decode("dHgwPXZhbHVl").unwrap()); + }, + "subscribe_txs_broadcast_tx_1" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!(wrapped.params().tx, base64::decode("dHgxPXZhbHVl").unwrap()); + }, + "subscribe_txs_broadcast_tx_2" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!(wrapped.params().tx, base64::decode("dHgyPXZhbHVl").unwrap()); + }, + "subscribe_txs_broadcast_tx_3" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!(wrapped.params().tx, base64::decode("dHgzPXZhbHVl").unwrap()); + }, + "subscribe_txs_broadcast_tx_4" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!(wrapped.params().tx, base64::decode("dHg0PXZhbHVl").unwrap()); + }, + "subscribe_txs_broadcast_tx_5" => { + let wrapped = serde_json::from_str::< + RequestWrapper, + >(&content) + .unwrap(); + assert_eq!(wrapped.params().tx, base64::decode("dHg1PXZhbHVl").unwrap()); + }, + "tx" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!( + wrapped.params().hash, + Hash::from_bytes( + Algorithm::Sha256, + &[ + 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 + ] + ) + .unwrap() + ); + assert!(!wrapped.params().prove); + }, + "tx_search_no_prove" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().query, "tx.height > 1"); + assert!(!wrapped.params().prove); + assert_eq!(wrapped.params().page, 1); + assert_eq!(wrapped.params().per_page, 10); + assert_eq!(wrapped.params().order_by, Order::Ascending); + }, + "tx_search_with_prove" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!(wrapped.params().query, "tx.height > 1"); + assert!(wrapped.params().prove); + assert_eq!(wrapped.params().page, 1); + assert_eq!(wrapped.params().per_page, 10); + assert_eq!(wrapped.params().order_by, Order::Ascending); + }, + _ => { + panic!("cannot parse file name: {file_name}"); + }, + } + } +} + +#[test] +fn incoming_fixtures() { + use cometbft_rpc::event::{v1::DeEvent, EventData}; + + let empty_merkle_root_hash = Some( + cometbft::Hash::from_hex_upper( + cometbft::hash::Algorithm::Sha256, + "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + ) + .unwrap(), + ); + let informal_epoch = + cometbft::Time::parse_from_rfc3339("2020-01-01T00:00:00.000000000Z").unwrap(); + + for json_file in find_fixtures("v1", "incoming") { + let file_name = json_file + .file_name() + .unwrap() + .to_str() + .unwrap() + .strip_suffix(".json") + .unwrap(); + let content = fs::read_to_string(&json_file).unwrap(); + match file_name { + "abci_info" => { + 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.as_bytes(), + b"AAAAAAAAAAA=" + ); + assert_eq!(result.response.version, "2.1.0"); + }, + "abci_query_with_existing_key" => { + let result = endpoint::abci_query::Response::from_string(content).unwrap(); + assert_eq!(result.response.code.value(), 0); + assert!(result.response.codespace.is_empty()); + assert_eq!(result.response.index, 0); + assert!(result.response.info.is_empty()); + assert_eq!(result.response.key, base64::decode("dHgw").unwrap()); + assert_eq!(result.response.log, "exists"); + assert!(result.response.proof.is_none()); + assert_eq!(result.response.value, base64::decode("dmFsdWU=").unwrap()); + }, + "abci_query_with_non_existent_key" => { + let result = endpoint::abci_query::Response::from_string(content).unwrap(); + assert_eq!(result.response.code.value(), 0); + assert!(result.response.codespace.is_empty()); + assert_eq!(result.response.index, 0); + assert!(result.response.info.is_empty()); + assert_eq!( + result.response.key, + base64::decode("bm9uX2V4aXN0ZW50X2tleQ==").unwrap() + ); + assert_eq!(result.response.log, "does not exist"); + assert!(result.response.proof.is_none()); + assert!(result.response.value.is_empty()); + }, + "block_at_height_0" => { + let res = endpoint::block::Response::from_string(&content); + + 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.data(), + Some("height must be greater than 0, but got 0") + ); + }, + _ => panic!("expected Response error"), + } + }, + "block_at_height_1" => { + let result = endpoint::block::Response::from_string(content).unwrap(); + assert!(result.block.data.is_empty()); + assert!(result.block.evidence.iter().next().is_none()); + assert_eq!(result.block.header.app_hash.as_bytes(), [0u8; 8]); + assert_eq!(result.block.header.chain_id.as_str(), CHAIN_ID); + assert!(!result.block.header.consensus_hash.is_empty()); + assert_eq!(result.block.header.data_hash, empty_merkle_root_hash); + assert_eq!(result.block.header.evidence_hash, empty_merkle_root_hash); + assert_eq!(result.block.header.height.value(), 1); + assert!(result.block.header.last_block_id.is_none()); + assert_eq!(result.block.header.last_commit_hash, empty_merkle_root_hash); + assert_eq!( + result.block.header.last_results_hash, + empty_merkle_root_hash + ); + assert!(!result.block.header.next_validators_hash.is_empty()); + assert_ne!( + result.block.header.proposer_address.as_bytes(), + [0u8; cometbft::account::LENGTH] + ); + assert!( + result + .block + .header + .time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(!result.block.header.validators_hash.is_empty()); + assert_eq!( + result.block.header.version, + cometbft::block::header::Version { block: 11, app: 1 } + ); + assert!(result.block.last_commit.is_none()); + assert!(!result.block_id.hash.is_empty()); + assert!(!result.block_id.part_set_header.hash.is_empty()); + assert_eq!(result.block_id.part_set_header.total, 1); + }, + "block_at_height_10" => { + let result = endpoint::block::Response::from_string(content).unwrap(); + assert!(result.block.data.is_empty()); + assert!(result.block.evidence.iter().next().is_none()); + assert_eq!(result.block.header.app_hash.as_bytes(), &[0u8; 8]); + assert_eq!(result.block.header.chain_id.as_str(), CHAIN_ID); + assert!(!result.block.header.consensus_hash.is_empty()); + assert_eq!(result.block.header.data_hash, empty_merkle_root_hash); + assert_eq!(result.block.header.evidence_hash, empty_merkle_root_hash); + assert_eq!(result.block.header.height.value(), 10); + assert!(result.block.header.last_block_id.is_some()); + assert!(result.block.header.last_commit_hash.is_some()); + assert!(result.block.header.last_results_hash.is_some()); + assert!(!result.block.header.next_validators_hash.is_empty()); + assert_ne!( + result.block.header.proposer_address.as_bytes(), + [0u8; cometbft::account::LENGTH] + ); + assert!( + result + .block + .header + .time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(!result.block.header.validators_hash.is_empty()); + assert_eq!( + result.block.header.version, + cometbft::block::header::Version { block: 11, app: 1 } + ); + let last_commit = result.block.last_commit.unwrap(); + assert!(!last_commit.block_id.hash.is_empty()); + assert!(!last_commit.block_id.part_set_header.hash.is_empty()); + assert_eq!(last_commit.block_id.part_set_header.total, 1); + assert_eq!(last_commit.height.value(), 9); + assert_eq!(last_commit.round.value(), 0); + assert_eq!(last_commit.signatures.len(), 1); + assert!(last_commit.signatures[0].is_commit()); + assert!(last_commit.signatures[0].validator_address().is_some()); + // It's weird but there is no implementation to get the signature out of CommitSig. + assert!(!result.block_id.hash.is_empty()); + assert!(!result.block_id.part_set_header.hash.is_empty()); + assert_eq!(result.block_id.part_set_header.total, 1); + }, + "block_results_at_height_10" => { + let result = endpoint::block_results::Response::from_string(content).unwrap(); + assert!(result.begin_block_events.is_none()); + assert!(result.consensus_param_updates.is_none()); + assert!(result.end_block_events.is_none()); + assert_eq!(result.height.value(), 10); + assert!(result.txs_results.is_none()); + assert!(result.validator_updates.is_empty()); + }, + "block_by_hash" => { + let result = endpoint::block_by_hash::Response::from_string(content).unwrap(); + assert_eq!( + result.block_id.hash.to_string(), + "582DDEDEAC10340AE0EC8327BA20AB5C9EE98C295AA6721688923325B6C66B0B" + ); + }, + "block_search" => { + let result = endpoint::block_search::Response::from_string(content).unwrap(); + assert_eq!(result.total_count as usize, result.blocks.len()); + for response in result.blocks { + assert!(response.block.header.height.value() > 1); + } + }, + "block_search_evidence" => { + 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 { + let evidence = block.block.evidence.iter().next().unwrap(); + + use cometbft::vote; + + fn check_vote(vote: &Vote) { + assert_eq!(vote.vote_type, vote::Type::Precommit); + assert_eq!(vote.height.value(), 547); + assert_eq!(vote.round.value(), 0); + assert_eq!( + vote.validator_address, + "C888306A908A217B9A943D1DAD8790044D0947A4".parse().unwrap(), + ); + assert_eq!(vote.validator_index.value(), 2); + } + + if let Evidence::DuplicateVote(dup) = evidence { + assert_eq!(dup.total_voting_power.value(), 1509); + assert_eq!(dup.validator_power.value(), 99); + assert_eq!( + dup.timestamp, + "2024-09-13T15:58:27.05956617Z".parse().unwrap() + ); + + check_vote(&dup.vote_a); + check_vote(&dup.vote_b); + } else { + panic!("not a duplicate vote: {evidence:?}"); + } + } + }, + "broadcast_tx_async" => { + let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); + assert_eq!(result.code, abci::Code::Ok); + assert!(result.data.is_empty()); + assert_ne!( + result.hash, + Hash::from_bytes(Algorithm::Sha256, &[0; 32]).unwrap() + ); + assert!(result.log.is_empty()); + }, + "broadcast_tx_commit" => { + let result = + endpoint::broadcast::tx_commit::Response::from_string(content).unwrap(); + assert_eq!(result.check_tx.code, abci::Code::Ok); + assert!(result.check_tx.codespace.is_empty()); + assert!(result.check_tx.data.is_empty()); + assert!(result.check_tx.events.is_empty()); + assert_eq!(result.check_tx.gas_used, 0); + // Todo: https://github.com/informalsystems/tendermint-rs/issues/761 + // assert_eq!(result.check_tx.gas_wanted.value(), 1); + assert!(result.check_tx.info.to_string().is_empty()); + assert!(result.check_tx.log.is_empty()); + assert_eq!(result.tx_result.code, abci::Code::Ok); + assert!(result.tx_result.codespace.is_empty()); + assert!(result.tx_result.data.is_empty()); + assert_eq!(result.tx_result.events.len(), 2); + assert_eq!(result.tx_result.events[0].attributes.len(), 4); + assert_eq!( + result.tx_result.events[0].attributes[0].key_bytes(), + b"creator" + ); + assert_eq!( + result.tx_result.events[0].attributes[0] + .value_str() + .unwrap(), + "Cosmoshi Netowoko" + ); + assert_eq!(result.tx_result.events[0].attributes[1].key_bytes(), b"key"); + assert_eq!( + result.tx_result.events[0].attributes[1] + .value_str() + .unwrap(), + "commit-key" + ); + assert_eq!( + result.tx_result.events[0].attributes[2].key_bytes(), + b"index_key" + ); + assert_eq!( + result.tx_result.events[0].attributes[2] + .value_str() + .unwrap(), + "index is working" + ); + assert_eq!( + result.tx_result.events[0].attributes[3].key_bytes(), + b"noindex_key" + ); + assert_eq!( + result.tx_result.events[0].attributes[3] + .value_str() + .unwrap(), + "index is working" + ); + assert_eq!(result.tx_result.events[0].kind, "app"); + assert_eq!(result.tx_result.gas_used, 0); + assert_eq!(result.tx_result.gas_wanted, 0); + assert!(result.tx_result.info.to_string().is_empty()); + assert!(result.tx_result.log.is_empty()); + assert_ne!( + result.hash, + Hash::from_bytes(Algorithm::Sha256, &[0; 32]).unwrap() + ); + }, + "broadcast_tx_sync" => { + let result = endpoint::broadcast::tx_sync::Response::from_string(content).unwrap(); + assert_eq!(result.code, abci::Code::Ok); + // "broadcast_tx_sync result code" string + // "62726f6164636173745f74785f73796e6320726573756c7420636f6465" hex encoded + assert!(result.data.is_empty(),); + assert_ne!( + result.hash, + Hash::from_bytes(Algorithm::Sha256, &[0; 32]).unwrap() + ); + assert!(result.log.is_empty()); + }, + "commit_at_height_10" => { + let result = endpoint::commit::Response::from_string(content).unwrap(); + assert!(!result.signed_header.commit.block_id.hash.is_empty()); + assert_eq!(result.signed_header.commit.height.value(), 10); + assert_eq!(result.signed_header.commit.round.value(), 0); + assert_eq!(result.signed_header.commit.signatures.len(), 1); + assert!(result.signed_header.commit.signatures[0].is_commit()); + assert!(result.signed_header.commit.signatures[0] + .validator_address() + .is_some()); + assert_eq!(result.signed_header.header.app_hash.as_bytes(), [0u8; 8]); + assert_eq!(result.signed_header.header.chain_id.as_str(), CHAIN_ID); + assert!(!result.signed_header.header.consensus_hash.is_empty()); + assert_eq!( + result.signed_header.header.data_hash, + empty_merkle_root_hash + ); + assert_eq!( + result.signed_header.header.evidence_hash, + empty_merkle_root_hash + ); + assert_eq!(result.signed_header.header.height.value(), 10); + assert!(result.signed_header.header.last_block_id.is_some()); + assert!(result.signed_header.header.last_commit_hash.is_some()); + assert!(result.signed_header.header.last_results_hash.is_some()); + assert!(!result.signed_header.header.next_validators_hash.is_empty()); + assert_ne!( + result.signed_header.header.proposer_address.as_bytes(), + [0u8; cometbft::account::LENGTH] + ); + assert!( + result + .signed_header + .header + .time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(!result.signed_header.header.validators_hash.is_empty()); + assert_eq!( + result.signed_header.header.version, + cometbft::block::header::Version { block: 11, app: 1 } + ); + }, + "consensus_params" => { + let result = endpoint::consensus_params::Response::from_string(content).unwrap(); + assert_eq!(u64::from(result.block_height), 10_u64); + assert_eq!(result.consensus_params.block.max_bytes, 4194304_u64); + assert_eq!(result.consensus_params.block.max_gas, 10000000_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)) + ); + assert_eq!( + result.consensus_params.evidence.max_age_num_blocks, + 100000_u64 + ); + assert_eq!(result.consensus_params.evidence.max_bytes, 1048576_i64); + assert_eq!( + result.consensus_params.validator.pub_key_types, + vec![public_key::Algorithm::Ed25519] + ); + }, + "consensus_state" => { + assert!(endpoint::consensus_state::Response::from_string(content).is_ok()); + }, + "genesis" => { + let result = + endpoint::genesis::Response::>::from_string(content) + .unwrap(); + assert!(result.genesis.app_hash.as_bytes().is_empty()); + assert_eq!(result.genesis.chain_id.as_str(), CHAIN_ID); + assert_eq!(result.genesis.consensus_params.block.max_bytes, 4194304); + assert_eq!(result.genesis.consensus_params.block.max_gas, 10000000); + assert_eq!( + result + .genesis + .consensus_params + .evidence + .max_age_duration + .0 + .as_nanos(), + 172800000000000 + ); + assert_eq!( + result.genesis.consensus_params.evidence.max_age_num_blocks, + 100000 + ); + assert_eq!(result.genesis.consensus_params.evidence.max_bytes, 1048576); + assert_eq!( + result + .genesis + .consensus_params + .validator + .pub_key_types + .len(), + 1 + ); + assert_eq!( + result.genesis.consensus_params.validator.pub_key_types[0], + cometbft::public_key::Algorithm::Ed25519 + ); + assert_eq!( + result.genesis.consensus_params.version, + Some(VersionParams { app: 0 }) + ); + assert!( + result + .genesis + .genesis_time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert_eq!(result.genesis.validators.len(), 1); + assert_ne!( + result.genesis.validators[0].address.as_bytes(), + [0; cometbft::account::LENGTH] + ); + assert_eq!(result.genesis.validators[0].power(), 10); + assert!(result.genesis.validators[0].pub_key.ed25519().is_some()); + assert_eq!(result.genesis.validators[0].proposer_priority.value(), 0); + assert_eq!(result.genesis.consensus_params.block.time_iota_ms, 1000); + }, + "net_info" => { + let result = endpoint::net_info::Response::from_string(content).unwrap(); + assert_eq!(result.listeners.len(), 1); + assert_eq!(result.listeners[0].to_string(), "Listener(@)"); + assert!(result.listening); + assert_eq!(result.n_peers, 0); + assert!(result.peers.is_empty()); + }, + "status" => { + let result = endpoint::status::Response::from_string(content).unwrap(); + assert_eq!( + Address::from_listen_address(&result.node_info.listen_addr).unwrap(), + Address::from_str("tcp://0.0.0.0:26656").unwrap() + ); + assert_eq!(result.node_info.moniker.to_string(), "dockernode"); + assert_eq!(result.node_info.network.to_string(), CHAIN_ID); + assert_eq!( + result.node_info.other.rpc_address, + format!("{}", Address::from_str("tcp://0.0.0.0:26657").unwrap()) + ); + assert_eq!( + result.node_info.other.tx_index, + cometbft::node::info::TxIndexStatus::On + ); + assert_eq!( + result.node_info.protocol_version, + cometbft::node::info::ProtocolVersionInfo { + p2p: 9, + block: 11, + app: 1 + } + ); + assert_eq!(result.node_info.version.to_string(), "1.0.0"); + assert!(!result.sync_info.catching_up); + assert_eq!(result.sync_info.earliest_app_hash.as_bytes(), &[0u8; 8]); + assert!(!result.sync_info.earliest_block_hash.is_empty()); + assert_eq!(result.sync_info.earliest_block_height.value(), 1); + assert!( + result + .sync_info + .earliest_block_time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert_eq!( + result.sync_info.latest_app_hash.as_bytes(), + [6, 0, 0, 0, 0, 0, 0, 0] + ); + assert!(!result.sync_info.latest_block_hash.is_empty()); + assert!( + result + .sync_info + .latest_block_time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(result.validator_info.pub_key.ed25519().is_some()); + assert_eq!(result.validator_info.power.value(), 10); + }, + "blockchain_from_1_to_10" => { + let result = endpoint::blockchain::Response::from_string(content).unwrap(); + assert_eq!(result.block_metas.len(), 10); + for block_meta in result.block_metas { + assert!(!block_meta.block_id.hash.is_empty()); + assert!(!block_meta.block_id.part_set_header.hash.is_empty()); + assert_eq!(block_meta.block_id.part_set_header.total, 1); + assert!(block_meta.block_size > 0); + if block_meta.header.height.value() == 1 { + assert_eq!(block_meta.header.app_hash.as_bytes(), &[0u8; 8]); + assert_eq!(block_meta.header.data_hash, empty_merkle_root_hash); + assert_eq!(block_meta.header.evidence_hash, empty_merkle_root_hash); + assert!(block_meta.header.last_block_id.is_none()); + assert_eq!(block_meta.header.last_commit_hash, empty_merkle_root_hash); + assert_eq!(block_meta.header.last_results_hash, empty_merkle_root_hash); + } else { + assert!(!block_meta.header.app_hash.as_bytes().is_empty()); + assert!(block_meta.header.data_hash.is_some()); + assert!(block_meta.header.evidence_hash.is_some()); + assert!(block_meta.header.last_block_id.is_some()); + assert!(block_meta.header.last_commit_hash.is_some()); + assert!(block_meta.header.last_results_hash.is_some()); + } + assert_eq!(block_meta.header.chain_id.as_str(), CHAIN_ID); + assert!(!block_meta.header.consensus_hash.is_empty()); + assert!(!block_meta.header.next_validators_hash.is_empty()); + assert_ne!( + block_meta.header.proposer_address.as_bytes(), + [0u8; cometbft::account::LENGTH] + ); + assert!( + block_meta + .header + .time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(!block_meta.header.validators_hash.is_empty()); + assert_eq!( + block_meta.header.version, + cometbft::block::header::Version { block: 11, app: 1 } + ); + assert_eq!(block_meta.num_txs, 0); + } + }, + "subscribe_malformed" => { + let result = endpoint::subscribe::Response::from_string(content); + + match result { + Err(Error(ErrorDetail::Response(e), _)) => { + let response = e.source; + + assert_eq!(response.code(), Code::InternalError); + assert_eq!(response.message(), "Internal error"); + assert_eq!(response.data().unwrap(), "failed to parse query: offset 10: got tag, wanted <= operator, >= operator, < operator, > operator, = operator, CONTAINS operator or EXISTS operator"); + }, + _ => panic!("expected Response error"), + } + }, + "subscribe_newblock" => { + let result = endpoint::subscribe::Response::from_string(content); + + match result { + Err(Error(ErrorDetail::Serde(_), _)) => {}, + _ => panic!("expected Serde parse error, instead got {result:?}"), + } + }, + "subscribe_newblock_0" => { + let result = DeEvent::from_string(content).unwrap(); + if let EventData::NewBlock { + block, + block_id, + result_finalize_block, + } = result.data.into() + { + let b = block.unwrap(); + assert!(b.data.is_empty()); + assert!(b.evidence.iter().next().is_none()); + assert!(!b.header.app_hash.as_bytes().is_empty()); + assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); + assert!(!b.header.consensus_hash.is_empty()); + assert_eq!(b.header.data_hash, empty_merkle_root_hash); + assert_eq!(b.header.evidence_hash, empty_merkle_root_hash); + assert!(b.header.last_block_id.is_some()); + assert!(b.header.last_commit_hash.is_some()); + assert!(b.header.last_results_hash.is_some()); + assert!(!b.header.next_validators_hash.is_empty()); + assert_ne!( + b.header.proposer_address.as_bytes(), + [0u8; cometbft::account::LENGTH] + ); + assert!( + b.header + .time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(!b.header.validators_hash.is_empty()); + assert_eq!( + b.header.version, + cometbft::block::header::Version { block: 11, app: 1 } + ); + let last_commit = b.last_commit.unwrap(); + assert!(!last_commit.block_id.hash.is_empty()); + assert!(!last_commit.block_id.part_set_header.hash.is_empty()); + assert_eq!(last_commit.block_id.part_set_header.total, 1); + assert_eq!(last_commit.round.value(), 0); + assert_eq!(last_commit.signatures.len(), 1); + assert!(last_commit.signatures[0].is_commit()); + assert!(last_commit.signatures[0].validator_address().is_some()); + assert!(!block_id.hash.is_empty()); + assert_eq!(block_id.part_set_header.total, 1); + assert!(!block_id.part_set_header.hash.is_empty()); + let rfb = result_finalize_block.unwrap(); + assert!(rfb.validator_updates.is_empty()); + assert!(rfb.consensus_param_updates.is_none()); + assert!(rfb.events.is_empty()); + assert_eq!(rfb.app_hash.as_bytes(), &[6u8, 0, 0, 0, 0, 0, 0, 0]) + } else { + panic!("not a NewBlock event"); + } + assert_eq!(result.query, "tm.event = 'NewBlock'"); + }, + "subscribe_newblock_1" => { + let result = DeEvent::from_string(content).unwrap(); + if let EventData::NewBlock { + block, + block_id, + result_finalize_block, + } = result.data.into() + { + let b = block.unwrap(); + assert!(b.data.is_empty()); + assert!(b.evidence.iter().next().is_none()); + assert!(!b.header.app_hash.as_bytes().is_empty()); + assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); + assert!(!b.header.consensus_hash.is_empty()); + assert_eq!(b.header.data_hash, empty_merkle_root_hash); + assert_eq!(b.header.evidence_hash, empty_merkle_root_hash); + assert!(b.header.last_block_id.is_some()); + assert!(b.header.last_commit_hash.is_some()); + assert!(b.header.last_results_hash.is_some()); + assert!(!b.header.next_validators_hash.is_empty()); + assert_ne!( + b.header.proposer_address.as_bytes(), + [0u8; cometbft::account::LENGTH] + ); + assert!( + b.header + .time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(!b.header.validators_hash.is_empty()); + assert_eq!( + b.header.version, + cometbft::block::header::Version { block: 11, app: 1 } + ); + let last_commit = b.last_commit.unwrap(); + assert!(!last_commit.block_id.hash.is_empty()); + assert!(!last_commit.block_id.part_set_header.hash.is_empty()); + assert_eq!(last_commit.block_id.part_set_header.total, 1); + assert_eq!(last_commit.round.value(), 0); + assert_eq!(last_commit.signatures.len(), 1); + assert!(last_commit.signatures[0].is_commit()); + assert!(last_commit.signatures[0].validator_address().is_some()); + assert!(!block_id.hash.is_empty()); + assert_eq!(block_id.part_set_header.total, 1); + assert!(!block_id.part_set_header.hash.is_empty()); + let rfb = result_finalize_block.unwrap(); + assert!(rfb.events.is_empty()); + assert!(rfb.validator_updates.is_empty()); + assert!(rfb.consensus_param_updates.is_none()); + assert_eq!(rfb.app_hash.as_bytes(), &[6u8, 0, 0, 0, 0, 0, 0, 0]) + } else { + panic!("not a NewBlock event"); + } + assert_eq!(result.query, "tm.event = 'NewBlock'"); + }, + "subscribe_newblock_2" => { + let result = DeEvent::from_string(content).unwrap(); + if let EventData::NewBlock { + block, + block_id, + result_finalize_block, + } = result.data.into() + { + let b = block.unwrap(); + assert!(b.data.is_empty()); + assert!(b.evidence.iter().next().is_none()); + assert!(!b.header.app_hash.as_bytes().is_empty()); + assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); + assert!(!b.header.consensus_hash.is_empty()); + assert_eq!(b.header.data_hash, empty_merkle_root_hash); + assert_eq!(b.header.evidence_hash, empty_merkle_root_hash); + assert!(b.header.last_block_id.is_some()); + assert!(b.header.last_commit_hash.is_some()); + assert!(b.header.last_results_hash.is_some()); + assert!(!b.header.next_validators_hash.is_empty()); + assert_ne!( + b.header.proposer_address.as_bytes(), + [0u8; cometbft::account::LENGTH] + ); + assert!( + b.header + .time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(!b.header.validators_hash.is_empty()); + assert_eq!( + b.header.version, + cometbft::block::header::Version { block: 11, app: 1 } + ); + let last_commit = b.last_commit.unwrap(); + assert!(!last_commit.block_id.hash.is_empty()); + assert!(!last_commit.block_id.part_set_header.hash.is_empty()); + assert_eq!(last_commit.block_id.part_set_header.total, 1); + assert_eq!(last_commit.round.value(), 0); + assert_eq!(last_commit.signatures.len(), 1); + assert!(last_commit.signatures[0].is_commit()); + assert!(last_commit.signatures[0].validator_address().is_some()); + assert!(!block_id.hash.is_empty()); + assert_eq!(block_id.part_set_header.total, 1); + assert!(!block_id.part_set_header.hash.is_empty()); + let rfb = result_finalize_block.unwrap(); + assert!(rfb.validator_updates.is_empty()); + assert!(rfb.consensus_param_updates.is_none()); + assert!(rfb.events.is_empty()); + assert_eq!(rfb.app_hash.as_bytes(), &[6u8, 0, 0, 0, 0, 0, 0, 0]) + } else { + panic!("not a NewBlock event"); + } + assert_eq!(result.query, "tm.event = 'NewBlock'"); + }, + "subscribe_newblock_3" => { + let result = DeEvent::from_string(content).unwrap(); + if let EventData::NewBlock { + block, + block_id, + result_finalize_block, + } = result.data.into() + { + let b = block.unwrap(); + assert!(b.data.is_empty()); + assert!(b.evidence.iter().next().is_none()); + assert!(!b.header.app_hash.as_bytes().is_empty()); + assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); + assert!(!b.header.consensus_hash.is_empty()); + assert_eq!(b.header.data_hash, empty_merkle_root_hash); + assert_eq!(b.header.evidence_hash, empty_merkle_root_hash); + assert!(b.header.last_block_id.is_some()); + assert!(b.header.last_commit_hash.is_some()); + assert!(b.header.last_results_hash.is_some()); + assert!(!b.header.next_validators_hash.is_empty()); + assert_ne!( + b.header.proposer_address.as_bytes(), + [0u8; cometbft::account::LENGTH] + ); + assert!( + b.header + .time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(!b.header.validators_hash.is_empty()); + assert_eq!( + b.header.version, + cometbft::block::header::Version { block: 11, app: 1 } + ); + let last_commit = b.last_commit.unwrap(); + assert!(!last_commit.block_id.hash.is_empty()); + assert!(!last_commit.block_id.part_set_header.hash.is_empty()); + assert_eq!(last_commit.block_id.part_set_header.total, 1); + assert_eq!(last_commit.round.value(), 0); + assert_eq!(last_commit.signatures.len(), 1); + assert!(last_commit.signatures[0].is_commit()); + assert!(last_commit.signatures[0].validator_address().is_some()); + assert!(!block_id.hash.is_empty()); + assert_eq!(block_id.part_set_header.total, 1); + assert!(!block_id.part_set_header.hash.is_empty()); + let rfb = result_finalize_block.unwrap(); + assert!(rfb.validator_updates.is_empty()); + assert!(rfb.consensus_param_updates.is_none()); + assert!(rfb.events.is_empty()); + assert_eq!(rfb.app_hash.as_bytes(), &[6u8, 0, 0, 0, 0, 0, 0, 0]) + } else { + panic!("not a NewBlock event"); + } + assert_eq!(result.query, "tm.event = 'NewBlock'"); + }, + "subscribe_newblock_4" => { + let result = DeEvent::from_string(content).unwrap(); + if let EventData::NewBlock { + block, + block_id, + result_finalize_block, + } = result.data.into() + { + let b = block.unwrap(); + assert!(b.data.is_empty()); + assert!(b.evidence.iter().next().is_none()); + assert!(!b.header.app_hash.as_bytes().is_empty()); + assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); + assert!(!b.header.consensus_hash.is_empty()); + assert_eq!(b.header.data_hash, empty_merkle_root_hash); + assert_eq!(b.header.evidence_hash, empty_merkle_root_hash); + assert!(b.header.last_block_id.is_some()); + assert!(b.header.last_commit_hash.is_some()); + assert!(b.header.last_results_hash.is_some()); + assert!(!b.header.next_validators_hash.is_empty()); + assert_ne!( + b.header.proposer_address.as_bytes(), + [0u8; cometbft::account::LENGTH] + ); + assert!( + b.header + .time + .duration_since(informal_epoch) + .unwrap() + .as_secs() + > 0 + ); + assert!(!b.header.validators_hash.is_empty()); + assert_eq!( + b.header.version, + cometbft::block::header::Version { block: 11, app: 1 } + ); + let last_commit = b.last_commit.unwrap(); + assert!(!last_commit.block_id.hash.is_empty()); + assert!(!last_commit.block_id.part_set_header.hash.is_empty()); + assert_eq!(last_commit.block_id.part_set_header.total, 1); + assert_eq!(last_commit.round.value(), 0); + assert_eq!(last_commit.signatures.len(), 1); + assert!(last_commit.signatures[0].is_commit()); + assert!(last_commit.signatures[0].validator_address().is_some()); + assert!(!block_id.hash.is_empty()); + assert_eq!(block_id.part_set_header.total, 1); + assert!(!block_id.part_set_header.hash.is_empty()); + let rfb = result_finalize_block.unwrap(); + assert!(rfb.validator_updates.is_empty()); + assert!(rfb.consensus_param_updates.is_none()); + assert!(rfb.events.is_empty()); + assert_eq!(rfb.app_hash.as_bytes(), &[6u8, 0, 0, 0, 0, 0, 0, 0]) + } else { + panic!("not a NewBlock event"); + } + assert_eq!(result.query, "tm.event = 'NewBlock'"); + }, + "subscribe_txs" => { + assert!(endpoint::subscribe::Response::from_string(content).is_ok()); + }, + "subscribe_txs_0" => { + let result = DeEvent::from_string(content).unwrap(); + let height; + if let EventData::Tx { tx_result } = result.data.into() { + height = tx_result.height; + assert!(tx_result.result.log.is_none()); + assert!(tx_result.result.gas_wanted.is_none()); + assert!(tx_result.result.gas_used.is_none()); + assert_eq!(tx_result.result.events.len(), 2); + assert_eq!(tx_result.result.events[0].kind, "app"); + for attr in &tx_result.result.events[0].attributes { + match attr.key_str().unwrap() { + "creator" => { + assert_eq!(attr.value_str().unwrap(), "Cosmoshi Netowoko") + }, + "key" => assert_eq!(attr.value_str().unwrap(), "tx0"), + "index_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + "noindex_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + other => panic!("unknown attribute found {other}"), + } + } + assert_eq!(tx_result.tx, base64::decode("dHgwPXZhbHVl").unwrap()); + } else { + panic!("not a tx"); + } + check_event_attrs(&result.events.unwrap(), "tx0", height); + assert_eq!(result.query, "tm.event = 'Tx'"); + }, + "subscribe_txs_1" => { + let result = DeEvent::from_string(content).unwrap(); + let height; + if let EventData::Tx { tx_result } = result.data.into() { + height = tx_result.height; + assert!(tx_result.result.log.is_none()); + assert!(tx_result.result.gas_wanted.is_none()); + assert!(tx_result.result.gas_used.is_none()); + assert_eq!(tx_result.result.events.len(), 2); + assert_eq!(tx_result.result.events[0].kind, "app"); + for attr in &tx_result.result.events[0].attributes { + match attr.key_str().unwrap() { + "creator" => { + assert_eq!(attr.value_str().unwrap(), "Cosmoshi Netowoko") + }, + "key" => assert_eq!(attr.value_str().unwrap(), "tx1"), + "index_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + "noindex_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + other => panic!("unknown attribute found {other}"), + } + } + assert_eq!(tx_result.tx, base64::decode("dHgxPXZhbHVl").unwrap()); + } else { + panic!("not a tx"); + } + + check_event_attrs(&result.events.unwrap(), "tx1", height); + assert_eq!(result.query, "tm.event = 'Tx'"); + }, + "subscribe_txs_2" => { + let result = DeEvent::from_string(content).unwrap(); + let height; + if let EventData::Tx { tx_result } = result.data.into() { + height = tx_result.height; + assert!(tx_result.result.log.is_none()); + assert!(tx_result.result.gas_wanted.is_none()); + assert!(tx_result.result.gas_used.is_none()); + assert_eq!(tx_result.result.events.len(), 2); + assert_eq!(tx_result.result.events[0].kind, "app"); + for attr in &tx_result.result.events[0].attributes { + match attr.key_str().unwrap() { + "creator" => { + assert_eq!(attr.value_str().unwrap(), "Cosmoshi Netowoko") + }, + "key" => assert_eq!(attr.value_str().unwrap(), "tx2"), + "index_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + "noindex_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + other => panic!("unknown attribute found {other}"), + } + } + assert_eq!(tx_result.tx, base64::decode("dHgyPXZhbHVl").unwrap()); + } else { + panic!("not a tx"); + } + check_event_attrs(&result.events.unwrap(), "tx2", height); + assert_eq!(result.query, "tm.event = 'Tx'"); + }, + "subscribe_txs_3" => { + let result = DeEvent::from_string(content).unwrap(); + let height; + if let EventData::Tx { tx_result } = result.data.into() { + height = tx_result.height; + assert!(tx_result.result.log.is_none()); + assert!(tx_result.result.gas_wanted.is_none()); + assert!(tx_result.result.gas_used.is_none()); + assert_eq!(tx_result.result.events.len(), 2); + assert_eq!(tx_result.result.events[0].kind, "app"); + for attr in &tx_result.result.events[0].attributes { + match attr.key_str().unwrap() { + "creator" => { + assert_eq!(attr.value_str().unwrap(), "Cosmoshi Netowoko") + }, + "key" => assert_eq!(attr.value_str().unwrap(), "tx3"), + "index_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + "noindex_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + other => panic!("unknown attribute found {other}"), + } + } + assert_eq!(tx_result.tx, base64::decode("dHgzPXZhbHVl").unwrap()); + } else { + panic!("not a tx"); + } + check_event_attrs(&result.events.unwrap(), "tx3", height); + assert_eq!(result.query, "tm.event = 'Tx'"); + }, + "subscribe_txs_4" => { + let result = DeEvent::from_string(content).unwrap(); + let height; + if let EventData::Tx { tx_result } = result.data.into() { + height = tx_result.height; + assert!(tx_result.result.log.is_none()); + assert!(tx_result.result.gas_wanted.is_none()); + assert!(tx_result.result.gas_used.is_none()); + assert_eq!(tx_result.result.events.len(), 2); + assert_eq!(tx_result.result.events[0].kind, "app"); + for attr in &tx_result.result.events[0].attributes { + match attr.key_str().unwrap() { + "creator" => { + assert_eq!(attr.value_str().unwrap(), "Cosmoshi Netowoko") + }, + "key" => assert_eq!(attr.value_str().unwrap(), "tx4"), + "index_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + "noindex_key" => { + assert_eq!(attr.value_str().unwrap(), "index is working") + }, + other => panic!("unknown attribute found {other}"), + } + } + assert_eq!(tx_result.tx, base64::decode("dHg0PXZhbHVl").unwrap()); + } else { + panic!("not a tx"); + } + 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, abci::Code::Ok); + assert!(result.data.is_empty()); + assert_ne!( + result.hash, + Hash::from_bytes(Algorithm::Sha256, &[0; 32]).unwrap() + ); + assert!(result.log.is_empty()); + }, + "subscribe_txs_broadcast_tx_1" => { + let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); + assert_eq!(result.code, abci::Code::Ok); + assert!(result.data.is_empty()); + assert_ne!( + result.hash, + Hash::from_bytes(Algorithm::Sha256, &[0; 32]).unwrap() + ); + assert!(result.log.is_empty()); + }, + "subscribe_txs_broadcast_tx_2" => { + let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); + assert_eq!(result.code, abci::Code::Ok); + assert!(result.data.is_empty()); + assert_ne!( + result.hash, + Hash::from_bytes(Algorithm::Sha256, &[0; 32]).unwrap() + ); + assert!(result.log.is_empty()); + }, + "subscribe_txs_broadcast_tx_3" => { + let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); + assert_eq!(result.code, abci::Code::Ok); + assert!(result.data.is_empty()); + assert_ne!( + result.hash, + Hash::from_bytes(Algorithm::Sha256, &[0; 32]).unwrap() + ); + assert!(result.log.is_empty()); + }, + "subscribe_txs_broadcast_tx_4" => { + let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); + assert_eq!(result.code, abci::Code::Ok); + assert!(result.data.is_empty()); + assert_ne!( + result.hash, + Hash::from_bytes(Algorithm::Sha256, &[0; 32]).unwrap() + ); + assert!(result.log.is_empty()); + }, + "subscribe_txs_broadcast_tx_5" => { + let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); + assert_eq!(result.code, abci::Code::Ok); + assert!(result.data.is_empty()); + assert_ne!( + result.hash, + Hash::from_bytes(Algorithm::Sha256, &[0; 32]).unwrap() + ); + assert!(result.log.is_empty()); + }, + "tx" => { + let result = endpoint::tx::Response::from_string(content).unwrap(); + assert_eq!( + result.hash, + Hash::from_bytes( + Algorithm::Sha256, + &[ + 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 + ] + ) + .unwrap() + ); + assert_eq!(u64::from(result.height), 12u64); + }, + "tx_search_no_prove" => { + let result = endpoint::tx_search::Response::from_string(content).unwrap(); + assert_eq!(result.total_count as usize, result.txs.len()); + // 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, abci::Code::Ok); + assert_eq!(tx.tx_result.events.len(), 2); + assert_eq!(tx.tx_result.events[0].kind, "app"); + assert_eq!(tx.tx_result.gas_used, 0); + assert_eq!(tx.tx_result.gas_wanted, 0); + assert!(tx.tx_result.info.to_string().is_empty()); + assert!(tx.tx_result.log.is_empty()); + assert!(tx.proof.is_none()); + } + }, + "tx_search_with_prove" => { + let result = endpoint::tx_search::Response::from_string(content).unwrap(); + assert_eq!(result.total_count as usize, result.txs.len()); + // 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, abci::Code::Ok); + assert_eq!(tx.tx_result.events.len(), 2); + assert_eq!(tx.tx_result.events[0].kind, "app"); + assert_eq!(tx.tx_result.gas_used, 0); + assert_eq!(tx.tx_result.gas_wanted, 0); + assert!(tx.tx_result.info.to_string().is_empty()); + assert!(tx.tx_result.log.is_empty()); + let proof = tx.proof.unwrap(); + assert_eq!(proof.data, tx.tx); + assert_eq!(proof.proof.total, 1); + assert_eq!(proof.proof.index, 0); + assert_ne!(proof.root_hash.as_bytes(), [0; 32]); + } + }, + _ => { + panic!("cannot parse file name: {file_name}"); + }, + } + } +} + +fn check_event_attrs(events: &HashMap>, app_key: &str, height: i64) { + for (k, v) in events { + match k.as_str() { + "app.creator" => { + assert_eq!(v.len(), 2); + assert_eq!(v[0], "Cosmoshi Netowoko"); + }, + "app.index_key" => { + assert_eq!(v.len(), 2); + assert_eq!(v[0], "index is working"); + }, + "app.key" => { + assert_eq!(v.len(), 2); + assert_eq!(v[0], app_key); + }, + "app.noindex_key" => { + assert_eq!(v.len(), 2); + assert_eq!(v[0], "index is working"); + }, + "tm.event" => { + assert_eq!(v.len(), 1); + assert_eq!(v[0], "Tx"); + }, + "tx.hash" => { + assert_eq!(v.len(), 1); + assert_eq!(v[0].len(), 64); + }, + "tx.height" => { + assert_eq!(v.len(), 1); + assert_eq!(v[0], height.to_string()); + }, + _ => panic!("unknown event found {k}"), + } + } +} diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/abci_info.json b/rpc/tests/kvstore_fixtures/v1/incoming/abci_info.json new file mode 100644 index 00000000..e755773d --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/abci_info.json @@ -0,0 +1,13 @@ +{ + "id": "019a7d69-6c2e-4ce0-b2aa-2b6a5e658ba2", + "jsonrpc": "2.0", + "result": { + "response": { + "app_version": "1", + "data": "{\"size\":0}", + "last_block_app_hash": "AAAAAAAAAAA=", + "last_block_height": "24", + "version": "2.1.0" + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/abci_query_with_existing_key.json b/rpc/tests/kvstore_fixtures/v1/incoming/abci_query_with_existing_key.json new file mode 100644 index 00000000..f6956027 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/abci_query_with_existing_key.json @@ -0,0 +1,17 @@ +{ + "id": "dd2ba505-6045-4cac-90b7-4544c9ba3f3a", + "jsonrpc": "2.0", + "result": { + "response": { + "code": 0, + "codespace": "", + "height": "79", + "index": "0", + "info": "", + "key": "dHgw", + "log": "exists", + "proofOps": null, + "value": "dmFsdWU=" + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/abci_query_with_non_existent_key.json b/rpc/tests/kvstore_fixtures/v1/incoming/abci_query_with_non_existent_key.json new file mode 100644 index 00000000..e0581619 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/abci_query_with_non_existent_key.json @@ -0,0 +1,17 @@ +{ + "id": "7aa9b998-facb-4fcc-b981-0d13b3ec0030", + "jsonrpc": "2.0", + "result": { + "response": { + "code": 0, + "codespace": "", + "height": "26", + "index": "0", + "info": "", + "key": "bm9uX2V4aXN0ZW50X2tleQ==", + "log": "does not exist", + "proofOps": null, + "value": null + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_0.json b/rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_0.json new file mode 100644 index 00000000..a98d2f15 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_0.json @@ -0,0 +1,9 @@ +{ + "error": { + "code": -32603, + "data": "height must be greater than 0, but got 0", + "message": "Internal error" + }, + "id": "f66f964b-01f8-45a2-af12-735486b0e703", + "jsonrpc": "2.0" +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_1.json b/rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_1.json new file mode 100644 index 00000000..ce0b5ddb --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_1.json @@ -0,0 +1,58 @@ +{ + "id": "59f1d68e-65ad-41e9-950f-010cf3a1d58b", + "jsonrpc": "2.0", + "result": { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "1", + "last_block_id": { + "hash": "", + "parts": { + "hash": "", + "total": 0 + } + }, + "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:39.861132656Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "", + "parts": { + "hash": "", + "total": 0 + } + }, + "height": "0", + "round": 0, + "signatures": [] + } + }, + "block_id": { + "hash": "9968D641711D6A01FE9A889FB9924124F942ACDB255C80FA9C07B504BE70B778", + "parts": { + "hash": "4E5D1578F0E576D2C8AC819DC5DFC092D1CA3442E61D330A5653EA4DAE248250", + "total": 1 + } + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_10.json b/rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_10.json new file mode 100644 index 00000000..4ae777b6 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/block_at_height_10.json @@ -0,0 +1,65 @@ +{ + "id": "7c51db63-99f1-4d59-8d88-9558f871ceda", + "jsonrpc": "2.0", + "result": { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "10", + "last_block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + }, + "last_commit_hash": "2C33C85C8D599EC432CA03B33CC6B06B3ADA2460D4635696A74DD33314310B12", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:44.920428185Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + }, + "height": "9", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "XmRIt73/YJIsmMg7zveVrp++d8UU16OFz2TBLHCKRRPuNGlwyLyAgoNkbyWitkVUHCjAdKnJzt5rcXaRP8eOAA==", + "timestamp": "2025-06-30T10:04:44.920428185Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "582DDEDEAC10340AE0EC8327BA20AB5C9EE98C295AA6721688923325B6C66B0B", + "parts": { + "hash": "54F1AD38474F2F1F6BC9E2E9079E62CBCD13B55343C7E1674A939CD9BA709DA3", + "total": 1 + } + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/block_by_hash.json b/rpc/tests/kvstore_fixtures/v1/incoming/block_by_hash.json new file mode 100644 index 00000000..cd740a45 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/block_by_hash.json @@ -0,0 +1,65 @@ +{ + "id": "5d661158-58c0-41dd-a863-54d2e9d750c8", + "jsonrpc": "2.0", + "result": { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "10", + "last_block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + }, + "last_commit_hash": "2C33C85C8D599EC432CA03B33CC6B06B3ADA2460D4635696A74DD33314310B12", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:44.920428185Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + }, + "height": "9", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "XmRIt73/YJIsmMg7zveVrp++d8UU16OFz2TBLHCKRRPuNGlwyLyAgoNkbyWitkVUHCjAdKnJzt5rcXaRP8eOAA==", + "timestamp": "2025-06-30T10:04:44.920428185Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "582DDEDEAC10340AE0EC8327BA20AB5C9EE98C295AA6721688923325B6C66B0B", + "parts": { + "hash": "54F1AD38474F2F1F6BC9E2E9079E62CBCD13B55343C7E1674A939CD9BA709DA3", + "total": 1 + } + } + } +} diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/block_results_at_height_10.json b/rpc/tests/kvstore_fixtures/v1/incoming/block_results_at_height_10.json new file mode 100644 index 00000000..a7018a40 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/block_results_at_height_10.json @@ -0,0 +1,12 @@ +{ + "id": "f5430943-ccb0-4609-9b48-32cb9fd7cfca", + "jsonrpc": "2.0", + "result": { + "app_hash": "AAAAAAAAAAA=", + "consensus_param_updates": null, + "finalize_block_events": null, + "height": "10", + "txs_results": null, + "validator_updates": null + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/block_search.json b/rpc/tests/kvstore_fixtures/v1/incoming/block_search.json new file mode 100644 index 00000000..20a8a482 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/block_search.json @@ -0,0 +1,2266 @@ +{ + "id": "142c382d-fc00-4522-8dc9-17a27940011e", + "jsonrpc": "2.0", + "result": { + "blocks": [ + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "2", + "last_block_id": { + "hash": "9968D641711D6A01FE9A889FB9924124F942ACDB255C80FA9C07B504BE70B778", + "parts": { + "hash": "4E5D1578F0E576D2C8AC819DC5DFC092D1CA3442E61D330A5653EA4DAE248250", + "total": 1 + } + }, + "last_commit_hash": "54CA5483732C756ABAED35D1A337D07A82216357ACC88618168386A3F3C8095A", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:40.68217849Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "9968D641711D6A01FE9A889FB9924124F942ACDB255C80FA9C07B504BE70B778", + "parts": { + "hash": "4E5D1578F0E576D2C8AC819DC5DFC092D1CA3442E61D330A5653EA4DAE248250", + "total": 1 + } + }, + "height": "1", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "qlMvUK7ptY5BhDEHaPXDjwJ/Wzced2wxDksOf/keEp1p0ESguIAtb7CLaUgt7g1ebd1ls6PkXGk8iVBOvSEaDA==", + "timestamp": "2025-06-30T10:04:40.68217849Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "613FCF16B64668D223E35B22A8ED4F36C831C539C583886773DE6BA79354BADA", + "parts": { + "hash": "E0245CA6FDA925E4FE90A9B531B1D9BB448E2A478CB196563614F3E46A2D232D", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "3", + "last_block_id": { + "hash": "613FCF16B64668D223E35B22A8ED4F36C831C539C583886773DE6BA79354BADA", + "parts": { + "hash": "E0245CA6FDA925E4FE90A9B531B1D9BB448E2A478CB196563614F3E46A2D232D", + "total": 1 + } + }, + "last_commit_hash": "E2DF88EF6211F240DA9A47D74D550CDA83420B79F63A04063BAE0651CE036163", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:41.201574422Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "613FCF16B64668D223E35B22A8ED4F36C831C539C583886773DE6BA79354BADA", + "parts": { + "hash": "E0245CA6FDA925E4FE90A9B531B1D9BB448E2A478CB196563614F3E46A2D232D", + "total": 1 + } + }, + "height": "2", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "L2CoFYctz5g9X7Nw1vxEVuqG4ZApFRZbgBwE1HJwX71oBYZF0TWAFK5gnpakfMDrTGp488in+xdEClQR6BdHDQ==", + "timestamp": "2025-06-30T10:04:41.201574422Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "01E9F7D5059230D75165A444B80F91D2EC412BDAED57DD08D28506E73988887A", + "parts": { + "hash": "A046FB8D73BCB470070484B391B5470F99A07E2691362B0AF94FFF7EF443E4ED", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "4", + "last_block_id": { + "hash": "01E9F7D5059230D75165A444B80F91D2EC412BDAED57DD08D28506E73988887A", + "parts": { + "hash": "A046FB8D73BCB470070484B391B5470F99A07E2691362B0AF94FFF7EF443E4ED", + "total": 1 + } + }, + "last_commit_hash": "B9FC57F81A020250C6A4391C046737A8BE94BC51BCAA65CAED761243FD39DE67", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:41.727065831Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "01E9F7D5059230D75165A444B80F91D2EC412BDAED57DD08D28506E73988887A", + "parts": { + "hash": "A046FB8D73BCB470070484B391B5470F99A07E2691362B0AF94FFF7EF443E4ED", + "total": 1 + } + }, + "height": "3", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "drukR8mzf6BVnDhV6prsVgQIgAiaafOZ3CAREVZ19alRYa/BEX4v7pT7FXOl7ICduB+LlIB4DA+mCCpBcfU3Aw==", + "timestamp": "2025-06-30T10:04:41.727065831Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "1E0E8CAC9968821AF396F2D8EB58547E75AF9793C6A813172C48F3CBABCDF72F", + "parts": { + "hash": "40EC197515342D556946B1F6C482C90D1CB0B6D5B38C68D343278459E3994C78", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "5", + "last_block_id": { + "hash": "1E0E8CAC9968821AF396F2D8EB58547E75AF9793C6A813172C48F3CBABCDF72F", + "parts": { + "hash": "40EC197515342D556946B1F6C482C90D1CB0B6D5B38C68D343278459E3994C78", + "total": 1 + } + }, + "last_commit_hash": "0B0C26C869774E9423CD0055D3D64C2D28C7C3F74D29956F1AF1DD16EA7B8BE7", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:42.252095694Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "1E0E8CAC9968821AF396F2D8EB58547E75AF9793C6A813172C48F3CBABCDF72F", + "parts": { + "hash": "40EC197515342D556946B1F6C482C90D1CB0B6D5B38C68D343278459E3994C78", + "total": 1 + } + }, + "height": "4", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "vzNDHqFCTUw4WY+BwY/9GqLQqzf54VVH9e9Sb4xzJO7BwsHLKrqyJMHzQH2yGz7bH6cEucO++Xu1ucv38xE2Bw==", + "timestamp": "2025-06-30T10:04:42.252095694Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "63F90A36D57D3436433D36949FD26F4B3BC8AD2AAD933BFE72F050AA679360C7", + "parts": { + "hash": "14F2315C58ADD4539D1BA809E39E40795320D6C7883465EA2DF2F4FD8EE84F3A", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "6", + "last_block_id": { + "hash": "63F90A36D57D3436433D36949FD26F4B3BC8AD2AAD933BFE72F050AA679360C7", + "parts": { + "hash": "14F2315C58ADD4539D1BA809E39E40795320D6C7883465EA2DF2F4FD8EE84F3A", + "total": 1 + } + }, + "last_commit_hash": "EBE84E6F7D93E6718E2D05D5D0EE1AFC7FEE2BA7581FB2E20DBA570C7D71A0C8", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:42.783468828Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "63F90A36D57D3436433D36949FD26F4B3BC8AD2AAD933BFE72F050AA679360C7", + "parts": { + "hash": "14F2315C58ADD4539D1BA809E39E40795320D6C7883465EA2DF2F4FD8EE84F3A", + "total": 1 + } + }, + "height": "5", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "I3cIOU/eVlIRp2gVQepnRXk/NNWEGc+iSPl+YXVFJm5yQHgSeA5mV9xQxrLiCg8t0XOfACnyHTIf9Xpm0ckADA==", + "timestamp": "2025-06-30T10:04:42.783468828Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "DBC025C32CBCAC0F25EB0A15F697DF9F0A1BF31739AC71B8B97B837A22E0CD79", + "parts": { + "hash": "C1B424EE84E5769334453C1ADFDA3969EC385D49D07A639C8F4CAE1ABE4765A3", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "7", + "last_block_id": { + "hash": "DBC025C32CBCAC0F25EB0A15F697DF9F0A1BF31739AC71B8B97B837A22E0CD79", + "parts": { + "hash": "C1B424EE84E5769334453C1ADFDA3969EC385D49D07A639C8F4CAE1ABE4765A3", + "total": 1 + } + }, + "last_commit_hash": "1278600811069839FEEC4457762CAFD0270B84D2DEED67E3A81FB7B4473BFEA2", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:43.316070099Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "DBC025C32CBCAC0F25EB0A15F697DF9F0A1BF31739AC71B8B97B837A22E0CD79", + "parts": { + "hash": "C1B424EE84E5769334453C1ADFDA3969EC385D49D07A639C8F4CAE1ABE4765A3", + "total": 1 + } + }, + "height": "6", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "gr68Aw8+kv6hfj2pi1+qfMWCcBrB1pOLf1fisR46qkk1ENevbPY98ZZi8d2KU1iuVO89VTvkIpxTxnab8S/0CA==", + "timestamp": "2025-06-30T10:04:43.316070099Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "28A9717277DEFD64EC268A47383C29F0F554B760E21C3DDAE9382B163239C1AA", + "parts": { + "hash": "BE4585A6BF98CB46AAD727A743841C516B37B01FC7BC5EC12BABCB6C550C22BB", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "8", + "last_block_id": { + "hash": "28A9717277DEFD64EC268A47383C29F0F554B760E21C3DDAE9382B163239C1AA", + "parts": { + "hash": "BE4585A6BF98CB46AAD727A743841C516B37B01FC7BC5EC12BABCB6C550C22BB", + "total": 1 + } + }, + "last_commit_hash": "11011B966D202D466C61191D06FBEA40C32C182A3B326F0E3CA5D18577E328D0", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:43.858573218Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "28A9717277DEFD64EC268A47383C29F0F554B760E21C3DDAE9382B163239C1AA", + "parts": { + "hash": "BE4585A6BF98CB46AAD727A743841C516B37B01FC7BC5EC12BABCB6C550C22BB", + "total": 1 + } + }, + "height": "7", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "lDs958dr1zGQgSncL6vj/67iJb9Zx1VcYtCN/nPZVPHzDxAE7ZE0QLp2VnvNaZYekYYZ2x/0KR+wdsrBYDHkDg==", + "timestamp": "2025-06-30T10:04:43.858573218Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "AA4A1E74AFA7D274D60BB0CAFD025740C54F5220F4850B26E6C805F6DD0B9A93", + "parts": { + "hash": "0F256BACF2A619A534124A6E029489C86608DD739CBF9FA2D8B9AF33EB2B87A6", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "9", + "last_block_id": { + "hash": "AA4A1E74AFA7D274D60BB0CAFD025740C54F5220F4850B26E6C805F6DD0B9A93", + "parts": { + "hash": "0F256BACF2A619A534124A6E029489C86608DD739CBF9FA2D8B9AF33EB2B87A6", + "total": 1 + } + }, + "last_commit_hash": "3F3EF1472476E478726E2ABD2DCE6BB50D5106683CD607B94CF75F29160AC3BC", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:44.391196114Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "AA4A1E74AFA7D274D60BB0CAFD025740C54F5220F4850B26E6C805F6DD0B9A93", + "parts": { + "hash": "0F256BACF2A619A534124A6E029489C86608DD739CBF9FA2D8B9AF33EB2B87A6", + "total": 1 + } + }, + "height": "8", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "Ix/EgpIVGUYexuhE7E8c3K0476EuGspSS/MIAPUepbMUOTvPRQ7ncIFrpZyleKWM93sdqCugFxomn4dowPSmDg==", + "timestamp": "2025-06-30T10:04:44.391196114Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "10", + "last_block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + }, + "last_commit_hash": "2C33C85C8D599EC432CA03B33CC6B06B3ADA2460D4635696A74DD33314310B12", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:44.920428185Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + }, + "height": "9", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "XmRIt73/YJIsmMg7zveVrp++d8UU16OFz2TBLHCKRRPuNGlwyLyAgoNkbyWitkVUHCjAdKnJzt5rcXaRP8eOAA==", + "timestamp": "2025-06-30T10:04:44.920428185Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "582DDEDEAC10340AE0EC8327BA20AB5C9EE98C295AA6721688923325B6C66B0B", + "parts": { + "hash": "54F1AD38474F2F1F6BC9E2E9079E62CBCD13B55343C7E1674A939CD9BA709DA3", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "11", + "last_block_id": { + "hash": "582DDEDEAC10340AE0EC8327BA20AB5C9EE98C295AA6721688923325B6C66B0B", + "parts": { + "hash": "54F1AD38474F2F1F6BC9E2E9079E62CBCD13B55343C7E1674A939CD9BA709DA3", + "total": 1 + } + }, + "last_commit_hash": "4D580C4A799EAFC55F79D4E247B231202CAB29E92301F86B0AF85A2578E81211", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:45.480224058Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "582DDEDEAC10340AE0EC8327BA20AB5C9EE98C295AA6721688923325B6C66B0B", + "parts": { + "hash": "54F1AD38474F2F1F6BC9E2E9079E62CBCD13B55343C7E1674A939CD9BA709DA3", + "total": 1 + } + }, + "height": "10", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "qU1zfo7wqAgCM+LpaoN+BUH4SPKxrfDSV+G6x9SScC0UIFDWZRqG+PWnDNZkteDu1tFPzWQb4rc+9ZERMtzpDA==", + "timestamp": "2025-06-30T10:04:45.480224058Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "632E914F8790C137915CD9451D77DBE04F42F2F20A6942260585A84D141DE904", + "parts": { + "hash": "05D6FAA60CF813531F70AEFD7479F2CC8F78249A19A375DC854944AC3804CF2B", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "12", + "last_block_id": { + "hash": "632E914F8790C137915CD9451D77DBE04F42F2F20A6942260585A84D141DE904", + "parts": { + "hash": "05D6FAA60CF813531F70AEFD7479F2CC8F78249A19A375DC854944AC3804CF2B", + "total": 1 + } + }, + "last_commit_hash": "8958F5DB8A30833079361033CC27BD1716BAB3B4AD488B46DA46D66B66298243", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:46.056318218Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "632E914F8790C137915CD9451D77DBE04F42F2F20A6942260585A84D141DE904", + "parts": { + "hash": "05D6FAA60CF813531F70AEFD7479F2CC8F78249A19A375DC854944AC3804CF2B", + "total": 1 + } + }, + "height": "11", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "5RRHOeFN1xZRPMYFruCp1wf8VqN8EfC0f2qiTJEhxS8Hlc3xNnZm3PTxnYfbAnG1xKOCDC3Ph0b7OaWA9iqrDw==", + "timestamp": "2025-06-30T10:04:46.056318218Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "F6DA83B14C485FCE495D03AF979913318F0B9CF607F90383F71157F82AB4B38F", + "parts": { + "hash": "AD777E9C247D551562CC70D40CDD1F1BBF43E998CFA97CFE2656B957F74987ED", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "13", + "last_block_id": { + "hash": "F6DA83B14C485FCE495D03AF979913318F0B9CF607F90383F71157F82AB4B38F", + "parts": { + "hash": "AD777E9C247D551562CC70D40CDD1F1BBF43E998CFA97CFE2656B957F74987ED", + "total": 1 + } + }, + "last_commit_hash": "2ADA2D46EE2995250AAD70D83FB7A9589FE361CA39230FBFAF293153841FC475", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:46.595649347Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "F6DA83B14C485FCE495D03AF979913318F0B9CF607F90383F71157F82AB4B38F", + "parts": { + "hash": "AD777E9C247D551562CC70D40CDD1F1BBF43E998CFA97CFE2656B957F74987ED", + "total": 1 + } + }, + "height": "12", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "3GXyOGZfaG4Wrfmu4JPSE6fOlv6S4dQiGdNvbgSeZzj1TMEdXcROFpSkt271EtjhA64Sex1+C/gWc4yXvELWCg==", + "timestamp": "2025-06-30T10:04:46.595649347Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "13B4192B4BBC083A5D4481938F842631BA70B3BD30D70279EC50156B47D88D69", + "parts": { + "hash": "54C479C72B531F143BBC2FFA32B188AB29D70ECFBB5FCC8BC556651E844528DA", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "14", + "last_block_id": { + "hash": "13B4192B4BBC083A5D4481938F842631BA70B3BD30D70279EC50156B47D88D69", + "parts": { + "hash": "54C479C72B531F143BBC2FFA32B188AB29D70ECFBB5FCC8BC556651E844528DA", + "total": 1 + } + }, + "last_commit_hash": "C4673708482166D7B1576CC4BCD71B1C1EE90F7C8C187807B2027CE69F3F5C42", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:47.12708394Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "13B4192B4BBC083A5D4481938F842631BA70B3BD30D70279EC50156B47D88D69", + "parts": { + "hash": "54C479C72B531F143BBC2FFA32B188AB29D70ECFBB5FCC8BC556651E844528DA", + "total": 1 + } + }, + "height": "13", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "u8PS3epWvKEA5wjKIFmOI4WBCIvz2mFpP0BrsUufPMu+IzElF5zNVD464DLObc4XcexvPTF63OSabA+RW49DCg==", + "timestamp": "2025-06-30T10:04:47.12708394Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "EA32A7CF0053F8B1F7EBB1D6D8DF2876C2F6DAF8F043DE8AF98D0B18DEE46E12", + "parts": { + "hash": "991D485ADC826811787BA88CD9C3FD1346A02F1C1D6CA6473203F71FF3378A10", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "15", + "last_block_id": { + "hash": "EA32A7CF0053F8B1F7EBB1D6D8DF2876C2F6DAF8F043DE8AF98D0B18DEE46E12", + "parts": { + "hash": "991D485ADC826811787BA88CD9C3FD1346A02F1C1D6CA6473203F71FF3378A10", + "total": 1 + } + }, + "last_commit_hash": "2D5886D64109534848703A00C95EC2FA8515F689747C688D46081C7C78A9FDBC", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:47.668357714Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "EA32A7CF0053F8B1F7EBB1D6D8DF2876C2F6DAF8F043DE8AF98D0B18DEE46E12", + "parts": { + "hash": "991D485ADC826811787BA88CD9C3FD1346A02F1C1D6CA6473203F71FF3378A10", + "total": 1 + } + }, + "height": "14", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "jM/9gkXi7R0UZUY2mf4sY1Kz7hK7/MrhONZkcbDbqs1CP9RG4R0Zz9+ZkdT60z6sQtZTqoRYmMxIJIcRuGxpCA==", + "timestamp": "2025-06-30T10:04:47.668357714Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "306D04E6054EE69296F885553F114E317090DE7A62C4F42B0E9A72ADFED6095F", + "parts": { + "hash": "0A37D46A7646C63152C94B16AFFEE04CE6F1E7C3043FAF703442B083311231F1", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "16", + "last_block_id": { + "hash": "306D04E6054EE69296F885553F114E317090DE7A62C4F42B0E9A72ADFED6095F", + "parts": { + "hash": "0A37D46A7646C63152C94B16AFFEE04CE6F1E7C3043FAF703442B083311231F1", + "total": 1 + } + }, + "last_commit_hash": "39A444B87AB00DC145C3429F86BCADD3C1585A9F6FFE3D3F7BECDF6D112115A6", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:48.205965492Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "306D04E6054EE69296F885553F114E317090DE7A62C4F42B0E9A72ADFED6095F", + "parts": { + "hash": "0A37D46A7646C63152C94B16AFFEE04CE6F1E7C3043FAF703442B083311231F1", + "total": 1 + } + }, + "height": "15", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "t0Yd0cUALAITSqGakFjojcVUedCDWhJmhIHtgsCUNpjcRtbmGShVByYulvomj2grq0KMK0xlV0XdmbLeLNSRBA==", + "timestamp": "2025-06-30T10:04:48.205965492Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "F9FD28FA53EECF5E3C2B6A1323D3CC01014D99A344336F463301F40FBF97325B", + "parts": { + "hash": "7F8290F1BC1E2DDCF265B634DFA3D3EC9F84188B377597D904B17397A5859333", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "17", + "last_block_id": { + "hash": "F9FD28FA53EECF5E3C2B6A1323D3CC01014D99A344336F463301F40FBF97325B", + "parts": { + "hash": "7F8290F1BC1E2DDCF265B634DFA3D3EC9F84188B377597D904B17397A5859333", + "total": 1 + } + }, + "last_commit_hash": "85EAA847383E0A49EF35BAF7BDE3CC15794A9FD90378A599BEAD16D7FB5D0227", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:48.727625239Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "F9FD28FA53EECF5E3C2B6A1323D3CC01014D99A344336F463301F40FBF97325B", + "parts": { + "hash": "7F8290F1BC1E2DDCF265B634DFA3D3EC9F84188B377597D904B17397A5859333", + "total": 1 + } + }, + "height": "16", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "3BR9Y44dpDX2A3UtTR9bpzKqeA4aIYZkbUQ//35vjnB9Lx19c+r4OB/kaKX7KzsxvyHKfddLv1cdNKIDbf0AAg==", + "timestamp": "2025-06-30T10:04:48.727625239Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "67FA47D50325379D121A535C75B0C9E59A9F2C98025D703A151D0F466ECAFB15", + "parts": { + "hash": "78F494C470E658F8CEA7816FD1BD729AAE19A2E2D4E9E749A069013BB9B100FE", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "18", + "last_block_id": { + "hash": "67FA47D50325379D121A535C75B0C9E59A9F2C98025D703A151D0F466ECAFB15", + "parts": { + "hash": "78F494C470E658F8CEA7816FD1BD729AAE19A2E2D4E9E749A069013BB9B100FE", + "total": 1 + } + }, + "last_commit_hash": "57471F112D7290F3C2C6CB5B5E64AAB47D9CE2B1861AC9F436C0E5E4C9FB54C0", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:49.260211134Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "67FA47D50325379D121A535C75B0C9E59A9F2C98025D703A151D0F466ECAFB15", + "parts": { + "hash": "78F494C470E658F8CEA7816FD1BD729AAE19A2E2D4E9E749A069013BB9B100FE", + "total": 1 + } + }, + "height": "17", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "sAz1NWfWx1sNzX3Dypt8JlEFkM4tDvkbOvgMpWPoel5tyhfecMESK2zJSg2IXvQ75VHi5IiUwIaAjimM3ikkCg==", + "timestamp": "2025-06-30T10:04:49.260211134Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "4F5B07E30D995AE33DE1D1B902C1134E315EABBAB7BCFFE3B25EF2223B5B0769", + "parts": { + "hash": "711D170CA52A57ED4D5B0FE63431A25BF427B6AA9A6E4E3E0B5162249F5BA2ED", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "19", + "last_block_id": { + "hash": "4F5B07E30D995AE33DE1D1B902C1134E315EABBAB7BCFFE3B25EF2223B5B0769", + "parts": { + "hash": "711D170CA52A57ED4D5B0FE63431A25BF427B6AA9A6E4E3E0B5162249F5BA2ED", + "total": 1 + } + }, + "last_commit_hash": "2DE7FA4D1032972ED81DDF9AD82B64AD4EE56C7729AD4BEC5A5241C504F73C6C", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:49.780492158Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "4F5B07E30D995AE33DE1D1B902C1134E315EABBAB7BCFFE3B25EF2223B5B0769", + "parts": { + "hash": "711D170CA52A57ED4D5B0FE63431A25BF427B6AA9A6E4E3E0B5162249F5BA2ED", + "total": 1 + } + }, + "height": "18", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "EKPksTmehpkxRKJ0evU/eJD8wG5e7CAmnBlm9OuLT/Kp2C5Yora7FM4PqCXEJJtrD8A+/44QfxRAeYPFPFAAAA==", + "timestamp": "2025-06-30T10:04:49.780492158Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "F22210B0B4233DA9FD14DFEDA6AD4D7B6FD1EF334AA31DC293E344A60E232C2A", + "parts": { + "hash": "25C7B1451BB9DF9DA7270B1F8CB4EAA43D786846595851BB91A04A10AECF5A52", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "20", + "last_block_id": { + "hash": "F22210B0B4233DA9FD14DFEDA6AD4D7B6FD1EF334AA31DC293E344A60E232C2A", + "parts": { + "hash": "25C7B1451BB9DF9DA7270B1F8CB4EAA43D786846595851BB91A04A10AECF5A52", + "total": 1 + } + }, + "last_commit_hash": "D2A45E161F0DA959993BD781CFFF53DB23430D22383B137F82AB5550537B52F7", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:50.313975313Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "F22210B0B4233DA9FD14DFEDA6AD4D7B6FD1EF334AA31DC293E344A60E232C2A", + "parts": { + "hash": "25C7B1451BB9DF9DA7270B1F8CB4EAA43D786846595851BB91A04A10AECF5A52", + "total": 1 + } + }, + "height": "19", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "P4FRv7nOrLwS/Si6kFQzv7tLNkRX0+jUjEJcaug3Ip6l27uxUHpNFv3BFHBx3ebCsK7mnPKDMyLGTDdHzD4KDA==", + "timestamp": "2025-06-30T10:04:50.313975313Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "025257ACFA0D4963EFEBAE142DAF3F59F4BA0523940D4B1F75B18DDE9C8DCB0B", + "parts": { + "hash": "C70414788B5B781E1978022302CE1F72B75930E16DAA1994AFE7F1C5537299FA", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "21", + "last_block_id": { + "hash": "025257ACFA0D4963EFEBAE142DAF3F59F4BA0523940D4B1F75B18DDE9C8DCB0B", + "parts": { + "hash": "C70414788B5B781E1978022302CE1F72B75930E16DAA1994AFE7F1C5537299FA", + "total": 1 + } + }, + "last_commit_hash": "7BD87BA23BF8C37929A536FECBB34D754A87005210313ACFAE79FD7310E8715E", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:50.850291204Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "025257ACFA0D4963EFEBAE142DAF3F59F4BA0523940D4B1F75B18DDE9C8DCB0B", + "parts": { + "hash": "C70414788B5B781E1978022302CE1F72B75930E16DAA1994AFE7F1C5537299FA", + "total": 1 + } + }, + "height": "20", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "xizccFf0aSlHkZdTxNInv6ioA+OM0bh7fejsIk2jERu1hpyPkZ8WxHedh02klAPXn28Kf981Jp+CB7qjZVxdAQ==", + "timestamp": "2025-06-30T10:04:50.850291204Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "A53FD87BBB220B7B9799ECD811C26FAA283E774BFF5045443F839B0A42A3B642", + "parts": { + "hash": "753912E1912903C32E7D9854BF05BF78790BACD8DC25BAB626FF8F1257A96ED9", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "22", + "last_block_id": { + "hash": "A53FD87BBB220B7B9799ECD811C26FAA283E774BFF5045443F839B0A42A3B642", + "parts": { + "hash": "753912E1912903C32E7D9854BF05BF78790BACD8DC25BAB626FF8F1257A96ED9", + "total": 1 + } + }, + "last_commit_hash": "82B07CDE07925EBD40C68A8C5DE1B72E02BCBE93D1FC28478BC94EBF8D0882DE", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:51.400258897Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "A53FD87BBB220B7B9799ECD811C26FAA283E774BFF5045443F839B0A42A3B642", + "parts": { + "hash": "753912E1912903C32E7D9854BF05BF78790BACD8DC25BAB626FF8F1257A96ED9", + "total": 1 + } + }, + "height": "21", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "dmpwtkup3daBwsmHKXTKPqx091DV3BsrslgGVQGFpLFK14chaiAwKNhZqaN736i78iLPl7+q61w+NkXj6N6sAg==", + "timestamp": "2025-06-30T10:04:51.400258897Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "2B56DE324A3FA2EF45C74DD7429633F6758D5E5B5B6B95979646013799596F74", + "parts": { + "hash": "6F6AAD04CBE2029361F265E4669364481E8B5FAB84042186D9CAABCC056E455B", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "23", + "last_block_id": { + "hash": "2B56DE324A3FA2EF45C74DD7429633F6758D5E5B5B6B95979646013799596F74", + "parts": { + "hash": "6F6AAD04CBE2029361F265E4669364481E8B5FAB84042186D9CAABCC056E455B", + "total": 1 + } + }, + "last_commit_hash": "E4DE33E99C8575DBD4502B915EC1C45CB6A17A60EC91BCC43E204A515AF2F11E", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:51.955390849Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "2B56DE324A3FA2EF45C74DD7429633F6758D5E5B5B6B95979646013799596F74", + "parts": { + "hash": "6F6AAD04CBE2029361F265E4669364481E8B5FAB84042186D9CAABCC056E455B", + "total": 1 + } + }, + "height": "22", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "4iSt+HE9o+JxkDe0D/VcCuhQGXZrYkBFvY2Nac3pGeqaMLX3JopGwnM7n0YW9r2qAGrsqtIoUlDhEoLdYEkPAA==", + "timestamp": "2025-06-30T10:04:51.955390849Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "E0384E5CA7C4B8E1996C21F62F5B5B5A1D4F4D975CE1620155EAE0B49A896A55", + "parts": { + "hash": "66432AA8EB85A766BFD69FC63F4489365FF5CCE894C3C431A6FF6294DAC25442", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "24", + "last_block_id": { + "hash": "E0384E5CA7C4B8E1996C21F62F5B5B5A1D4F4D975CE1620155EAE0B49A896A55", + "parts": { + "hash": "66432AA8EB85A766BFD69FC63F4489365FF5CCE894C3C431A6FF6294DAC25442", + "total": 1 + } + }, + "last_commit_hash": "30A248FB60C6374F99C6FB097545DCA75686BFF199D177F4C9183E1BA4ABCA22", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:52.509159497Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "E0384E5CA7C4B8E1996C21F62F5B5B5A1D4F4D975CE1620155EAE0B49A896A55", + "parts": { + "hash": "66432AA8EB85A766BFD69FC63F4489365FF5CCE894C3C431A6FF6294DAC25442", + "total": 1 + } + }, + "height": "23", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "m7210MjtfiD/m5glkDs4kSPhlvtngCL70RyJ4vt7jvbJbs4F5rVi1u96pcCj7KOV6ij0DOYTOqtTnztgg/bzCg==", + "timestamp": "2025-06-30T10:04:52.509159497Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "7820EF9463325661E960E6E964CC2708608E7E220BB6DEF49FD1BD4090A72D88", + "parts": { + "hash": "79864BD22E2F3AD947397CA5E0B72719F279420CA2747AD5921025B83250C187", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "25", + "last_block_id": { + "hash": "7820EF9463325661E960E6E964CC2708608E7E220BB6DEF49FD1BD4090A72D88", + "parts": { + "hash": "79864BD22E2F3AD947397CA5E0B72719F279420CA2747AD5921025B83250C187", + "total": 1 + } + }, + "last_commit_hash": "471B8248270056BA5D633A0979841BF2548C724FD8DCC9C65DBEE76F2C985299", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:53.041640933Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "7820EF9463325661E960E6E964CC2708608E7E220BB6DEF49FD1BD4090A72D88", + "parts": { + "hash": "79864BD22E2F3AD947397CA5E0B72719F279420CA2747AD5921025B83250C187", + "total": 1 + } + }, + "height": "24", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "IveEmZxuBzJ2I9YNiPV1V1arPaMlVzUfDEYW2kr0PWkL471XzNrr/nX9eCwDUnW0DMI3NTWJstUpsPMqOfu5CA==", + "timestamp": "2025-06-30T10:04:53.041640933Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "920AE47D2DA5C5A4ECD7736CBE133981D8C2BE379886AF562E0DC6248985E758", + "parts": { + "hash": "7F7AF24A9A1CA5D1380D9C0D4F048AF33BAE0EBEB462F3DA458879460059986E", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "26", + "last_block_id": { + "hash": "920AE47D2DA5C5A4ECD7736CBE133981D8C2BE379886AF562E0DC6248985E758", + "parts": { + "hash": "7F7AF24A9A1CA5D1380D9C0D4F048AF33BAE0EBEB462F3DA458879460059986E", + "total": 1 + } + }, + "last_commit_hash": "244F426B883D3A7E3B41F891C70117ABBA230DFAF0A5E65E04346890FE0BB151", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:53.574648541Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "920AE47D2DA5C5A4ECD7736CBE133981D8C2BE379886AF562E0DC6248985E758", + "parts": { + "hash": "7F7AF24A9A1CA5D1380D9C0D4F048AF33BAE0EBEB462F3DA458879460059986E", + "total": 1 + } + }, + "height": "25", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "dk4g+ps+5QJcAljImoQLBa5sHUfmotlT6yda+KKFHsGYidlre/00qXAoI9j1aFsT0UHhCAT6xvWf/3hPjYgZAg==", + "timestamp": "2025-06-30T10:04:53.574648541Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "59B6893D79EE6EB331F3FA45BA58103BEFC3B675DB0B83666B8150463A317515", + "parts": { + "hash": "813DFA249010A0E3BA79A37E476E9D7B4DFB876A630CEA952E968B2BEB1ED8A3", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "27", + "last_block_id": { + "hash": "59B6893D79EE6EB331F3FA45BA58103BEFC3B675DB0B83666B8150463A317515", + "parts": { + "hash": "813DFA249010A0E3BA79A37E476E9D7B4DFB876A630CEA952E968B2BEB1ED8A3", + "total": 1 + } + }, + "last_commit_hash": "CEA2A26F8DD93CCC0A11716464CA9B288A0DF994BA5AEA10D7713C0B81ACB749", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:54.112254445Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "59B6893D79EE6EB331F3FA45BA58103BEFC3B675DB0B83666B8150463A317515", + "parts": { + "hash": "813DFA249010A0E3BA79A37E476E9D7B4DFB876A630CEA952E968B2BEB1ED8A3", + "total": 1 + } + }, + "height": "26", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "GIb51cq7dWE8bAAX3DIoO2UBUgbvS5TyRCuzi5+Pbv2Nd/0tniVYkTeWacOtkaynx/6aaw9C28ToWi5ZN/4+Dg==", + "timestamp": "2025-06-30T10:04:54.112254445Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "91F3FD3DE3DFE10BA188866A629F62D9BB0F7C0F5F6489840AB205BCB0CFABAF", + "parts": { + "hash": "EA5152D5B088DDF9DB096B473A748EF1B8A684C234FEC15BD7DCEF86A4D75544", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "28", + "last_block_id": { + "hash": "91F3FD3DE3DFE10BA188866A629F62D9BB0F7C0F5F6489840AB205BCB0CFABAF", + "parts": { + "hash": "EA5152D5B088DDF9DB096B473A748EF1B8A684C234FEC15BD7DCEF86A4D75544", + "total": 1 + } + }, + "last_commit_hash": "EF24CF9F0BAC889204235BC2EDEF2072E41E757364F971370F8C21C154D1665A", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:54.647520493Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "91F3FD3DE3DFE10BA188866A629F62D9BB0F7C0F5F6489840AB205BCB0CFABAF", + "parts": { + "hash": "EA5152D5B088DDF9DB096B473A748EF1B8A684C234FEC15BD7DCEF86A4D75544", + "total": 1 + } + }, + "height": "27", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "V0TciZpy9cpkHL4vxZkzyI3CMRABxFqjkW7LQHs7CgZf+yzZkJuc3DIRp2JS01poNRwfAKn9i/11s8CmSCZvDw==", + "timestamp": "2025-06-30T10:04:54.647520493Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "F0004EDD716D1781142981DD7B26E24E2C699AF2882F0010B187D2B917FE9079", + "parts": { + "hash": "91E7ACF25914AF310BCF6DF175F1425AC6F272DC114CBA16F2E841AF3A0F6414", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "29", + "last_block_id": { + "hash": "F0004EDD716D1781142981DD7B26E24E2C699AF2882F0010B187D2B917FE9079", + "parts": { + "hash": "91E7ACF25914AF310BCF6DF175F1425AC6F272DC114CBA16F2E841AF3A0F6414", + "total": 1 + } + }, + "last_commit_hash": "EED17E736E918E175AA058E7070B114A3712F2439D11D43C06AEC641E70E0C47", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:55.189245895Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "F0004EDD716D1781142981DD7B26E24E2C699AF2882F0010B187D2B917FE9079", + "parts": { + "hash": "91E7ACF25914AF310BCF6DF175F1425AC6F272DC114CBA16F2E841AF3A0F6414", + "total": 1 + } + }, + "height": "28", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "sURQOK8tMmtATQdCF5IVBtHf+wbCwHsBLnpKgTVJU+lUn87oP5a8jGOgH3I4RfbbL37HgfOlztDNmuJ+4dhPDA==", + "timestamp": "2025-06-30T10:04:55.189245895Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "61C5FE27E2672168920155C3CF43C41407332D0819C4C7E0D3C03A6700FD9B4B", + "parts": { + "hash": "1066E59CA33B14E9B1AA6E6A5D289476ACA81530A4E3A702DCFD8765030DAB0A", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "30", + "last_block_id": { + "hash": "61C5FE27E2672168920155C3CF43C41407332D0819C4C7E0D3C03A6700FD9B4B", + "parts": { + "hash": "1066E59CA33B14E9B1AA6E6A5D289476ACA81530A4E3A702DCFD8765030DAB0A", + "total": 1 + } + }, + "last_commit_hash": "009C0580A2A47717FD0156D5C22043C3A7D52621C2C72CAA3674BA68254CD544", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:55.71526056Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "61C5FE27E2672168920155C3CF43C41407332D0819C4C7E0D3C03A6700FD9B4B", + "parts": { + "hash": "1066E59CA33B14E9B1AA6E6A5D289476ACA81530A4E3A702DCFD8765030DAB0A", + "total": 1 + } + }, + "height": "29", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "boYEebt0+7Vz1C5CevoCey+Ug/lX5IShYjMpabT16BH9xSQ53wBy/GGURdXiK6C6NgPsb567UluPJo7BHAZQDA==", + "timestamp": "2025-06-30T10:04:55.71526056Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "D7085BC66EDCDAE898F51B8B5A5859C44EFC06973E718F104DFCE7A71AEF347D", + "parts": { + "hash": "7FFC63442A2616AF4A093ED12D74967A7638DB06E0CE68CDDECC889A17C90DD1", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "31", + "last_block_id": { + "hash": "D7085BC66EDCDAE898F51B8B5A5859C44EFC06973E718F104DFCE7A71AEF347D", + "parts": { + "hash": "7FFC63442A2616AF4A093ED12D74967A7638DB06E0CE68CDDECC889A17C90DD1", + "total": 1 + } + }, + "last_commit_hash": "0DECD8D29C1C15149AB7C33C6CFF7844478F106B11DD0691096FC89AFC32EFD7", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:56.243254535Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "D7085BC66EDCDAE898F51B8B5A5859C44EFC06973E718F104DFCE7A71AEF347D", + "parts": { + "hash": "7FFC63442A2616AF4A093ED12D74967A7638DB06E0CE68CDDECC889A17C90DD1", + "total": 1 + } + }, + "height": "30", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "YaOCjjWOenop9UxcMNgTfoTkBnUvMtBSrVOjK0Yt0olhXXyywyyrF2o1zYmVXCbob9hcW9+Vefi7SSPNc69NCw==", + "timestamp": "2025-06-30T10:04:56.243254535Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "1C3DD827A8FC8295DB20894067F28EE75C3CE9A8C5C96E8AAE1DB218417C6C12", + "parts": { + "hash": "C81608B7A9866A538B29298C75832F4459098EA391652203E55B9C3A6206737C", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "32", + "last_block_id": { + "hash": "1C3DD827A8FC8295DB20894067F28EE75C3CE9A8C5C96E8AAE1DB218417C6C12", + "parts": { + "hash": "C81608B7A9866A538B29298C75832F4459098EA391652203E55B9C3A6206737C", + "total": 1 + } + }, + "last_commit_hash": "A9FBF03FADF76B1B5B7D83BF90640949CA8190808D72C767EB98F4F715F521F1", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:56.77815862Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "1C3DD827A8FC8295DB20894067F28EE75C3CE9A8C5C96E8AAE1DB218417C6C12", + "parts": { + "hash": "C81608B7A9866A538B29298C75832F4459098EA391652203E55B9C3A6206737C", + "total": 1 + } + }, + "height": "31", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "HNfvN1plrsDSXl/x3uKs947N4mQq3No3NjVMxX3M+BG0ANkMFyrIufXVq+Ybwa92YQugeMnak+W5iyt9lUxaBA==", + "timestamp": "2025-06-30T10:04:56.77815862Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "D4F9B711224BF56C947D28D620022FD45D78309766F988B73C07F269C767A464", + "parts": { + "hash": "019E277637D2D3A6CB5EDCEB294CB715BF918CB7675A8E5998DE96022EC68D46", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "33", + "last_block_id": { + "hash": "D4F9B711224BF56C947D28D620022FD45D78309766F988B73C07F269C767A464", + "parts": { + "hash": "019E277637D2D3A6CB5EDCEB294CB715BF918CB7675A8E5998DE96022EC68D46", + "total": 1 + } + }, + "last_commit_hash": "CDDB37A6AA5230B6D4012FE6F8C5255029D855F9E2D886E17F472AE5722C1F7D", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:57.314062799Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "D4F9B711224BF56C947D28D620022FD45D78309766F988B73C07F269C767A464", + "parts": { + "hash": "019E277637D2D3A6CB5EDCEB294CB715BF918CB7675A8E5998DE96022EC68D46", + "total": 1 + } + }, + "height": "32", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "Kq7uGhZjieUyry1egApPHZUdK8dscRili7myzBTleH4GUX7UPXlcYjZsTTGpgjPv7MKX26fg/7n6/DiD5zr9Ag==", + "timestamp": "2025-06-30T10:04:57.314062799Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "71B4215AC11AA2435FA1A51BA5C55B2F619CDBD2CA9C04344E16BD94E0376CE1", + "parts": { + "hash": "BB7821EF4CF177767A778B16DDDD690538B1AF028B81B5660673BFBA579C69B6", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "34", + "last_block_id": { + "hash": "71B4215AC11AA2435FA1A51BA5C55B2F619CDBD2CA9C04344E16BD94E0376CE1", + "parts": { + "hash": "BB7821EF4CF177767A778B16DDDD690538B1AF028B81B5660673BFBA579C69B6", + "total": 1 + } + }, + "last_commit_hash": "F89836F858AFABBBE97FF658E902B50F0E370A7C41D58EA752E13FF7AA86B591", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:57.853866558Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "71B4215AC11AA2435FA1A51BA5C55B2F619CDBD2CA9C04344E16BD94E0376CE1", + "parts": { + "hash": "BB7821EF4CF177767A778B16DDDD690538B1AF028B81B5660673BFBA579C69B6", + "total": 1 + } + }, + "height": "33", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "5DCYaYh3faT287R6apjaOLWRnUhzodKSKBXdD3UDIJIeduFkBPZx0I4Zet1828SmYdnb5zYvYmFnFjSGIyF8CA==", + "timestamp": "2025-06-30T10:04:57.853866558Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "9FA643B77DBE9FAEBD34681EAB92EEF7AD7F43D8983478D2E43E1CA65660A985", + "parts": { + "hash": "29D534E717366F4E1B0A0E64567F702BCE85E872477D364A344FA9AF2D9B4E52", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "35", + "last_block_id": { + "hash": "9FA643B77DBE9FAEBD34681EAB92EEF7AD7F43D8983478D2E43E1CA65660A985", + "parts": { + "hash": "29D534E717366F4E1B0A0E64567F702BCE85E872477D364A344FA9AF2D9B4E52", + "total": 1 + } + }, + "last_commit_hash": "E333AC0BBB3E723D9D9AB2F201225DCCFF53021952B26C43EC99134058FE501E", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:58.396087174Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "9FA643B77DBE9FAEBD34681EAB92EEF7AD7F43D8983478D2E43E1CA65660A985", + "parts": { + "hash": "29D534E717366F4E1B0A0E64567F702BCE85E872477D364A344FA9AF2D9B4E52", + "total": 1 + } + }, + "height": "34", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "g8SmH82/jlO1eQiNpeYUYkohyQ+XqBNv8wBmWXCXSeRZ5dR0sMfhhGlwoqELKROv1+PkYx4nuUv3GAsr5WRXCw==", + "timestamp": "2025-06-30T10:04:58.396087174Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "53BA93EFE46D8945B4F36C308049B5ACD6B2DEC7A7A1711F57F1F5EF0EE85756", + "parts": { + "hash": "98E03EFC6C5986A74E2D7303EAE0DDFFF119F07182BF126932868B2E6759A969", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "36", + "last_block_id": { + "hash": "53BA93EFE46D8945B4F36C308049B5ACD6B2DEC7A7A1711F57F1F5EF0EE85756", + "parts": { + "hash": "98E03EFC6C5986A74E2D7303EAE0DDFFF119F07182BF126932868B2E6759A969", + "total": 1 + } + }, + "last_commit_hash": "CB1C68260600B43FFE78BE285968F7A4087A3689230788DBEE69EC7957876155", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:58.925557373Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "53BA93EFE46D8945B4F36C308049B5ACD6B2DEC7A7A1711F57F1F5EF0EE85756", + "parts": { + "hash": "98E03EFC6C5986A74E2D7303EAE0DDFFF119F07182BF126932868B2E6759A969", + "total": 1 + } + }, + "height": "35", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "KylqKm96Z2qvQS7fg0T0y+zC+kXZcmTl9aCKzHscvN7GSoYzpByMJbfesEhGXX7K92oEgVgcvaD6/tx1Lf7EDA==", + "timestamp": "2025-06-30T10:04:58.925557373Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "C6F84CC078D00F4D0F324E7BE34FF597BC30FDD6EE2F145CC743EDB4D2FE565D", + "parts": { + "hash": "9E51B75BD62110E182B776653E2888BCDC7F9DF074DEE5AD63FFDC6CA818F46A", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "37", + "last_block_id": { + "hash": "C6F84CC078D00F4D0F324E7BE34FF597BC30FDD6EE2F145CC743EDB4D2FE565D", + "parts": { + "hash": "9E51B75BD62110E182B776653E2888BCDC7F9DF074DEE5AD63FFDC6CA818F46A", + "total": 1 + } + }, + "last_commit_hash": "CBC43C6544DEB609EB4528ACBC6ADEE0D57C6AA599F8B0DB39F5CDB85005DC35", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:59.458389854Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "C6F84CC078D00F4D0F324E7BE34FF597BC30FDD6EE2F145CC743EDB4D2FE565D", + "parts": { + "hash": "9E51B75BD62110E182B776653E2888BCDC7F9DF074DEE5AD63FFDC6CA818F46A", + "total": 1 + } + }, + "height": "36", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "w1UtQ5yCkK5NpMb8w7TcS0MWcSanrpzIPsWmqytbkN+Tp6Xleir5DF3XwuR5Yq9nYpv2KojgV73gIkHPjZybBA==", + "timestamp": "2025-06-30T10:04:59.458389854Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "D3F0B84A544FB38BB26DB06CBAFE592F0F9C652E3E944D9E463C9606A5B6C818", + "parts": { + "hash": "D90A97076418AD928C9FC3F00D8C43DA5D85D6B3AEC5A1B2FCB2744E1B3FC9D7", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "38", + "last_block_id": { + "hash": "D3F0B84A544FB38BB26DB06CBAFE592F0F9C652E3E944D9E463C9606A5B6C818", + "parts": { + "hash": "D90A97076418AD928C9FC3F00D8C43DA5D85D6B3AEC5A1B2FCB2744E1B3FC9D7", + "total": 1 + } + }, + "last_commit_hash": "4230B92A64A73B3A5FA6CC1ABA8C7C619AAA8C39997AC46EE63BFAFE3727009A", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:59.996282678Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "D3F0B84A544FB38BB26DB06CBAFE592F0F9C652E3E944D9E463C9606A5B6C818", + "parts": { + "hash": "D90A97076418AD928C9FC3F00D8C43DA5D85D6B3AEC5A1B2FCB2744E1B3FC9D7", + "total": 1 + } + }, + "height": "37", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "BzrlH2JWlOBfEaqfUkpikp3bVbTUO7ToKZ3pTzsmQ0GNJspb4RLf9dsPG6cOrSXYNc+X61YUw3zYsg48n7IWDg==", + "timestamp": "2025-06-30T10:04:59.996282678Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "D50A70CF993AE14015A05E7FB73A6FB649A1DE26F4AEEBC6E30D183C91A455C0", + "parts": { + "hash": "19A23336AF4A8537C7C4F3FBB801E71A7B25FD9D5A2D533CEE2EAA9ABF2388ED", + "total": 1 + } + } + } + ], + "total_count": "37" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/blockchain_from_1_to_10.json b/rpc/tests/kvstore_fixtures/v1/incoming/blockchain_from_1_to_10.json new file mode 100644 index 00000000..e3a2d3b5 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/blockchain_from_1_to_10.json @@ -0,0 +1,369 @@ +{ + "id": "f8f5c6b6-63cb-4580-9a12-45dd1ff2d4bb", + "jsonrpc": "2.0", + "result": { + "block_metas": [ + { + "block_id": { + "hash": "582DDEDEAC10340AE0EC8327BA20AB5C9EE98C295AA6721688923325B6C66B0B", + "parts": { + "hash": "54F1AD38474F2F1F6BC9E2E9079E62CBCD13B55343C7E1674A939CD9BA709DA3", + "total": 1 + } + }, + "block_size": "571", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "10", + "last_block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + }, + "last_commit_hash": "2C33C85C8D599EC432CA03B33CC6B06B3ADA2460D4635696A74DD33314310B12", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:44.920428185Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + }, + { + "block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + }, + "block_size": "571", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "9", + "last_block_id": { + "hash": "AA4A1E74AFA7D274D60BB0CAFD025740C54F5220F4850B26E6C805F6DD0B9A93", + "parts": { + "hash": "0F256BACF2A619A534124A6E029489C86608DD739CBF9FA2D8B9AF33EB2B87A6", + "total": 1 + } + }, + "last_commit_hash": "3F3EF1472476E478726E2ABD2DCE6BB50D5106683CD607B94CF75F29160AC3BC", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:44.391196114Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + }, + { + "block_id": { + "hash": "AA4A1E74AFA7D274D60BB0CAFD025740C54F5220F4850B26E6C805F6DD0B9A93", + "parts": { + "hash": "0F256BACF2A619A534124A6E029489C86608DD739CBF9FA2D8B9AF33EB2B87A6", + "total": 1 + } + }, + "block_size": "571", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "8", + "last_block_id": { + "hash": "28A9717277DEFD64EC268A47383C29F0F554B760E21C3DDAE9382B163239C1AA", + "parts": { + "hash": "BE4585A6BF98CB46AAD727A743841C516B37B01FC7BC5EC12BABCB6C550C22BB", + "total": 1 + } + }, + "last_commit_hash": "11011B966D202D466C61191D06FBEA40C32C182A3B326F0E3CA5D18577E328D0", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:43.858573218Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + }, + { + "block_id": { + "hash": "28A9717277DEFD64EC268A47383C29F0F554B760E21C3DDAE9382B163239C1AA", + "parts": { + "hash": "BE4585A6BF98CB46AAD727A743841C516B37B01FC7BC5EC12BABCB6C550C22BB", + "total": 1 + } + }, + "block_size": "571", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "7", + "last_block_id": { + "hash": "DBC025C32CBCAC0F25EB0A15F697DF9F0A1BF31739AC71B8B97B837A22E0CD79", + "parts": { + "hash": "C1B424EE84E5769334453C1ADFDA3969EC385D49D07A639C8F4CAE1ABE4765A3", + "total": 1 + } + }, + "last_commit_hash": "1278600811069839FEEC4457762CAFD0270B84D2DEED67E3A81FB7B4473BFEA2", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:43.316070099Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + }, + { + "block_id": { + "hash": "DBC025C32CBCAC0F25EB0A15F697DF9F0A1BF31739AC71B8B97B837A22E0CD79", + "parts": { + "hash": "C1B424EE84E5769334453C1ADFDA3969EC385D49D07A639C8F4CAE1ABE4765A3", + "total": 1 + } + }, + "block_size": "571", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "6", + "last_block_id": { + "hash": "63F90A36D57D3436433D36949FD26F4B3BC8AD2AAD933BFE72F050AA679360C7", + "parts": { + "hash": "14F2315C58ADD4539D1BA809E39E40795320D6C7883465EA2DF2F4FD8EE84F3A", + "total": 1 + } + }, + "last_commit_hash": "EBE84E6F7D93E6718E2D05D5D0EE1AFC7FEE2BA7581FB2E20DBA570C7D71A0C8", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:42.783468828Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + }, + { + "block_id": { + "hash": "63F90A36D57D3436433D36949FD26F4B3BC8AD2AAD933BFE72F050AA679360C7", + "parts": { + "hash": "14F2315C58ADD4539D1BA809E39E40795320D6C7883465EA2DF2F4FD8EE84F3A", + "total": 1 + } + }, + "block_size": "569", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "5", + "last_block_id": { + "hash": "1E0E8CAC9968821AF396F2D8EB58547E75AF9793C6A813172C48F3CBABCDF72F", + "parts": { + "hash": "40EC197515342D556946B1F6C482C90D1CB0B6D5B38C68D343278459E3994C78", + "total": 1 + } + }, + "last_commit_hash": "0B0C26C869774E9423CD0055D3D64C2D28C7C3F74D29956F1AF1DD16EA7B8BE7", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:42.252095694Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + }, + { + "block_id": { + "hash": "1E0E8CAC9968821AF396F2D8EB58547E75AF9793C6A813172C48F3CBABCDF72F", + "parts": { + "hash": "40EC197515342D556946B1F6C482C90D1CB0B6D5B38C68D343278459E3994C78", + "total": 1 + } + }, + "block_size": "571", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "4", + "last_block_id": { + "hash": "01E9F7D5059230D75165A444B80F91D2EC412BDAED57DD08D28506E73988887A", + "parts": { + "hash": "A046FB8D73BCB470070484B391B5470F99A07E2691362B0AF94FFF7EF443E4ED", + "total": 1 + } + }, + "last_commit_hash": "B9FC57F81A020250C6A4391C046737A8BE94BC51BCAA65CAED761243FD39DE67", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:41.727065831Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + }, + { + "block_id": { + "hash": "01E9F7D5059230D75165A444B80F91D2EC412BDAED57DD08D28506E73988887A", + "parts": { + "hash": "A046FB8D73BCB470070484B391B5470F99A07E2691362B0AF94FFF7EF443E4ED", + "total": 1 + } + }, + "block_size": "569", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "3", + "last_block_id": { + "hash": "613FCF16B64668D223E35B22A8ED4F36C831C539C583886773DE6BA79354BADA", + "parts": { + "hash": "E0245CA6FDA925E4FE90A9B531B1D9BB448E2A478CB196563614F3E46A2D232D", + "total": 1 + } + }, + "last_commit_hash": "E2DF88EF6211F240DA9A47D74D550CDA83420B79F63A04063BAE0651CE036163", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:41.201574422Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + }, + { + "block_id": { + "hash": "613FCF16B64668D223E35B22A8ED4F36C831C539C583886773DE6BA79354BADA", + "parts": { + "hash": "E0245CA6FDA925E4FE90A9B531B1D9BB448E2A478CB196563614F3E46A2D232D", + "total": 1 + } + }, + "block_size": "571", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "2", + "last_block_id": { + "hash": "9968D641711D6A01FE9A889FB9924124F942ACDB255C80FA9C07B504BE70B778", + "parts": { + "hash": "4E5D1578F0E576D2C8AC819DC5DFC092D1CA3442E61D330A5653EA4DAE248250", + "total": 1 + } + }, + "last_commit_hash": "54CA5483732C756ABAED35D1A337D07A82216357ACC88618168386A3F3C8095A", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:40.68217849Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + }, + { + "block_id": { + "hash": "9968D641711D6A01FE9A889FB9924124F942ACDB255C80FA9C07B504BE70B778", + "parts": { + "hash": "4E5D1578F0E576D2C8AC819DC5DFC092D1CA3442E61D330A5653EA4DAE248250", + "total": 1 + } + }, + "block_size": "322", + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "1", + "last_block_id": { + "hash": "", + "parts": { + "hash": "", + "total": 0 + } + }, + "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:39.861132656Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "num_txs": "0" + } + ], + "last_height": "40" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_async.json b/rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_async.json new file mode 100644 index 00000000..05e9f3ce --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_async.json @@ -0,0 +1,11 @@ +{ + "id": "1b0ca5b2-37b2-437a-b67b-72bec2884e1f", + "jsonrpc": "2.0", + "result": { + "code": 0, + "codespace": "", + "data": "", + "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", + "log": "" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_commit.json b/rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_commit.json new file mode 100644 index 00000000..af227ff9 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_commit.json @@ -0,0 +1,79 @@ +{ + "id": "f3094d8e-23f4-49d1-8865-61d0555af13c", + "jsonrpc": "2.0", + "result": { + "check_tx": { + "code": 0, + "codespace": "", + "data": null, + "events": [], + "gas_used": "0", + "gas_wanted": "1", + "info": "", + "log": "" + }, + "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", + "height": "52", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "commit-key" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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/v1/incoming/broadcast_tx_sync.json b/rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_sync.json new file mode 100644 index 00000000..65ed3520 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/broadcast_tx_sync.json @@ -0,0 +1,11 @@ +{ + "id": "750a93cd-8018-4003-a100-45f6a59e5596", + "jsonrpc": "2.0", + "result": { + "code": 0, + "codespace": "", + "data": "", + "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", + "log": "" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/commit_at_height_10.json b/rpc/tests/kvstore_fixtures/v1/incoming/commit_at_height_10.json new file mode 100644 index 00000000..b8fad3ba --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/commit_at_height_10.json @@ -0,0 +1,53 @@ +{ + "id": "e49fcd10-4eb2-400e-b975-df9d8e2ede8f", + "jsonrpc": "2.0", + "result": { + "canonical": true, + "signed_header": { + "commit": { + "block_id": { + "hash": "582DDEDEAC10340AE0EC8327BA20AB5C9EE98C295AA6721688923325B6C66B0B", + "parts": { + "hash": "54F1AD38474F2F1F6BC9E2E9079E62CBCD13B55343C7E1674A939CD9BA709DA3", + "total": 1 + } + }, + "height": "10", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "qU1zfo7wqAgCM+LpaoN+BUH4SPKxrfDSV+G6x9SScC0UIFDWZRqG+PWnDNZkteDu1tFPzWQb4rc+9ZERMtzpDA==", + "timestamp": "2025-06-30T10:04:45.480224058Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "10", + "last_block_id": { + "hash": "8A9C3091453D71741DA7053AEEE15E675ED8998566CFE7CBD9E7CEB5C5F3DA5C", + "parts": { + "hash": "5DA4917FD8CB4758FA8915B580F3A84A83FA631A12A7BD291CF69905914DD388", + "total": 1 + } + }, + "last_commit_hash": "2C33C85C8D599EC432CA03B33CC6B06B3ADA2460D4635696A74DD33314310B12", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:04:44.920428185Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + } + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/consensus_params.json b/rpc/tests/kvstore_fixtures/v1/incoming/consensus_params.json new file mode 100644 index 00000000..88f57891 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/consensus_params.json @@ -0,0 +1,34 @@ +{ + "id": "95931dc5-dbbf-46ff-9488-25178286f10c", + "jsonrpc": "2.0", + "result": { + "block_height": "10", + "consensus_params": { + "block": { + "max_bytes": "4194304", + "max_gas": "10000000" + }, + "evidence": { + "max_age_duration": "172800000000000", + "max_age_num_blocks": "100000", + "max_bytes": "1048576" + }, + "feature": { + "pbts_enable_height": "0", + "vote_extensions_enable_height": "0" + }, + "synchrony": { + "message_delay": "15000000000", + "precision": "505000000" + }, + "validator": { + "pub_key_types": [ + "ed25519" + ] + }, + "version": { + "app": "0" + } + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/consensus_state.json b/rpc/tests/kvstore_fixtures/v1/incoming/consensus_state.json new file mode 100644 index 00000000..86d731c3 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/consensus_state.json @@ -0,0 +1,30 @@ +{ + "id": "acf00f13-681e-493a-91e9-942980f5d273", + "jsonrpc": "2.0", + "result": { + "round_state": { + "height/round/step": "47/0/1", + "height_vote_set": [ + { + "precommits": [ + "nil-Vote" + ], + "precommits_bit_array": "BA{1:_} 0/10 = 0.00", + "prevotes": [ + "nil-Vote" + ], + "prevotes_bit_array": "BA{1:_} 0/10 = 0.00", + "round": 0 + } + ], + "locked_block_hash": "", + "proposal_block_hash": "", + "proposer": { + "address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "index": 0 + }, + "start_time": "2025-06-30T10:05:05.311150162Z", + "valid_block_hash": "" + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/genesis.json b/rpc/tests/kvstore_fixtures/v1/incoming/genesis.json new file mode 100644 index 00000000..d3a0a056 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/genesis.json @@ -0,0 +1,50 @@ +{ + "id": "e1cac108-37ce-4df7-96a7-0cf2ca8974a7", + "jsonrpc": "2.0", + "result": { + "genesis": { + "app_hash": "", + "chain_id": "dockerchain", + "consensus_params": { + "block": { + "max_bytes": "4194304", + "max_gas": "10000000" + }, + "evidence": { + "max_age_duration": "172800000000000", + "max_age_num_blocks": "100000", + "max_bytes": "1048576" + }, + "feature": { + "pbts_enable_height": "0", + "vote_extensions_enable_height": "0" + }, + "synchrony": { + "message_delay": "15000000000", + "precision": "505000000" + }, + "validator": { + "pub_key_types": [ + "ed25519" + ] + }, + "version": { + "app": "0" + } + }, + "genesis_time": "2025-06-30T10:04:39.861132656Z", + "initial_height": "1", + "validators": [ + { + "address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "name": "", + "power": "10", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "U9AhXvIrRjLVnR+dy7x4sn/qE6j80MgAfh5phB4FbTc=" + } + } + ] + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/net_info.json b/rpc/tests/kvstore_fixtures/v1/incoming/net_info.json new file mode 100644 index 00000000..815f5712 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/net_info.json @@ -0,0 +1,12 @@ +{ + "id": "5be17a7a-038b-4070-8aac-966163d4a3b6", + "jsonrpc": "2.0", + "result": { + "listeners": [ + "Listener(@)" + ], + "listening": true, + "n_peers": "0", + "peers": [] + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/status.json b/rpc/tests/kvstore_fixtures/v1/incoming/status.json new file mode 100644 index 00000000..834d5b39 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/status.json @@ -0,0 +1,42 @@ +{ + "id": "ed04c4b2-ac72-4602-9b48-d5dd41d549be", + "jsonrpc": "2.0", + "result": { + "node_info": { + "channels": "40202122233038606100", + "id": "ce5b63179d4b9b879f7389128984036ffbd9ee2e", + "listen_addr": "tcp://0.0.0.0:26656", + "moniker": "dockernode", + "network": "dockerchain", + "other": { + "rpc_address": "tcp://0.0.0.0:26657", + "tx_index": "on" + }, + "protocol_version": { + "app": "1", + "block": "11", + "p2p": "9" + }, + "version": "1.0.0" + }, + "sync_info": { + "catching_up": false, + "earliest_app_hash": "0000000000000000", + "earliest_block_hash": "9968D641711D6A01FE9A889FB9924124F942ACDB255C80FA9C07B504BE70B778", + "earliest_block_height": "1", + "earliest_block_time": "2025-06-30T10:04:39.861132656Z", + "latest_app_hash": "0600000000000000", + "latest_block_hash": "DBF12EDAA2EEFD2F76D43061F4A5175F80397516F1A838E55906ED13D5762E95", + "latest_block_height": "57", + "latest_block_time": "2025-06-30T10:05:10.173766882Z" + }, + "validator_info": { + "address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "U9AhXvIrRjLVnR+dy7x4sn/qE6j80MgAfh5phB4FbTc=" + }, + "voting_power": "10" + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_malformed.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_malformed.json new file mode 100644 index 00000000..15a38546 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_malformed.json @@ -0,0 +1,9 @@ +{ + "error": { + "code": -32603, + "data": "failed to parse query: offset 10: got tag, wanted <= operator, >= operator, < operator, > operator, = operator, CONTAINS operator or EXISTS operator", + "message": "Internal error" + }, + "id": "70e544f4-3cd6-4c17-9deb-4762159d3dc6", + "jsonrpc": "2.0" +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_0.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_0.json new file mode 100644 index 00000000..14f96356 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_0.json @@ -0,0 +1,80 @@ +{ + "id": "874a5373-dd22-470e-a802-473c04eef276", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/NewBlock", + "value": { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0600000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "60", + "last_block_id": { + "hash": "7C4B400F9CA4B3CD1A7087159F96F8807E51EB540D31AD90E6E3F692D3238909", + "parts": { + "hash": "3CE87D71C9BA82FFC3EB7A3127F787A22719FC26D05B1D5274E09AAB528ACF2B", + "total": 1 + } + }, + "last_commit_hash": "C4AF459710F15EC356D88BE8E5B89C25EACBD660D366573A3E715578B7F6EB2E", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:05:11.808984201Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "7C4B400F9CA4B3CD1A7087159F96F8807E51EB540D31AD90E6E3F692D3238909", + "parts": { + "hash": "3CE87D71C9BA82FFC3EB7A3127F787A22719FC26D05B1D5274E09AAB528ACF2B", + "total": 1 + } + }, + "height": "59", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "tfvfYlksuuCtI7qgzomIPiwmR6B03BRuWTN9jSi6sOZsGSj21oJ5O+tBPrfLevWjWWbbDC3ocpmRvHQX+cDwCw==", + "timestamp": "2025-06-30T10:05:11.808984201Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "D21A9F7FFD0D9C039F05D8B006A79D3BB8E2F1F768325BF4BF60C35B362CE2D4", + "parts": { + "hash": "6BB374A7E197DF4201357E2B33A6C9E6125DE410B47BCC673E84F06A6A231B28", + "total": 1 + } + }, + "result_finalize_block": { + "app_hash": "BgAAAAAAAAA=", + "validator_updates": [] + } + } + }, + "events": { + "tm.event": [ + "NewBlock" + ] + }, + "query": "tm.event = 'NewBlock'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_1.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_1.json new file mode 100644 index 00000000..34aeb22c --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_1.json @@ -0,0 +1,80 @@ +{ + "id": "874a5373-dd22-470e-a802-473c04eef276", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/NewBlock", + "value": { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0600000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "61", + "last_block_id": { + "hash": "D21A9F7FFD0D9C039F05D8B006A79D3BB8E2F1F768325BF4BF60C35B362CE2D4", + "parts": { + "hash": "6BB374A7E197DF4201357E2B33A6C9E6125DE410B47BCC673E84F06A6A231B28", + "total": 1 + } + }, + "last_commit_hash": "CF515C4102364DD714BCAAD0623CB05660C850ACAF2A0B675BCE56071DC4CD7F", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:05:12.344477328Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "D21A9F7FFD0D9C039F05D8B006A79D3BB8E2F1F768325BF4BF60C35B362CE2D4", + "parts": { + "hash": "6BB374A7E197DF4201357E2B33A6C9E6125DE410B47BCC673E84F06A6A231B28", + "total": 1 + } + }, + "height": "60", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "PciKjhrMGeRSAui4XMHhPm7saUv6UFoG51EXIvynf0tGtDtcpbP2j8WpJdBQ64BzWZQWC4pk3loAWokuyQrKBA==", + "timestamp": "2025-06-30T10:05:12.344477328Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "A55B7EE465BB047DF4B05F7EA4DAFE4D59F130733812A7A442EE64F0591C8094", + "parts": { + "hash": "E6CEBECE362BC6E337EEF8416D45FFE850BE6472F478FDD5487F9A48E704950B", + "total": 1 + } + }, + "result_finalize_block": { + "app_hash": "BgAAAAAAAAA=", + "validator_updates": [] + } + } + }, + "events": { + "tm.event": [ + "NewBlock" + ] + }, + "query": "tm.event = 'NewBlock'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_2.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_2.json new file mode 100644 index 00000000..12747797 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_2.json @@ -0,0 +1,80 @@ +{ + "id": "874a5373-dd22-470e-a802-473c04eef276", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/NewBlock", + "value": { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0600000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "62", + "last_block_id": { + "hash": "A55B7EE465BB047DF4B05F7EA4DAFE4D59F130733812A7A442EE64F0591C8094", + "parts": { + "hash": "E6CEBECE362BC6E337EEF8416D45FFE850BE6472F478FDD5487F9A48E704950B", + "total": 1 + } + }, + "last_commit_hash": "2A704C76CA25B3DDA03F49B14271809D8F71648DC10229DF76478E88BDDE315C", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:05:12.88100071Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "A55B7EE465BB047DF4B05F7EA4DAFE4D59F130733812A7A442EE64F0591C8094", + "parts": { + "hash": "E6CEBECE362BC6E337EEF8416D45FFE850BE6472F478FDD5487F9A48E704950B", + "total": 1 + } + }, + "height": "61", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "/6pgZILx92Fme6ZAqsR8re9UumncYC/ABaw5aQgsZtOiL/v17Z77gCSQOIf9C/iqzIFdXSF6TOMLB81NYOFdBg==", + "timestamp": "2025-06-30T10:05:12.88100071Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "F9F08EE69A8ED44D94B8454C2505EC56EEDD25C22BEF26148DCAB74D00E864E2", + "parts": { + "hash": "D3C48511B05533E58FF1B6A8486E8BAA5CD7AC5081C5923A2A54ACC9AE98A0C0", + "total": 1 + } + }, + "result_finalize_block": { + "app_hash": "BgAAAAAAAAA=", + "validator_updates": [] + } + } + }, + "events": { + "tm.event": [ + "NewBlock" + ] + }, + "query": "tm.event = 'NewBlock'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_3.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_3.json new file mode 100644 index 00000000..a599552c --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_3.json @@ -0,0 +1,80 @@ +{ + "id": "874a5373-dd22-470e-a802-473c04eef276", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/NewBlock", + "value": { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0600000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "63", + "last_block_id": { + "hash": "F9F08EE69A8ED44D94B8454C2505EC56EEDD25C22BEF26148DCAB74D00E864E2", + "parts": { + "hash": "D3C48511B05533E58FF1B6A8486E8BAA5CD7AC5081C5923A2A54ACC9AE98A0C0", + "total": 1 + } + }, + "last_commit_hash": "0CC4CE0D4CB017C115CC4CD88182DFDBE941B831ECF82CA58B9B478F327C95D5", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:05:13.410291638Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "F9F08EE69A8ED44D94B8454C2505EC56EEDD25C22BEF26148DCAB74D00E864E2", + "parts": { + "hash": "D3C48511B05533E58FF1B6A8486E8BAA5CD7AC5081C5923A2A54ACC9AE98A0C0", + "total": 1 + } + }, + "height": "62", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "urA7+3cVsMXQjr/Jef6RFpUvxVwm2WNJRua0cuRvW3SYSntoSKI7HZq+K7dMm6R+V2iyyFs4gFTNaD+XCuWrAA==", + "timestamp": "2025-06-30T10:05:13.410291638Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "64F235CD33B564F7114038972C23A22CCB58784931D22A1CFF9E6B97E8E83380", + "parts": { + "hash": "F6BABE6A2B4AE0324CB7E60E0FF369AD264E4A3494F11ED9058F6F892850E327", + "total": 1 + } + }, + "result_finalize_block": { + "app_hash": "BgAAAAAAAAA=", + "validator_updates": [] + } + } + }, + "events": { + "tm.event": [ + "NewBlock" + ] + }, + "query": "tm.event = 'NewBlock'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_4.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_4.json new file mode 100644 index 00000000..dc263729 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_newblock_4.json @@ -0,0 +1,80 @@ +{ + "id": "874a5373-dd22-470e-a802-473c04eef276", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/NewBlock", + "value": { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0600000000000000", + "chain_id": "dockerchain", + "consensus_hash": "68ECD6F333119CE43751ECE583B981F23508AEAF4221FF582B1BB33BE42BCEFA", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "64", + "last_block_id": { + "hash": "64F235CD33B564F7114038972C23A22CCB58784931D22A1CFF9E6B97E8E83380", + "parts": { + "hash": "F6BABE6A2B4AE0324CB7E60E0FF369AD264E4A3494F11ED9058F6F892850E327", + "total": 1 + } + }, + "last_commit_hash": "986A92042E54B80FCBF3802F6C290CF3B958EA002FC4BDC143183E07CD20587A", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "proposer_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6", + "time": "2025-06-30T10:05:13.950490248Z", + "validators_hash": "4C89492B846141142201F13F88E6BBFD43341F0FF0138FDC8E61CD5464CA2FB6", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "64F235CD33B564F7114038972C23A22CCB58784931D22A1CFF9E6B97E8E83380", + "parts": { + "hash": "F6BABE6A2B4AE0324CB7E60E0FF369AD264E4A3494F11ED9058F6F892850E327", + "total": 1 + } + }, + "height": "63", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "7046Z7/gHKgGlZkN+Q/tj1J6AG4/ZINMAYHvaXeBP0/6hmEowhwaoXBdpsUBasV90rKfjzqzTVQA85kR2/3+Ag==", + "timestamp": "2025-06-30T10:05:13.950490248Z", + "validator_address": "5FFC79467B9BF5D94DBD146403048CE7D6FE07A6" + } + ] + } + }, + "block_id": { + "hash": "DD99E0EDD1E8433900EB308659173C34F90B31EA0A85E8AE553CD00A338C3D91", + "parts": { + "hash": "210E4786BB21340138EB311DFA1A5F78C3B459764B4D314AAEFB388B08E93988", + "total": 1 + } + }, + "result_finalize_block": { + "app_hash": "BgAAAAAAAAA=", + "validator_updates": [] + } + } + }, + "events": { + "tm.event": [ + "NewBlock" + ] + }, + "query": "tm.event = 'NewBlock'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs.json new file mode 100644 index 00000000..6b09eda4 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs.json @@ -0,0 +1,5 @@ +{ + "id": "c68f47a9-84e7-4317-b3c4-ab2b05013a0f", + "jsonrpc": "2.0", + "result": {} +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_0.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_0.json new file mode 100644 index 00000000..e00e8c5c --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_0.json @@ -0,0 +1,97 @@ +{ + "id": "c68f47a9-84e7-4317-b3c4-ab2b05013a0f", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/Tx", + "value": { + "TxResult": { + "height": "68", + "result": { + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + } + ] + }, + "tx": "dHgwPXZhbHVl" + } + } + }, + "events": { + "app.creator": [ + "Cosmoshi Netowoko", + "Cosmoshi" + ], + "app.index_key": [ + "index is working", + "index is working" + ], + "app.key": [ + "tx0", + "value" + ], + "app.noindex_key": [ + "index is working", + "index is working" + ], + "tm.event": [ + "Tx" + ], + "tx.hash": [ + "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE" + ], + "tx.height": [ + "68" + ] + }, + "query": "tm.event = 'Tx'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_1.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_1.json new file mode 100644 index 00000000..124be864 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_1.json @@ -0,0 +1,97 @@ +{ + "id": "c68f47a9-84e7-4317-b3c4-ab2b05013a0f", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/Tx", + "value": { + "TxResult": { + "height": "70", + "result": { + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + } + ] + }, + "tx": "dHgxPXZhbHVl" + } + } + }, + "events": { + "app.creator": [ + "Cosmoshi Netowoko", + "Cosmoshi" + ], + "app.index_key": [ + "index is working", + "index is working" + ], + "app.key": [ + "tx1", + "value" + ], + "app.noindex_key": [ + "index is working", + "index is working" + ], + "tm.event": [ + "Tx" + ], + "tx.hash": [ + "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C" + ], + "tx.height": [ + "70" + ] + }, + "query": "tm.event = 'Tx'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_2.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_2.json new file mode 100644 index 00000000..d1d86d04 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_2.json @@ -0,0 +1,97 @@ +{ + "id": "c68f47a9-84e7-4317-b3c4-ab2b05013a0f", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/Tx", + "value": { + "TxResult": { + "height": "72", + "result": { + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + } + ] + }, + "tx": "dHgyPXZhbHVl" + } + } + }, + "events": { + "app.creator": [ + "Cosmoshi Netowoko", + "Cosmoshi" + ], + "app.index_key": [ + "index is working", + "index is working" + ], + "app.key": [ + "tx2", + "value" + ], + "app.noindex_key": [ + "index is working", + "index is working" + ], + "tm.event": [ + "Tx" + ], + "tx.hash": [ + "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4" + ], + "tx.height": [ + "72" + ] + }, + "query": "tm.event = 'Tx'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_3.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_3.json new file mode 100644 index 00000000..533a0d3a --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_3.json @@ -0,0 +1,97 @@ +{ + "id": "c68f47a9-84e7-4317-b3c4-ab2b05013a0f", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/Tx", + "value": { + "TxResult": { + "height": "74", + "result": { + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + } + ] + }, + "tx": "dHgzPXZhbHVl" + } + } + }, + "events": { + "app.creator": [ + "Cosmoshi Netowoko", + "Cosmoshi" + ], + "app.index_key": [ + "index is working", + "index is working" + ], + "app.key": [ + "tx3", + "value" + ], + "app.noindex_key": [ + "index is working", + "index is working" + ], + "tm.event": [ + "Tx" + ], + "tx.hash": [ + "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD" + ], + "tx.height": [ + "74" + ] + }, + "query": "tm.event = 'Tx'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_4.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_4.json new file mode 100644 index 00000000..06bdf064 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_4.json @@ -0,0 +1,97 @@ +{ + "id": "c68f47a9-84e7-4317-b3c4-ab2b05013a0f", + "jsonrpc": "2.0", + "result": { + "data": { + "type": "tendermint/event/Tx", + "value": { + "TxResult": { + "height": "76", + "result": { + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + } + ] + }, + "tx": "dHg0PXZhbHVl" + } + } + }, + "events": { + "app.creator": [ + "Cosmoshi Netowoko", + "Cosmoshi" + ], + "app.index_key": [ + "index is working", + "index is working" + ], + "app.key": [ + "tx4", + "value" + ], + "app.noindex_key": [ + "index is working", + "index is working" + ], + "tm.event": [ + "Tx" + ], + "tx.hash": [ + "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B" + ], + "tx.height": [ + "76" + ] + }, + "query": "tm.event = 'Tx'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_0.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_0.json new file mode 100644 index 00000000..ae8be5be --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_0.json @@ -0,0 +1,11 @@ +{ + "id": "b9f4953d-c441-4319-8ea6-5d0c536bafe4", + "jsonrpc": "2.0", + "result": { + "code": 0, + "codespace": "", + "data": "", + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "log": "" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_1.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_1.json new file mode 100644 index 00000000..840a8a40 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_1.json @@ -0,0 +1,11 @@ +{ + "id": "3e74cc80-47b4-46cd-bdac-0dc3de07a6d6", + "jsonrpc": "2.0", + "result": { + "code": 0, + "codespace": "", + "data": "", + "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", + "log": "" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_2.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_2.json new file mode 100644 index 00000000..e70c5616 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_2.json @@ -0,0 +1,11 @@ +{ + "id": "562befc7-b883-45e1-845d-d5d89a99344b", + "jsonrpc": "2.0", + "result": { + "code": 0, + "codespace": "", + "data": "", + "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", + "log": "" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_3.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_3.json new file mode 100644 index 00000000..3dac9cac --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_3.json @@ -0,0 +1,11 @@ +{ + "id": "ac55e45b-16d9-4004-8911-14a257c76b18", + "jsonrpc": "2.0", + "result": { + "code": 0, + "codespace": "", + "data": "", + "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", + "log": "" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_4.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_4.json new file mode 100644 index 00000000..77e52a2d --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_4.json @@ -0,0 +1,11 @@ +{ + "id": "e830f106-57e6-4961-9c24-6e92fd6af106", + "jsonrpc": "2.0", + "result": { + "code": 0, + "codespace": "", + "data": "", + "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", + "log": "" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_5.json b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_5.json new file mode 100644 index 00000000..0ad22033 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/subscribe_txs_broadcast_tx_5.json @@ -0,0 +1,11 @@ +{ + "id": "a7a1df61-9354-4679-a188-c15be6a7cdbd", + "jsonrpc": "2.0", + "result": { + "code": 0, + "codespace": "", + "data": "", + "hash": "CC4AC5C231481DD2ED2EA15789483B94565BF41612B6FEDE5BE7694F882CC202", + "log": "" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/incoming/tx_search_no_prove.json b/rpc/tests/kvstore_fixtures/v1/incoming/tx_search_no_prove.json new file mode 100644 index 00000000..94a66ae8 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/tx_search_no_prove.json @@ -0,0 +1,612 @@ +{ + "id": "8eb11558-b3ed-4922-a056-cf8bffe57615", + "jsonrpc": "2.0", + "result": { + "total_count": "9", + "txs": [ + { + "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", + "height": "49", + "index": 0, + "tx": "YXN5bmMta2V5PXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "async-key" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", + "height": "51", + "index": 0, + "tx": "c3luYy1rZXk9dmFsdWU=", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "sync-key" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", + "height": "52", + "index": 0, + "tx": "Y29tbWl0LWtleT12YWx1ZQ==", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "commit-key" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "height": "68", + "index": 0, + "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" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", + "height": "70", + "index": 0, + "tx": "dHgxPXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", + "height": "72", + "index": 0, + "tx": "dHgyPXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", + "height": "74", + "index": 0, + "tx": "dHgzPXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", + "height": "76", + "index": 0, + "tx": "dHg0PXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "CC4AC5C231481DD2ED2EA15789483B94565BF41612B6FEDE5BE7694F882CC202", + "height": "78", + "index": 0, + "tx": "dHg1PXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx5" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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/v1/incoming/tx_search_with_prove.json b/rpc/tests/kvstore_fixtures/v1/incoming/tx_search_with_prove.json new file mode 100644 index 00000000..6598f06c --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/incoming/tx_search_with_prove.json @@ -0,0 +1,702 @@ +{ + "id": "945761d4-ff71-472e-b8f9-358b3c02af79", + "jsonrpc": "2.0", + "result": { + "total_count": "9", + "txs": [ + { + "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", + "height": "49", + "index": 0, + "proof": { + "data": "YXN5bmMta2V5PXZhbHVl", + "proof": { + "aunts": [], + "index": "0", + "leaf_hash": "MIH5kVBA0TizrX+JVzLSdnwp6Ful2EOI0E4XpdgmK3o=", + "total": "1" + }, + "root_hash": "3081F9915040D138B3AD7F895732D2767C29E85BA5D84388D04E17A5D8262B7A" + }, + "tx": "YXN5bmMta2V5PXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "async-key" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", + "height": "51", + "index": 0, + "proof": { + "data": "c3luYy1rZXk9dmFsdWU=", + "proof": { + "aunts": [], + "index": "0", + "leaf_hash": "oL+OYRo6LtD+lKo0W5A2kcPlbt4Of3c/VN57Ag54iEk=", + "total": "1" + }, + "root_hash": "A0BF8E611A3A2ED0FE94AA345B903691C3E56EDE0E7F773F54DE7B020E788849" + }, + "tx": "c3luYy1rZXk9dmFsdWU=", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "sync-key" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", + "height": "52", + "index": 0, + "proof": { + "data": "Y29tbWl0LWtleT12YWx1ZQ==", + "proof": { + "aunts": [], + "index": "0", + "leaf_hash": "wq4Wy/oF+/0xsH+eJq1SqY2BgYS2FVXbLAXNcCLkB74=", + "total": "1" + }, + "root_hash": "C2AE16CBFA05FBFD31B07F9E26AD52A98D818184B61555DB2C05CD7022E407BE" + }, + "tx": "Y29tbWl0LWtleT12YWx1ZQ==", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "commit-key" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "height": "68", + "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": "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", + "height": "70", + "index": 0, + "proof": { + "data": "dHgxPXZhbHVl", + "proof": { + "aunts": [], + "index": "0", + "leaf_hash": "QnwQk7ERU9NjeD1GlLa4H8lscIRFD3evj6SZulKp3T8=", + "total": "1" + }, + "root_hash": "427C1093B11153D363783D4694B6B81FC96C7084450F77AF8FA499BA52A9DD3F" + }, + "tx": "dHgxPXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", + "height": "72", + "index": 0, + "proof": { + "data": "dHgyPXZhbHVl", + "proof": { + "aunts": [], + "index": "0", + "leaf_hash": "0eF/BEMF82Y/mIMIM0HX/isU2jI44Z2rAor5MA0PrKM=", + "total": "1" + }, + "root_hash": "D1E17F044305F3663F9883083341D7FE2B14DA3238E19DAB028AF9300D0FACA3" + }, + "tx": "dHgyPXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", + "height": "74", + "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": "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", + "height": "76", + "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": "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": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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": "" + } + }, + { + "hash": "CC4AC5C231481DD2ED2EA15789483B94565BF41612B6FEDE5BE7694F882CC202", + "height": "78", + "index": 0, + "proof": { + "data": "dHg1PXZhbHVl", + "proof": { + "aunts": [], + "index": "0", + "leaf_hash": "53wfU57GnWQ6Q46hc19t7bxY7SaY7WD4T6fy+TOPizM=", + "total": "1" + }, + "root_hash": "E77C1F539EC69D643A438EA1735F6DEDBC58ED2698ED60F84FA7F2F9338F8B33" + }, + "tx": "dHg1PXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx5" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi" + }, + { + "index": true, + "key": "key", + "value": "value" + }, + { + "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/v1/outgoing/abci_info.json b/rpc/tests/kvstore_fixtures/v1/outgoing/abci_info.json new file mode 100644 index 00000000..4cd087b4 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/abci_info.json @@ -0,0 +1,6 @@ +{ + "id": "019a7d69-6c2e-4ce0-b2aa-2b6a5e658ba2", + "jsonrpc": "2.0", + "method": "abci_info", + "params": null +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/abci_query_with_existing_key.json b/rpc/tests/kvstore_fixtures/v1/outgoing/abci_query_with_existing_key.json new file mode 100644 index 00000000..fb7983d6 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/abci_query_with_existing_key.json @@ -0,0 +1,8 @@ +{ + "id": "dd2ba505-6045-4cac-90b7-4544c9ba3f3a", + "jsonrpc": "2.0", + "method": "abci_query", + "params": { + "data": "747830" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/abci_query_with_non_existent_key.json b/rpc/tests/kvstore_fixtures/v1/outgoing/abci_query_with_non_existent_key.json new file mode 100644 index 00000000..7fa9a312 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/abci_query_with_non_existent_key.json @@ -0,0 +1,8 @@ +{ + "id": "7aa9b998-facb-4fcc-b981-0d13b3ec0030", + "jsonrpc": "2.0", + "method": "abci_query", + "params": { + "data": "6e6f6e5f6578697374656e745f6b6579" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_0.json b/rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_0.json new file mode 100644 index 00000000..9ce6df52 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_0.json @@ -0,0 +1,8 @@ +{ + "id": "f66f964b-01f8-45a2-af12-735486b0e703", + "jsonrpc": "2.0", + "method": "block", + "params": { + "height": "0" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_1.json b/rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_1.json new file mode 100644 index 00000000..7c64bee8 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_1.json @@ -0,0 +1,8 @@ +{ + "id": "59f1d68e-65ad-41e9-950f-010cf3a1d58b", + "jsonrpc": "2.0", + "method": "block", + "params": { + "height": "1" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_10.json b/rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_10.json new file mode 100644 index 00000000..0cbccd9a --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/block_at_height_10.json @@ -0,0 +1,8 @@ +{ + "id": "7c51db63-99f1-4d59-8d88-9558f871ceda", + "jsonrpc": "2.0", + "method": "block", + "params": { + "height": "10" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/block_by_hash.json b/rpc/tests/kvstore_fixtures/v1/outgoing/block_by_hash.json new file mode 100644 index 00000000..71608be4 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/block_by_hash.json @@ -0,0 +1,8 @@ +{ + "id": "5d661158-58c0-41dd-a863-54d2e9d750c8", + "jsonrpc": "2.0", + "method": "block_by_hash", + "params": { + "hash": "/PnCU3/DU0ynEAH+HxTE92kJCUjBpSFoL2EufPc65jk=" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/block_results_at_height_10.json b/rpc/tests/kvstore_fixtures/v1/outgoing/block_results_at_height_10.json new file mode 100644 index 00000000..76e2d5ff --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/block_results_at_height_10.json @@ -0,0 +1,8 @@ +{ + "id": "f5430943-ccb0-4609-9b48-32cb9fd7cfca", + "jsonrpc": "2.0", + "method": "block_results", + "params": { + "height": "10" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/block_search.json b/rpc/tests/kvstore_fixtures/v1/outgoing/block_search.json new file mode 100644 index 00000000..feafa495 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/block_search.json @@ -0,0 +1,11 @@ +{ + "id": "142c382d-fc00-4522-8dc9-17a27940011e", + "jsonrpc": "2.0", + "method": "block_search", + "params": { + "order_by": "asc", + "page": "1", + "per_page": "100", + "query": "block.height > 1" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/blockchain_from_1_to_10.json b/rpc/tests/kvstore_fixtures/v1/outgoing/blockchain_from_1_to_10.json new file mode 100644 index 00000000..645b78a0 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/blockchain_from_1_to_10.json @@ -0,0 +1,9 @@ +{ + "id": "f8f5c6b6-63cb-4580-9a12-45dd1ff2d4bb", + "jsonrpc": "2.0", + "method": "blockchain", + "params": { + "maxHeight": "10", + "minHeight": "1" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_async.json b/rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_async.json new file mode 100644 index 00000000..537aa81e --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_async.json @@ -0,0 +1,8 @@ +{ + "id": "1b0ca5b2-37b2-437a-b67b-72bec2884e1f", + "jsonrpc": "2.0", + "method": "broadcast_tx_async", + "params": { + "tx": "YXN5bmMta2V5PXZhbHVl" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_commit.json b/rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_commit.json new file mode 100644 index 00000000..fbd1e7b0 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_commit.json @@ -0,0 +1,8 @@ +{ + "id": "f3094d8e-23f4-49d1-8865-61d0555af13c", + "jsonrpc": "2.0", + "method": "broadcast_tx_commit", + "params": { + "tx": "Y29tbWl0LWtleT12YWx1ZQ==" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_sync.json b/rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_sync.json new file mode 100644 index 00000000..653b5452 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/broadcast_tx_sync.json @@ -0,0 +1,8 @@ +{ + "id": "750a93cd-8018-4003-a100-45f6a59e5596", + "jsonrpc": "2.0", + "method": "broadcast_tx_sync", + "params": { + "tx": "c3luYy1rZXk9dmFsdWU=" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/commit_at_height_10.json b/rpc/tests/kvstore_fixtures/v1/outgoing/commit_at_height_10.json new file mode 100644 index 00000000..7f66b38b --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/commit_at_height_10.json @@ -0,0 +1,8 @@ +{ + "id": "e49fcd10-4eb2-400e-b975-df9d8e2ede8f", + "jsonrpc": "2.0", + "method": "commit", + "params": { + "height": "10" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/consensus_params.json b/rpc/tests/kvstore_fixtures/v1/outgoing/consensus_params.json new file mode 100644 index 00000000..f1a73e4e --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/consensus_params.json @@ -0,0 +1,8 @@ +{ + "id": "95931dc5-dbbf-46ff-9488-25178286f10c", + "jsonrpc": "2.0", + "method": "consensus_params", + "params": { + "height": "10" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/consensus_state.json b/rpc/tests/kvstore_fixtures/v1/outgoing/consensus_state.json new file mode 100644 index 00000000..a8f348a5 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/consensus_state.json @@ -0,0 +1,6 @@ +{ + "id": "acf00f13-681e-493a-91e9-942980f5d273", + "jsonrpc": "2.0", + "method": "consensus_state", + "params": null +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/genesis.json b/rpc/tests/kvstore_fixtures/v1/outgoing/genesis.json new file mode 100644 index 00000000..12cd906b --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/genesis.json @@ -0,0 +1,6 @@ +{ + "id": "e1cac108-37ce-4df7-96a7-0cf2ca8974a7", + "jsonrpc": "2.0", + "method": "genesis", + "params": null +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/net_info.json b/rpc/tests/kvstore_fixtures/v1/outgoing/net_info.json new file mode 100644 index 00000000..597d6d6c --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/net_info.json @@ -0,0 +1,6 @@ +{ + "id": "5be17a7a-038b-4070-8aac-966163d4a3b6", + "jsonrpc": "2.0", + "method": "net_info", + "params": null +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/status.json b/rpc/tests/kvstore_fixtures/v1/outgoing/status.json new file mode 100644 index 00000000..6b7ff99a --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/status.json @@ -0,0 +1,6 @@ +{ + "id": "ed04c4b2-ac72-4602-9b48-d5dd41d549be", + "jsonrpc": "2.0", + "method": "status", + "params": null +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_malformed.json b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_malformed.json new file mode 100644 index 00000000..511cd71a --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_malformed.json @@ -0,0 +1,8 @@ +{ + "id": "b216fcae-1517-43e7-8722-efdac4d0c2b9", + "jsonrpc": "2.0", + "method": "subscribe", + "params": { + "query": "malformed query" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_newblock.json b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_newblock.json new file mode 100644 index 00000000..54dc5f95 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_newblock.json @@ -0,0 +1,8 @@ +{ + "id": "0cb87fdb-627c-443e-a359-72383f69066d", + "jsonrpc": "2.0", + "method": "subscribe", + "params": { + "query": "tm.event = 'NewBlock'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs.json b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs.json new file mode 100644 index 00000000..db38df7a --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs.json @@ -0,0 +1,8 @@ +{ + "id": "6540d5cd-a9a2-4368-bf25-3c36cbb1ea8f", + "jsonrpc": "2.0", + "method": "subscribe", + "params": { + "query": "tm.event = 'Tx'" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_0.json b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_0.json new file mode 100644 index 00000000..34550cab --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_0.json @@ -0,0 +1,8 @@ +{ + "id": "b9f4953d-c441-4319-8ea6-5d0c536bafe4", + "jsonrpc": "2.0", + "method": "broadcast_tx_async", + "params": { + "tx": "dHgwPXZhbHVl" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_1.json b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_1.json new file mode 100644 index 00000000..0d38d3ba --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_1.json @@ -0,0 +1,8 @@ +{ + "id": "3e74cc80-47b4-46cd-bdac-0dc3de07a6d6", + "jsonrpc": "2.0", + "method": "broadcast_tx_async", + "params": { + "tx": "dHgxPXZhbHVl" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_2.json b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_2.json new file mode 100644 index 00000000..5df592a8 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_2.json @@ -0,0 +1,8 @@ +{ + "id": "562befc7-b883-45e1-845d-d5d89a99344b", + "jsonrpc": "2.0", + "method": "broadcast_tx_async", + "params": { + "tx": "dHgyPXZhbHVl" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_3.json b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_3.json new file mode 100644 index 00000000..004d1f80 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_3.json @@ -0,0 +1,8 @@ +{ + "id": "ac55e45b-16d9-4004-8911-14a257c76b18", + "jsonrpc": "2.0", + "method": "broadcast_tx_async", + "params": { + "tx": "dHgzPXZhbHVl" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_4.json b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_4.json new file mode 100644 index 00000000..d319c54d --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_4.json @@ -0,0 +1,8 @@ +{ + "id": "e830f106-57e6-4961-9c24-6e92fd6af106", + "jsonrpc": "2.0", + "method": "broadcast_tx_async", + "params": { + "tx": "dHg0PXZhbHVl" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_5.json b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_5.json new file mode 100644 index 00000000..e58c4fef --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/subscribe_txs_broadcast_tx_5.json @@ -0,0 +1,8 @@ +{ + "id": "a7a1df61-9354-4679-a188-c15be6a7cdbd", + "jsonrpc": "2.0", + "method": "broadcast_tx_async", + "params": { + "tx": "dHg1PXZhbHVl" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/tx_search_no_prove.json b/rpc/tests/kvstore_fixtures/v1/outgoing/tx_search_no_prove.json new file mode 100644 index 00000000..f347ccc0 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/tx_search_no_prove.json @@ -0,0 +1,12 @@ +{ + "id": "8eb11558-b3ed-4922-a056-cf8bffe57615", + "jsonrpc": "2.0", + "method": "tx_search", + "params": { + "order_by": "asc", + "page": "1", + "per_page": "10", + "prove": false, + "query": "tx.height > 1" + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/v1/outgoing/tx_search_with_prove.json b/rpc/tests/kvstore_fixtures/v1/outgoing/tx_search_with_prove.json new file mode 100644 index 00000000..eeef2a55 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/v1/outgoing/tx_search_with_prove.json @@ -0,0 +1,12 @@ +{ + "id": "945761d4-ff71-472e-b8f9-358b3c02af79", + "jsonrpc": "2.0", + "method": "tx_search", + "params": { + "order_by": "asc", + "page": "1", + "per_page": "10", + "prove": true, + "query": "tx.height > 1" + } +} \ No newline at end of file diff --git a/tools/rpc-probe/Makefile.toml b/tools/rpc-probe/Makefile.toml index bb4d28c1..6af0d81f 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 = "cometbft/cometbft:v0.37.x" +DOCKER_IMAGE = "cometbft/cometbft:v1.0.0" HOST_RPC_PORT = 26657 CARGO_MAKE_WAIT_MILLISECONDS = 3500 OUTPUT_DIR = "fixtures" diff --git a/tools/rpc-probe/README.md b/tools/rpc-probe/README.md index 79465d7e..35f2d616 100644 --- a/tools/rpc-probe/README.md +++ b/tools/rpc-probe/README.md @@ -17,10 +17,7 @@ To run this probe locally, you will need: ## Usage (with Docker) -From the root of the tools folder: - ```bash -cd rpc-probe cargo make ``` @@ -37,7 +34,7 @@ This will: To run a specific version of CometBFT, simply: ```bash -cargo make --env DOCKER_IMAGE="informaldev/cometbft:v0.34.0" +cargo make --env DOCKER_IMAGE="cometbft/cometbft:v0.37.x" ``` ## Usage (without Docker) @@ -92,5 +89,5 @@ For example, the `rpc/tests/incoming/abci_info.json` file (returned by the The full JSON-RPC wrapper is saved to disk. [CometBFT]: https://github.com/cometbft/cometbft -[CometBFT RPC]: https://docs.cometbft.com/v1/rpc/ -[`abci_info`]: https://docs.cometbft.com/v1/rpc/#/ABCI/abci_info +[CometBFT RPC]: https://docs.cometbft.com/v1.0/rpc/ +[`abci_info`]: https://docs.cometbft.com/v1.0/rpc/#/ABCI/abci_info