From 953f9a03c9d8892d2b1fa652cea800fe2949c506 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 23 Oct 2020 14:00:30 -0400 Subject: [PATCH 01/14] Add WIP rpc probe with quick probe functionality Signed-off-by: Thane Thomson --- Cargo.toml | 1 + README.md | 8 +- light-client/src/components/clock.rs | 2 +- light-client/src/components/io.rs | 4 +- light-client/src/components/scheduler.rs | 4 +- light-client/src/components/verifier.rs | 2 +- light-client/src/evidence.rs | 2 +- light-client/src/fork_detector.rs | 2 +- .../src/operations/commit_validator.rs | 2 +- light-client/src/operations/hasher.rs | 2 +- light-client/src/operations/voting_power.rs | 2 +- light-client/src/predicates.rs | 2 +- light-client/src/store.rs | 4 +- .../multi_peer/conflicting_headers.json | 40 +- ...lid_commits_from_one_of_the_witnesses.json | 132 ++-- ...g_valid_commits_from_the_only_witness.json | 88 +-- .../multi_peer/malicious_validator_set.json | 88 +-- .../bisection/single_peer/_happy_path.json | 88 +-- .../bisection/single_peer/_worst_case.json | 88 +-- .../header_out_of_trusting_period.json | 88 +-- .../single_peer/not_enough_commits.json | 48 +- ...4_4_faulty_Test2NotEnoughTrustFailure.json | 245 ++---- ...C4_4_faulty_Test2NotEnoughTrustFailure.tla | 286 +++---- ...4_4_faulty_Test2NotEnoughTrustSuccess.json | 318 ++++---- ...C4_4_faulty_Test2NotEnoughTrustSuccess.tla | 362 ++++----- ...4_4_faulty_Test3NotEnoughTrustFailure.json | 402 +++------- ...C4_4_faulty_Test3NotEnoughTrustFailure.tla | 614 +++++++-------- ...4_4_faulty_Test3NotEnoughTrustSuccess.json | 457 +++++------ ...C4_4_faulty_Test3NotEnoughTrustSuccess.tla | 720 +++++++++--------- .../single_step/MC4_4_faulty_TestFailure.json | 274 +++---- .../single_step/MC4_4_faulty_TestFailure.tla | 262 ++++--- .../MC4_4_faulty_TestHeaderFromFuture.json | 147 ++-- .../MC4_4_faulty_TestHeaderFromFuture.tla | 76 +- .../single_step/MC4_4_faulty_TestSuccess.json | 381 +++------ .../single_step/MC4_4_faulty_TestSuccess.tla | 554 +++++++------- ...4_4_faulty_TestUntrustedBeforeTrusted.json | 117 ++- ...C4_4_faulty_TestUntrustedBeforeTrusted.tla | 86 +-- ..._4_faulty_TestValsetDifferentAllSteps.json | 246 ++---- ...4_4_faulty_TestValsetDifferentAllSteps.tla | 272 +++---- .../_less_than_one_third_nil_votes.json | 8 +- .../_more_than_two_third_vals_sign.json | 8 +- .../commit/one_third_vals_dont_sign.json | 8 +- .../commit/wrong_commit_height.json | 8 +- .../sequential/commit/wrong_header_hash.json | 8 +- .../commit/wrong_vote_signature.json | 8 +- .../header/non_monotonic_bft_time.json | 8 +- .../header/non_monotonic_header_height.json | 8 +- .../sequential/header/wrong_chain_id.json | 8 +- .../header/wrong_header_timestamp.json | 8 +- .../header/wrong_last_block_id.json | 8 +- .../header/wrong_last_commit_hash.json | 8 +- .../header/wrong_next_valset_hash.json | 8 +- .../sequential/header/wrong_valset_hash.json | 8 +- .../validator_set/_128_validators.json | 8 +- .../validator_set/_1_validator.json | 8 +- .../validator_set/_8_validators.json | 8 +- .../validator_set/_half_valset_changes.json | 12 +- .../_less_than_one_third_valset_changes.json | 12 +- .../_more_than_two_thirds_valset_changes.json | 12 +- .../_one_third_valset_changes.json | 12 +- .../_two_thirds_valset_changes.json | 12 +- .../validator_set/_valset_changes_fully.json | 12 +- .../validator_set/_valset_size_doubles.json | 12 +- .../validator_set/_valset_size_halves.json | 12 +- .../validator_set/faulty_signer.json | 8 +- .../validator_set/wrong_valset.json | 8 +- .../_more_than_two_third_vals_sign.json | 8 +- .../more_signatures_than_validators.json | 8 +- .../skipping/commit/no_signatures.json | 8 +- .../commit/one_third_vals_dont_sign.json | 8 +- .../skipping/header/header_from_future.json | 8 +- .../header/out_of_trusting_period.json | 8 +- .../validator_set/_skip_five_blocks.json | 8 +- .../validator_set/_skip_one_block.json | 8 +- ..._valset_changes_less_than_trust_level.json | 8 +- ..._valset_changes_more_than_trust_level.json | 8 +- .../voting_power/1_empty_signatures.json | 4 +- .../2_1_all_signatures_absent.json | 4 +- .../voting_power/2_2_all_signatures_nil.json | 4 +- .../3_1_one_invalid_signature.json | 4 +- .../3_2_all_signatures_invalid.json | 4 +- .../7_signatures_from_diff_valset.json | 4 +- light-node/src/rpc.rs | 4 +- proto/README.md | 6 +- rpc-probe/Cargo.toml | 29 + rpc-probe/README.md | 11 + rpc-probe/src/error.rs | 58 ++ rpc-probe/src/main.rs | 41 + rpc-probe/src/messages.rs | 25 + rpc-probe/src/opts.rs | 23 + rpc-probe/src/quick.rs | 36 + rpc-probe/src/subscription.rs | 10 + rpc-probe/src/websocket.rs | 389 ++++++++++ rpc/tests/support/block.json | 6 +- rpc/tests/support/block_empty_block_id.json | 12 +- rpc/tests/support/block_with_evidences.json | 10 +- rpc/tests/support/blockchain.json | 40 +- rpc/tests/support/commit.json | 4 +- rpc/tests/support/commit_1.json | 4 +- rpc/tests/support/event_new_block_1.json | 4 +- rpc/tests/support/event_new_block_2.json | 4 +- rpc/tests/support/event_new_block_3.json | 4 +- rpc/tests/support/first_block.json | 6 +- tendermint/src/block/id.rs | 12 +- tendermint/src/proposal.rs | 4 +- tendermint/src/serializers/custom.rs | 10 +- tendermint/src/vote/sign_vote.rs | 6 +- .../support/serialization/block/header.json | 2 +- .../block/header_with_known_hash.json | 2 +- testgen/src/commit.rs | 2 +- testgen/src/vote.rs | 2 +- 111 files changed, 3769 insertions(+), 3865 deletions(-) create mode 100644 rpc-probe/Cargo.toml create mode 100644 rpc-probe/README.md create mode 100644 rpc-probe/src/error.rs create mode 100644 rpc-probe/src/main.rs create mode 100644 rpc-probe/src/messages.rs create mode 100644 rpc-probe/src/opts.rs create mode 100644 rpc-probe/src/quick.rs create mode 100644 rpc-probe/src/subscription.rs create mode 100644 rpc-probe/src/websocket.rs diff --git a/Cargo.toml b/Cargo.toml index e3cb00264..916ca27dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ members = [ "light-node", "proto", "rpc", + "rpc-probe", "tendermint", "testgen" ] diff --git a/README.md b/README.md index 4ef3ad679..736933786 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![Build Status][build-image]][build-link] [![Audit Status][audit-image]][audit-link] [![Apache 2.0 Licensed][license-image]][license-link] -![Rust 1.44+][rustc-image] +![Rust Stable][rustc-image] [Tendermint] in Rust with [TLA+ specifications](/docs/spec). @@ -14,9 +14,9 @@ for Byzantine fault tolerant applications written in any programming language. ## Requirements -Tested with Rust 1.44+, may work on older version. +Tested against the latest stable version of Rust. May work with older versions. -Compatible with the v0.33 series of [Tendermint Core][Tendermint]. +Compatible with the v0.34 series of [Tendermint Core][Tendermint]. ## Documentation @@ -108,7 +108,7 @@ limitations under the License. [audit-link]: https://github.com/informalsystems/tendermint-rs/actions?query=workflow%3AAudit-Check [license-image]: https://img.shields.io/badge/license-Apache2.0-blue.svg [license-link]: https://github.com/interchainio/tendermint-rs/blob/master/LICENSE -[rustc-image]: https://img.shields.io/badge/rustc-1.44+-blue.svg +[rustc-image]: https://img.shields.io/badge/rustc-stable-blue.svg [//]: # (general links) diff --git a/light-client/src/components/clock.rs b/light-client/src/components/clock.rs index 241a549ce..42fd1a1cd 100644 --- a/light-client/src/components/clock.rs +++ b/light-client/src/components/clock.rs @@ -3,7 +3,7 @@ use crate::types::Time; /// Abstracts over the current time. -pub trait Clock: Send { +pub trait Clock: Send + Sync { /// Get the current time. fn now(&self) -> Time; } diff --git a/light-client/src/components/io.rs b/light-client/src/components/io.rs index fd45c8da2..8de2ad377 100644 --- a/light-client/src/components/io.rs +++ b/light-client/src/components/io.rs @@ -53,12 +53,12 @@ impl IoError { } /// Interface for fetching light blocks from a full node, typically via the RPC client. -pub trait Io: Send { +pub trait Io: Send + Sync { /// Fetch a light block at the given height from a peer fn fetch_light_block(&self, height: AtHeight) -> Result; } -impl Io for F +impl Io for F where F: Fn(AtHeight) -> Result, { diff --git a/light-client/src/components/scheduler.rs b/light-client/src/components/scheduler.rs index 1e206271a..a1b085f31 100644 --- a/light-client/src/components/scheduler.rs +++ b/light-client/src/components/scheduler.rs @@ -12,7 +12,7 @@ use std::convert::TryInto; /// improve performance by picking a next block that has already been fetched. #[contract_trait] #[allow(missing_docs)] // This is required because of the `contracts` crate (TODO: open/link issue) -pub trait Scheduler: Send { +pub trait Scheduler: Send + Sync { /// Decides what block to verify next. /// /// ## Precondition @@ -31,7 +31,7 @@ pub trait Scheduler: Send { } #[contract_trait] -impl Scheduler for F +impl Scheduler for F where F: Fn(&dyn LightStore, Height, Height) -> Height, { diff --git a/light-client/src/components/verifier.rs b/light-client/src/components/verifier.rs index 25c61058a..b25177dac 100644 --- a/light-client/src/components/verifier.rs +++ b/light-client/src/components/verifier.rs @@ -44,7 +44,7 @@ impl From> for Verdict { /// ## Implements /// - [TMBC-VAL-CONTAINS-CORR.1] /// - [TMBC-VAL-COMMIT.1] -pub trait Verifier: Send { +pub trait Verifier: Send + Sync { /// Perform the verification. fn verify( &self, diff --git a/light-client/src/evidence.rs b/light-client/src/evidence.rs index 317bb73ae..d18b10c7e 100644 --- a/light-client/src/evidence.rs +++ b/light-client/src/evidence.rs @@ -11,7 +11,7 @@ pub use tendermint::evidence::Evidence; /// Interface for reporting evidence to full nodes, typically via the RPC client. #[contract_trait] #[allow(missing_docs)] // This is required because of the `contracts` crate (TODO: open/link issue) -pub trait EvidenceReporter: Send { +pub trait EvidenceReporter: Send + Sync { /// Report evidence to all connected full nodes. fn report(&self, e: Evidence, peer: PeerId) -> Result; } diff --git a/light-client/src/fork_detector.rs b/light-client/src/fork_detector.rs index 19d46ddc0..a626470b3 100644 --- a/light-client/src/fork_detector.rs +++ b/light-client/src/fork_detector.rs @@ -37,7 +37,7 @@ pub enum Fork { } /// Interface for a fork detector -pub trait ForkDetector: Send { +pub trait ForkDetector: Send + Sync { /// Detect forks using the given verified block, trusted block, /// and list of witnesses to verify the given light block against. fn detect_forks( diff --git a/light-client/src/operations/commit_validator.rs b/light-client/src/operations/commit_validator.rs index 9d1dab2c3..98e9f3b3d 100644 --- a/light-client/src/operations/commit_validator.rs +++ b/light-client/src/operations/commit_validator.rs @@ -10,7 +10,7 @@ use crate::{ use tendermint::block::CommitSig; /// Validates the commit associated with a header against a validator set -pub trait CommitValidator: Send { +pub trait CommitValidator: Send + Sync { /// Perform basic validation fn validate( &self, diff --git a/light-client/src/operations/hasher.rs b/light-client/src/operations/hasher.rs index c57643b02..87cbd58f1 100644 --- a/light-client/src/operations/hasher.rs +++ b/light-client/src/operations/hasher.rs @@ -5,7 +5,7 @@ use crate::types::{Header, ValidatorSet}; use tendermint::{merkle, Hash}; /// Hashing for headers and validator sets -pub trait Hasher: Send { +pub trait Hasher: Send + Sync { /// Hash the given header fn hash_header(&self, header: &Header) -> Hash; diff --git a/light-client/src/operations/voting_power.rs b/light-client/src/operations/voting_power.rs index 3f5b1e895..f979052a2 100644 --- a/light-client/src/operations/voting_power.rs +++ b/light-client/src/operations/voting_power.rs @@ -39,7 +39,7 @@ impl fmt::Display for VotingPowerTally { /// Computes the voting power in a commit against a validator set. /// /// This trait provides default implementation of some helper functions. -pub trait VotingPowerCalculator: Send { +pub trait VotingPowerCalculator: Send + Sync { /// Compute the total voting power in a validator set fn total_power_of(&self, validator_set: &ValidatorSet) -> u64 { validator_set diff --git a/light-client/src/predicates.rs b/light-client/src/predicates.rs index 232f9fc84..1e422804b 100644 --- a/light-client/src/predicates.rs +++ b/light-client/src/predicates.rs @@ -24,7 +24,7 @@ impl VerificationPredicates for ProdPredicates {} /// /// This enables test implementations to only override a single method rather than /// have to re-define every predicate. -pub trait VerificationPredicates: Send { +pub trait VerificationPredicates: Send + Sync { /// Compare the provided validator_set_hash against the hash produced from hashing the validator /// set. fn validator_sets_match( diff --git a/light-client/src/store.rs b/light-client/src/store.rs index 38c70dd71..4987acad0 100644 --- a/light-client/src/store.rs +++ b/light-client/src/store.rs @@ -4,6 +4,8 @@ //! - a transient, in-memory implementation for testing purposes //! - a persistent, on-disk, sled-backed implementation for production +use std::fmt::Debug; + use crate::types::{Height, LightBlock, Status}; use crate::utils::std_ext; @@ -18,7 +20,7 @@ pub mod sled; /// /// ## Implements /// - [LCV-DIST-STORE.1] -pub trait LightStore: std::fmt::Debug + Send { +pub trait LightStore: Debug + Send + Sync { /// Get the light block at the given height with the given status, or return `None` otherwise. fn get(&self, height: Height, status: Status) -> Option; diff --git a/light-client/tests/support/bisection/multi_peer/conflicting_headers.json b/light-client/tests/support/bisection/multi_peer/conflicting_headers.json index 226d19017..91c1b5012 100644 --- a/light-client/tests/support/bisection/multi_peer/conflicting_headers.json +++ b/light-client/tests/support/bisection/multi_peer/conflicting_headers.json @@ -24,7 +24,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -44,7 +44,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -140,7 +140,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -160,7 +160,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -256,7 +256,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -276,7 +276,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -372,7 +372,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -392,7 +392,7 @@ "round": 1, "block_id": { "hash": "DBAD6F9732C21E989DE6C3355F79E48366A203BF96D3743B3869ECEF76338C1E", - "parts": { + "part_set_header": { "total": 1, "hash": "06AC378772505FF1926FA3DAE859EEDA16A463E7059825A4730CE9EAF16A049A" } @@ -506,7 +506,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "DBAD6F9732C21E989DE6C3355F79E48366A203BF96D3743B3869ECEF76338C1E", - "parts": { + "part_set_header": { "total": 1, "hash": "06AC378772505FF1926FA3DAE859EEDA16A463E7059825A4730CE9EAF16A049A" } @@ -526,7 +526,7 @@ "round": 1, "block_id": { "hash": "7D7252C469192BAC36AE4D2A423A0E181642FBD77808C79FC7C1DA5CFC8AE016", - "parts": { + "part_set_header": { "total": 1, "hash": "1C9B0AB9D0AF5004FCD1E7D89CF3A5FA8BD1B5BAFB8F28AB0E006B06B37B6DAA" } @@ -678,7 +678,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -698,7 +698,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -794,7 +794,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -814,7 +814,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -910,7 +910,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -930,7 +930,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1026,7 +1026,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1046,7 +1046,7 @@ "round": 1, "block_id": { "hash": "DBAD6F9732C21E989DE6C3355F79E48366A203BF96D3743B3869ECEF76338C1E", - "parts": { + "part_set_header": { "total": 1, "hash": "06AC378772505FF1926FA3DAE859EEDA16A463E7059825A4730CE9EAF16A049A" } @@ -1160,7 +1160,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "DBAD6F9732C21E989DE6C3355F79E48366A203BF96D3743B3869ECEF76338C1E", - "parts": { + "part_set_header": { "total": 1, "hash": "06AC378772505FF1926FA3DAE859EEDA16A463E7059825A4730CE9EAF16A049A" } @@ -1180,7 +1180,7 @@ "round": 1, "block_id": { "hash": "0F15ADC820055D678BC92F7363C60B3743A4B9E1743A0E0D16FD6A4A06A100AC", - "parts": { + "part_set_header": { "total": 1, "hash": "C0EDF414246DE95F4400D30639B606AD27537EB3D3C564A65AA0D446D267F31C" } diff --git a/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_one_of_the_witnesses.json b/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_one_of_the_witnesses.json index 540ada294..fca2166f4 100644 --- a/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_one_of_the_witnesses.json +++ b/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_one_of_the_witnesses.json @@ -24,7 +24,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -44,7 +44,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -140,7 +140,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -160,7 +160,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -256,7 +256,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -276,7 +276,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -372,7 +372,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -392,7 +392,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -488,7 +488,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -508,7 +508,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -604,7 +604,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -624,7 +624,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -720,7 +720,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -740,7 +740,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -836,7 +836,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -856,7 +856,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -952,7 +952,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -972,7 +972,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1068,7 +1068,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1088,7 +1088,7 @@ "round": 1, "block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1184,7 +1184,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1204,7 +1204,7 @@ "round": 1, "block_id": { "hash": "93FE74FA6532B8F50113CA411FFC806E91FA8F2FF3F159BA084FF628F64135EB", - "parts": { + "part_set_header": { "total": 1, "hash": "6D68EA2CA683B6F58A55FE054568DC136D4038D2BEDBC5470DD521E92C603B83" } @@ -1308,7 +1308,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -1328,7 +1328,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1424,7 +1424,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1444,7 +1444,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1540,7 +1540,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1560,7 +1560,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1656,7 +1656,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1676,7 +1676,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1772,7 +1772,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1792,7 +1792,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1888,7 +1888,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1908,7 +1908,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2004,7 +2004,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2024,7 +2024,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2120,7 +2120,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2140,7 +2140,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2236,7 +2236,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2256,7 +2256,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2352,7 +2352,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2372,7 +2372,7 @@ "round": 1, "block_id": { "hash": "3C7014E22832722CB760957E4E14CB2BAF4565710EB6C4DE0C0B8C408142FB3E", - "parts": { + "part_set_header": { "total": 1, "hash": "0B87FCF1BD52BEB0067DB112AB09F6F7117744211B03719E97FD0789D27C87EF" } @@ -2468,7 +2468,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "3C7014E22832722CB760957E4E14CB2BAF4565710EB6C4DE0C0B8C408142FB3E", - "parts": { + "part_set_header": { "total": 1, "hash": "0B87FCF1BD52BEB0067DB112AB09F6F7117744211B03719E97FD0789D27C87EF" } @@ -2488,7 +2488,7 @@ "round": 1, "block_id": { "hash": "BBE3852C0581E5C851174ADC054142FA94CED01AA4E5BBC017A6DB21F1A230F8", - "parts": { + "part_set_header": { "total": 1, "hash": "B31A857D446ADC52D723485F2682BEB242611C237F233C7104FA9B5B27DCCA15" } @@ -2592,7 +2592,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -2612,7 +2612,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -2708,7 +2708,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -2728,7 +2728,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -2824,7 +2824,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -2844,7 +2844,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -2940,7 +2940,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -2960,7 +2960,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -3056,7 +3056,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -3076,7 +3076,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -3172,7 +3172,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -3192,7 +3192,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -3288,7 +3288,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -3308,7 +3308,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -3404,7 +3404,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -3424,7 +3424,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -3520,7 +3520,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -3540,7 +3540,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -3636,7 +3636,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -3656,7 +3656,7 @@ "round": 1, "block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -3752,7 +3752,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -3772,7 +3772,7 @@ "round": 1, "block_id": { "hash": "93FE74FA6532B8F50113CA411FFC806E91FA8F2FF3F159BA084FF628F64135EB", - "parts": { + "part_set_header": { "total": 1, "hash": "6D68EA2CA683B6F58A55FE054568DC136D4038D2BEDBC5470DD521E92C603B83" } diff --git a/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_the_only_witness.json b/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_the_only_witness.json index a829f02cc..86b3cdb2d 100644 --- a/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_the_only_witness.json +++ b/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_the_only_witness.json @@ -24,7 +24,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -44,7 +44,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -140,7 +140,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -160,7 +160,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -256,7 +256,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -276,7 +276,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -372,7 +372,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -392,7 +392,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -488,7 +488,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -508,7 +508,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -604,7 +604,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -624,7 +624,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -720,7 +720,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -740,7 +740,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -836,7 +836,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -856,7 +856,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -952,7 +952,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -972,7 +972,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1068,7 +1068,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1088,7 +1088,7 @@ "round": 1, "block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1184,7 +1184,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1204,7 +1204,7 @@ "round": 1, "block_id": { "hash": "93FE74FA6532B8F50113CA411FFC806E91FA8F2FF3F159BA084FF628F64135EB", - "parts": { + "part_set_header": { "total": 1, "hash": "6D68EA2CA683B6F58A55FE054568DC136D4038D2BEDBC5470DD521E92C603B83" } @@ -1308,7 +1308,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -1328,7 +1328,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1424,7 +1424,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1444,7 +1444,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1540,7 +1540,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1560,7 +1560,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1656,7 +1656,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1676,7 +1676,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1772,7 +1772,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1792,7 +1792,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1888,7 +1888,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1908,7 +1908,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2004,7 +2004,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2024,7 +2024,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2120,7 +2120,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2140,7 +2140,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2236,7 +2236,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2256,7 +2256,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2352,7 +2352,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2372,7 +2372,7 @@ "round": 1, "block_id": { "hash": "3C7014E22832722CB760957E4E14CB2BAF4565710EB6C4DE0C0B8C408142FB3E", - "parts": { + "part_set_header": { "total": 1, "hash": "0B87FCF1BD52BEB0067DB112AB09F6F7117744211B03719E97FD0789D27C87EF" } @@ -2468,7 +2468,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "3C7014E22832722CB760957E4E14CB2BAF4565710EB6C4DE0C0B8C408142FB3E", - "parts": { + "part_set_header": { "total": 1, "hash": "0B87FCF1BD52BEB0067DB112AB09F6F7117744211B03719E97FD0789D27C87EF" } @@ -2488,7 +2488,7 @@ "round": 1, "block_id": { "hash": "BBE3852C0581E5C851174ADC054142FA94CED01AA4E5BBC017A6DB21F1A230F8", - "parts": { + "part_set_header": { "total": 1, "hash": "B31A857D446ADC52D723485F2682BEB242611C237F233C7104FA9B5B27DCCA15" } diff --git a/light-client/tests/support/bisection/multi_peer/malicious_validator_set.json b/light-client/tests/support/bisection/multi_peer/malicious_validator_set.json index d91d7d06d..32274e895 100644 --- a/light-client/tests/support/bisection/multi_peer/malicious_validator_set.json +++ b/light-client/tests/support/bisection/multi_peer/malicious_validator_set.json @@ -24,7 +24,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -44,7 +44,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -140,7 +140,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -160,7 +160,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -256,7 +256,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -276,7 +276,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -372,7 +372,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -392,7 +392,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -488,7 +488,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -508,7 +508,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -604,7 +604,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -624,7 +624,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -720,7 +720,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -740,7 +740,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -836,7 +836,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -856,7 +856,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -952,7 +952,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -972,7 +972,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1068,7 +1068,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1088,7 +1088,7 @@ "round": 1, "block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1184,7 +1184,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1204,7 +1204,7 @@ "round": 1, "block_id": { "hash": "03C21748C1DA3316CC26E03D9BDCA7B8585A9CFF4C9A982712B248837069F87D", - "parts": { + "part_set_header": { "total": 1, "hash": "662519D5284046F98DCEAA37D93C2FF736C106578E9F043CC107A694F707DB36" } @@ -1308,7 +1308,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -1328,7 +1328,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1424,7 +1424,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1444,7 +1444,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1540,7 +1540,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1560,7 +1560,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1656,7 +1656,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1676,7 +1676,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1772,7 +1772,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1792,7 +1792,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1888,7 +1888,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1908,7 +1908,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2004,7 +2004,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2024,7 +2024,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2120,7 +2120,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2140,7 +2140,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2236,7 +2236,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2256,7 +2256,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2352,7 +2352,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2372,7 +2372,7 @@ "round": 1, "block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -2468,7 +2468,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -2488,7 +2488,7 @@ "round": 1, "block_id": { "hash": "93FE74FA6532B8F50113CA411FFC806E91FA8F2FF3F159BA084FF628F64135EB", - "parts": { + "part_set_header": { "total": 1, "hash": "6D68EA2CA683B6F58A55FE054568DC136D4038D2BEDBC5470DD521E92C603B83" } diff --git a/light-client/tests/support/bisection/single_peer/_happy_path.json b/light-client/tests/support/bisection/single_peer/_happy_path.json index d49571b39..a91d072f9 100644 --- a/light-client/tests/support/bisection/single_peer/_happy_path.json +++ b/light-client/tests/support/bisection/single_peer/_happy_path.json @@ -24,7 +24,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -44,7 +44,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -140,7 +140,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -160,7 +160,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -256,7 +256,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -276,7 +276,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -372,7 +372,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -392,7 +392,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -488,7 +488,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -508,7 +508,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -604,7 +604,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -624,7 +624,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -720,7 +720,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -740,7 +740,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -836,7 +836,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -856,7 +856,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -952,7 +952,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -972,7 +972,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1068,7 +1068,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1088,7 +1088,7 @@ "round": 1, "block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1184,7 +1184,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1204,7 +1204,7 @@ "round": 1, "block_id": { "hash": "93FE74FA6532B8F50113CA411FFC806E91FA8F2FF3F159BA084FF628F64135EB", - "parts": { + "part_set_header": { "total": 1, "hash": "6D68EA2CA683B6F58A55FE054568DC136D4038D2BEDBC5470DD521E92C603B83" } @@ -1308,7 +1308,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -1328,7 +1328,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1424,7 +1424,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1444,7 +1444,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1540,7 +1540,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1560,7 +1560,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1656,7 +1656,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1676,7 +1676,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1772,7 +1772,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1792,7 +1792,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1888,7 +1888,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1908,7 +1908,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2004,7 +2004,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2024,7 +2024,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2120,7 +2120,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2140,7 +2140,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2236,7 +2236,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2256,7 +2256,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2352,7 +2352,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2372,7 +2372,7 @@ "round": 1, "block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -2468,7 +2468,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -2488,7 +2488,7 @@ "round": 1, "block_id": { "hash": "93FE74FA6532B8F50113CA411FFC806E91FA8F2FF3F159BA084FF628F64135EB", - "parts": { + "part_set_header": { "total": 1, "hash": "6D68EA2CA683B6F58A55FE054568DC136D4038D2BEDBC5470DD521E92C603B83" } diff --git a/light-client/tests/support/bisection/single_peer/_worst_case.json b/light-client/tests/support/bisection/single_peer/_worst_case.json index 3b3563509..44734924d 100644 --- a/light-client/tests/support/bisection/single_peer/_worst_case.json +++ b/light-client/tests/support/bisection/single_peer/_worst_case.json @@ -24,7 +24,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -44,7 +44,7 @@ "round": 1, "block_id": { "hash": "479832A9CA4ABA9BB5D34E452E3500887B3C60AD011778487F76E81E54D4ABB8", - "parts": { + "part_set_header": { "total": 1, "hash": "CBBBBB757B4FA832280298A400F566DA0884CA8431C4514CE4F56BBFA98C1E0E" } @@ -116,7 +116,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "479832A9CA4ABA9BB5D34E452E3500887B3C60AD011778487F76E81E54D4ABB8", - "parts": { + "part_set_header": { "total": 1, "hash": "CBBBBB757B4FA832280298A400F566DA0884CA8431C4514CE4F56BBFA98C1E0E" } @@ -136,7 +136,7 @@ "round": 1, "block_id": { "hash": "77EEEF7A214F9EC4F68E37050FF5E78830FC76E349AC1AC59861D59D179A5CD3", - "parts": { + "part_set_header": { "total": 1, "hash": "3334A22A9B9A6F63F1A2ADFDCA82E4A61A86B7F623CD318F4A403BD7CD3B4ADB" } @@ -208,7 +208,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "77EEEF7A214F9EC4F68E37050FF5E78830FC76E349AC1AC59861D59D179A5CD3", - "parts": { + "part_set_header": { "total": 1, "hash": "3334A22A9B9A6F63F1A2ADFDCA82E4A61A86B7F623CD318F4A403BD7CD3B4ADB" } @@ -228,7 +228,7 @@ "round": 1, "block_id": { "hash": "C8D630B275011ADAD935B05A52BC7CBC8BE0E48037C63942D5D79EC05EA8D8D7", - "parts": { + "part_set_header": { "total": 1, "hash": "02D0DA4B5B3551D2172A96D148FDC480374D2C96AEFD95054BBC894C1F5FEFDD" } @@ -300,7 +300,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "C8D630B275011ADAD935B05A52BC7CBC8BE0E48037C63942D5D79EC05EA8D8D7", - "parts": { + "part_set_header": { "total": 1, "hash": "02D0DA4B5B3551D2172A96D148FDC480374D2C96AEFD95054BBC894C1F5FEFDD" } @@ -320,7 +320,7 @@ "round": 1, "block_id": { "hash": "C424A7FC8BC89D221FB74DA9AC366A5786AFA388C3AC45A321C24482D8028ECF", - "parts": { + "part_set_header": { "total": 1, "hash": "AC61630AB32EC90A54973E31202C95A132E366A7C123FA38C96D52AE8126E6D4" } @@ -392,7 +392,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "C424A7FC8BC89D221FB74DA9AC366A5786AFA388C3AC45A321C24482D8028ECF", - "parts": { + "part_set_header": { "total": 1, "hash": "AC61630AB32EC90A54973E31202C95A132E366A7C123FA38C96D52AE8126E6D4" } @@ -412,7 +412,7 @@ "round": 1, "block_id": { "hash": "AF185FD70B883BEAE2648750CD5E8E885AA4DF2C0FCEC71248F0B1369BB1B1D1", - "parts": { + "part_set_header": { "total": 1, "hash": "FA77EEB64B9C42F38EE042A24608A7DF440ED95923CD392BDC0992E8C9923F6B" } @@ -484,7 +484,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "AF185FD70B883BEAE2648750CD5E8E885AA4DF2C0FCEC71248F0B1369BB1B1D1", - "parts": { + "part_set_header": { "total": 1, "hash": "FA77EEB64B9C42F38EE042A24608A7DF440ED95923CD392BDC0992E8C9923F6B" } @@ -504,7 +504,7 @@ "round": 1, "block_id": { "hash": "4BBA927984F2F62DD1EB08DD96F1A033785B71D6B0520B12BA2924816D2C58B6", - "parts": { + "part_set_header": { "total": 1, "hash": "0ECFB400EEC4FFF1ECA650C9F54B12500D1B34C59F097D367E477CC04B2EF602" } @@ -576,7 +576,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "4BBA927984F2F62DD1EB08DD96F1A033785B71D6B0520B12BA2924816D2C58B6", - "parts": { + "part_set_header": { "total": 1, "hash": "0ECFB400EEC4FFF1ECA650C9F54B12500D1B34C59F097D367E477CC04B2EF602" } @@ -596,7 +596,7 @@ "round": 1, "block_id": { "hash": "F40B6ECCC702DBF14EE5B8EF1469EAAA1E951835D989730D73EC763795897E33", - "parts": { + "part_set_header": { "total": 1, "hash": "43F39CA3C09BA319DA31AF85D235543BDD2E661216B3FA32F7087E5D506145F6" } @@ -668,7 +668,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "F40B6ECCC702DBF14EE5B8EF1469EAAA1E951835D989730D73EC763795897E33", - "parts": { + "part_set_header": { "total": 1, "hash": "43F39CA3C09BA319DA31AF85D235543BDD2E661216B3FA32F7087E5D506145F6" } @@ -688,7 +688,7 @@ "round": 1, "block_id": { "hash": "1CB5B5933E70CDA87A48852763FA410BA6E69891EE4D7B4DD151C78D02B2AFC0", - "parts": { + "part_set_header": { "total": 1, "hash": "3D1EE990FB24878B3C40ACFA450E48FFAD61CD37F839458CA920F1FCC1E24D44" } @@ -760,7 +760,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "1CB5B5933E70CDA87A48852763FA410BA6E69891EE4D7B4DD151C78D02B2AFC0", - "parts": { + "part_set_header": { "total": 1, "hash": "3D1EE990FB24878B3C40ACFA450E48FFAD61CD37F839458CA920F1FCC1E24D44" } @@ -780,7 +780,7 @@ "round": 1, "block_id": { "hash": "77F5450A9770A02572BD1D6F2B15D988099BA01627BE0D0AAF2D2F663371A640", - "parts": { + "part_set_header": { "total": 1, "hash": "5BE4D8206C708ADB71363B0FD06BD7A4DD7E18BB96582E47BA6ED3BB52B5E1A9" } @@ -852,7 +852,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "77F5450A9770A02572BD1D6F2B15D988099BA01627BE0D0AAF2D2F663371A640", - "parts": { + "part_set_header": { "total": 1, "hash": "5BE4D8206C708ADB71363B0FD06BD7A4DD7E18BB96582E47BA6ED3BB52B5E1A9" } @@ -872,7 +872,7 @@ "round": 1, "block_id": { "hash": "BE382E04E6479B508F2147448A021EE4FB1752006FDCBBF97CD8868BE2E40765", - "parts": { + "part_set_header": { "total": 1, "hash": "2A2D30A3A0D60C2FF3E32384D6A4D66273102A30D46DE0CBC96FEC43EF1ECC57" } @@ -944,7 +944,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "BE382E04E6479B508F2147448A021EE4FB1752006FDCBBF97CD8868BE2E40765", - "parts": { + "part_set_header": { "total": 1, "hash": "2A2D30A3A0D60C2FF3E32384D6A4D66273102A30D46DE0CBC96FEC43EF1ECC57" } @@ -964,7 +964,7 @@ "round": 1, "block_id": { "hash": "BCA092A4D866D08D5DE1C21FC2E4816949B966ABA87F2FAFA2BA9E9E4357A021", - "parts": { + "part_set_header": { "total": 1, "hash": "CA4E6B368184593E710EE9476F991762749FA3830FAF1F07A788331AE9A428AB" } @@ -1044,7 +1044,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -1064,7 +1064,7 @@ "round": 1, "block_id": { "hash": "479832A9CA4ABA9BB5D34E452E3500887B3C60AD011778487F76E81E54D4ABB8", - "parts": { + "part_set_header": { "total": 1, "hash": "CBBBBB757B4FA832280298A400F566DA0884CA8431C4514CE4F56BBFA98C1E0E" } @@ -1136,7 +1136,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "479832A9CA4ABA9BB5D34E452E3500887B3C60AD011778487F76E81E54D4ABB8", - "parts": { + "part_set_header": { "total": 1, "hash": "CBBBBB757B4FA832280298A400F566DA0884CA8431C4514CE4F56BBFA98C1E0E" } @@ -1156,7 +1156,7 @@ "round": 1, "block_id": { "hash": "77EEEF7A214F9EC4F68E37050FF5E78830FC76E349AC1AC59861D59D179A5CD3", - "parts": { + "part_set_header": { "total": 1, "hash": "3334A22A9B9A6F63F1A2ADFDCA82E4A61A86B7F623CD318F4A403BD7CD3B4ADB" } @@ -1228,7 +1228,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "77EEEF7A214F9EC4F68E37050FF5E78830FC76E349AC1AC59861D59D179A5CD3", - "parts": { + "part_set_header": { "total": 1, "hash": "3334A22A9B9A6F63F1A2ADFDCA82E4A61A86B7F623CD318F4A403BD7CD3B4ADB" } @@ -1248,7 +1248,7 @@ "round": 1, "block_id": { "hash": "C8D630B275011ADAD935B05A52BC7CBC8BE0E48037C63942D5D79EC05EA8D8D7", - "parts": { + "part_set_header": { "total": 1, "hash": "02D0DA4B5B3551D2172A96D148FDC480374D2C96AEFD95054BBC894C1F5FEFDD" } @@ -1320,7 +1320,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "C8D630B275011ADAD935B05A52BC7CBC8BE0E48037C63942D5D79EC05EA8D8D7", - "parts": { + "part_set_header": { "total": 1, "hash": "02D0DA4B5B3551D2172A96D148FDC480374D2C96AEFD95054BBC894C1F5FEFDD" } @@ -1340,7 +1340,7 @@ "round": 1, "block_id": { "hash": "C424A7FC8BC89D221FB74DA9AC366A5786AFA388C3AC45A321C24482D8028ECF", - "parts": { + "part_set_header": { "total": 1, "hash": "AC61630AB32EC90A54973E31202C95A132E366A7C123FA38C96D52AE8126E6D4" } @@ -1412,7 +1412,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "C424A7FC8BC89D221FB74DA9AC366A5786AFA388C3AC45A321C24482D8028ECF", - "parts": { + "part_set_header": { "total": 1, "hash": "AC61630AB32EC90A54973E31202C95A132E366A7C123FA38C96D52AE8126E6D4" } @@ -1432,7 +1432,7 @@ "round": 1, "block_id": { "hash": "AF185FD70B883BEAE2648750CD5E8E885AA4DF2C0FCEC71248F0B1369BB1B1D1", - "parts": { + "part_set_header": { "total": 1, "hash": "FA77EEB64B9C42F38EE042A24608A7DF440ED95923CD392BDC0992E8C9923F6B" } @@ -1504,7 +1504,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "AF185FD70B883BEAE2648750CD5E8E885AA4DF2C0FCEC71248F0B1369BB1B1D1", - "parts": { + "part_set_header": { "total": 1, "hash": "FA77EEB64B9C42F38EE042A24608A7DF440ED95923CD392BDC0992E8C9923F6B" } @@ -1524,7 +1524,7 @@ "round": 1, "block_id": { "hash": "4BBA927984F2F62DD1EB08DD96F1A033785B71D6B0520B12BA2924816D2C58B6", - "parts": { + "part_set_header": { "total": 1, "hash": "0ECFB400EEC4FFF1ECA650C9F54B12500D1B34C59F097D367E477CC04B2EF602" } @@ -1596,7 +1596,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "4BBA927984F2F62DD1EB08DD96F1A033785B71D6B0520B12BA2924816D2C58B6", - "parts": { + "part_set_header": { "total": 1, "hash": "0ECFB400EEC4FFF1ECA650C9F54B12500D1B34C59F097D367E477CC04B2EF602" } @@ -1616,7 +1616,7 @@ "round": 1, "block_id": { "hash": "F40B6ECCC702DBF14EE5B8EF1469EAAA1E951835D989730D73EC763795897E33", - "parts": { + "part_set_header": { "total": 1, "hash": "43F39CA3C09BA319DA31AF85D235543BDD2E661216B3FA32F7087E5D506145F6" } @@ -1688,7 +1688,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "F40B6ECCC702DBF14EE5B8EF1469EAAA1E951835D989730D73EC763795897E33", - "parts": { + "part_set_header": { "total": 1, "hash": "43F39CA3C09BA319DA31AF85D235543BDD2E661216B3FA32F7087E5D506145F6" } @@ -1708,7 +1708,7 @@ "round": 1, "block_id": { "hash": "1CB5B5933E70CDA87A48852763FA410BA6E69891EE4D7B4DD151C78D02B2AFC0", - "parts": { + "part_set_header": { "total": 1, "hash": "3D1EE990FB24878B3C40ACFA450E48FFAD61CD37F839458CA920F1FCC1E24D44" } @@ -1780,7 +1780,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "1CB5B5933E70CDA87A48852763FA410BA6E69891EE4D7B4DD151C78D02B2AFC0", - "parts": { + "part_set_header": { "total": 1, "hash": "3D1EE990FB24878B3C40ACFA450E48FFAD61CD37F839458CA920F1FCC1E24D44" } @@ -1800,7 +1800,7 @@ "round": 1, "block_id": { "hash": "77F5450A9770A02572BD1D6F2B15D988099BA01627BE0D0AAF2D2F663371A640", - "parts": { + "part_set_header": { "total": 1, "hash": "5BE4D8206C708ADB71363B0FD06BD7A4DD7E18BB96582E47BA6ED3BB52B5E1A9" } @@ -1872,7 +1872,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "77F5450A9770A02572BD1D6F2B15D988099BA01627BE0D0AAF2D2F663371A640", - "parts": { + "part_set_header": { "total": 1, "hash": "5BE4D8206C708ADB71363B0FD06BD7A4DD7E18BB96582E47BA6ED3BB52B5E1A9" } @@ -1892,7 +1892,7 @@ "round": 1, "block_id": { "hash": "BE382E04E6479B508F2147448A021EE4FB1752006FDCBBF97CD8868BE2E40765", - "parts": { + "part_set_header": { "total": 1, "hash": "2A2D30A3A0D60C2FF3E32384D6A4D66273102A30D46DE0CBC96FEC43EF1ECC57" } @@ -1964,7 +1964,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "BE382E04E6479B508F2147448A021EE4FB1752006FDCBBF97CD8868BE2E40765", - "parts": { + "part_set_header": { "total": 1, "hash": "2A2D30A3A0D60C2FF3E32384D6A4D66273102A30D46DE0CBC96FEC43EF1ECC57" } @@ -1984,7 +1984,7 @@ "round": 1, "block_id": { "hash": "BCA092A4D866D08D5DE1C21FC2E4816949B966ABA87F2FAFA2BA9E9E4357A021", - "parts": { + "part_set_header": { "total": 1, "hash": "CA4E6B368184593E710EE9476F991762749FA3830FAF1F07A788331AE9A428AB" } diff --git a/light-client/tests/support/bisection/single_peer/header_out_of_trusting_period.json b/light-client/tests/support/bisection/single_peer/header_out_of_trusting_period.json index 53006e482..d7b2f87de 100644 --- a/light-client/tests/support/bisection/single_peer/header_out_of_trusting_period.json +++ b/light-client/tests/support/bisection/single_peer/header_out_of_trusting_period.json @@ -24,7 +24,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -44,7 +44,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -140,7 +140,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -160,7 +160,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -256,7 +256,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -276,7 +276,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -372,7 +372,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -392,7 +392,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -488,7 +488,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -508,7 +508,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -604,7 +604,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -624,7 +624,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -720,7 +720,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -740,7 +740,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -836,7 +836,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -856,7 +856,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -952,7 +952,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -972,7 +972,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1068,7 +1068,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -1088,7 +1088,7 @@ "round": 1, "block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1184,7 +1184,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -1204,7 +1204,7 @@ "round": 1, "block_id": { "hash": "93FE74FA6532B8F50113CA411FFC806E91FA8F2FF3F159BA084FF628F64135EB", - "parts": { + "part_set_header": { "total": 1, "hash": "6D68EA2CA683B6F58A55FE054568DC136D4038D2BEDBC5470DD521E92C603B83" } @@ -1308,7 +1308,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -1328,7 +1328,7 @@ "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1424,7 +1424,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -1444,7 +1444,7 @@ "round": 1, "block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1540,7 +1540,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "BB4E88B37D3E3579FB9050995A5C5C190DCA1CD3A736EAA9E487A82E81D6B9FD", - "parts": { + "part_set_header": { "total": 1, "hash": "FBDBEB6CCB91FE6E248860A51715688664E9AAA46CD2676BE6383401D932BE92" } @@ -1560,7 +1560,7 @@ "round": 1, "block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1656,7 +1656,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "AF117CC86390E923E4CDE8D21C1F998A854344BA06503819430AC3F0D209DA0C", - "parts": { + "part_set_header": { "total": 1, "hash": "74B5248FA6EB86201A2879574E67C2E7C974FDCA1E8D105B693095652423F6D7" } @@ -1676,7 +1676,7 @@ "round": 1, "block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1772,7 +1772,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "533F85C98275E70D185185552FFC0175B10EA015FD4937F187E1C9DB73D574E9", - "parts": { + "part_set_header": { "total": 1, "hash": "5ACD2FDE7D377584223D61AA2243EA53D71D9C7D1A226917532797114D5B9F27" } @@ -1792,7 +1792,7 @@ "round": 1, "block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1888,7 +1888,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "E73ABDBA79E39314A35EB4BF37256CE00B7CA0F942473ADF02A2B67B5ED04004", - "parts": { + "part_set_header": { "total": 1, "hash": "4386501520212DCA3435FA73EB9D074D30E3A66DCA860BBA5C9DD7AB25DFA2B2" } @@ -1908,7 +1908,7 @@ "round": 1, "block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2004,7 +2004,7 @@ "time": "2019-11-02T15:04:40Z", "last_block_id": { "hash": "9DA24AE8B44655A69E898BA164E85AFC63BBC1E7160DD10168DFD88C60E628F3", - "parts": { + "part_set_header": { "total": 1, "hash": "59E58B99B3F626A0D05397C75CA6F609E0CF4F4D3E9BEAA5D071381631EF47AB" } @@ -2024,7 +2024,7 @@ "round": 1, "block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2120,7 +2120,7 @@ "time": "2019-11-02T15:04:45Z", "last_block_id": { "hash": "1AC2820DA5045702CDE4643DD8836693175A50A096875DA6C095D7748AE2E1A5", - "parts": { + "part_set_header": { "total": 1, "hash": "377258C5CCBCDF342021E255FE676851E3569352C89B3A07BF5EEBF903558461" } @@ -2140,7 +2140,7 @@ "round": 1, "block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2236,7 +2236,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "0047CBC3B54D76D589E1F39E5AF237C283C672AD65677E342247EBC245060B0E", - "parts": { + "part_set_header": { "total": 1, "hash": "E4A1465E4A86842E3CDB8AC85CA15793FE614F5B088C8EFBE57199868E0F638E" } @@ -2256,7 +2256,7 @@ "round": 1, "block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2352,7 +2352,7 @@ "time": "2019-11-02T15:04:55Z", "last_block_id": { "hash": "CF72EB7DD055C1E5B524036268AA032F25AD3706397E015FDAF94F7498F8AC86", - "parts": { + "part_set_header": { "total": 1, "hash": "B288E5433B4FC5ED6C948FC2161987405EBF194234C1ADE4A0988B6C013C35DB" } @@ -2372,7 +2372,7 @@ "round": 1, "block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -2468,7 +2468,7 @@ "time": "2019-11-02T15:05:00Z", "last_block_id": { "hash": "646B65741671F7842E865DB501995CC8184F3B17BFD3A2B083DB9FE5CA9D1ADA", - "parts": { + "part_set_header": { "total": 1, "hash": "FDBBAC19E83F6D74209FF096E0B2B9E1D69A2107B894B95B6C96B0D7E95CC93C" } @@ -2488,7 +2488,7 @@ "round": 1, "block_id": { "hash": "93FE74FA6532B8F50113CA411FFC806E91FA8F2FF3F159BA084FF628F64135EB", - "parts": { + "part_set_header": { "total": 1, "hash": "6D68EA2CA683B6F58A55FE054568DC136D4038D2BEDBC5470DD521E92C603B83" } diff --git a/light-client/tests/support/bisection/single_peer/not_enough_commits.json b/light-client/tests/support/bisection/single_peer/not_enough_commits.json index b8ea8a825..90a636f17 100644 --- a/light-client/tests/support/bisection/single_peer/not_enough_commits.json +++ b/light-client/tests/support/bisection/single_peer/not_enough_commits.json @@ -24,7 +24,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -44,7 +44,7 @@ "round": 1, "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -188,7 +188,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -208,7 +208,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } @@ -352,7 +352,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } @@ -372,7 +372,7 @@ "round": 1, "block_id": { "hash": "33B09B99A8361F66901189FD90421193BF042EB0F77611AA6EECF336C4D0023E", - "parts": { + "part_set_header": { "total": 1, "hash": "27942F5568D507D9A24EFE8E69C92549CEF6EDC65A339EA1EC1EFCF567A345E0" } @@ -516,7 +516,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "33B09B99A8361F66901189FD90421193BF042EB0F77611AA6EECF336C4D0023E", - "parts": { + "part_set_header": { "total": 1, "hash": "27942F5568D507D9A24EFE8E69C92549CEF6EDC65A339EA1EC1EFCF567A345E0" } @@ -536,7 +536,7 @@ "round": 1, "block_id": { "hash": "E31F06F3C0FB3D1D9B8D5EC07A4C2A724CA848676F555E11463A3430CDFE7B5D", - "parts": { + "part_set_header": { "total": 1, "hash": "C21ABF38384FA329E41149881BD1D585364E896688798B8B4A0720DCEA1DBE66" } @@ -680,7 +680,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "E31F06F3C0FB3D1D9B8D5EC07A4C2A724CA848676F555E11463A3430CDFE7B5D", - "parts": { + "part_set_header": { "total": 1, "hash": "C21ABF38384FA329E41149881BD1D585364E896688798B8B4A0720DCEA1DBE66" } @@ -700,7 +700,7 @@ "round": 1, "block_id": { "hash": "C96A0353879E003B199369036029639D5BA45AC7B179BD23B43E76C6F84B8196", - "parts": { + "part_set_header": { "total": 1, "hash": "0226BB60E49A65E6825B9D530CA3111A63ED3BB349C5C25AA9E018F90147BC6F" } @@ -844,7 +844,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "C96A0353879E003B199369036029639D5BA45AC7B179BD23B43E76C6F84B8196", - "parts": { + "part_set_header": { "total": 1, "hash": "0226BB60E49A65E6825B9D530CA3111A63ED3BB349C5C25AA9E018F90147BC6F" } @@ -864,7 +864,7 @@ "round": 1, "block_id": { "hash": "0BFC479714B95F0B6739E382B0AEE300C07A13678D4D2CE58F66EE6ADEDE42BD", - "parts": { + "part_set_header": { "total": 1, "hash": "F0B4CF7D02401FF443251AB04A99B61C8E4F9AB3FFC0AB5B5815F9A5AEFD85BE" } @@ -1016,7 +1016,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -1036,7 +1036,7 @@ "round": 1, "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -1180,7 +1180,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -1200,7 +1200,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } @@ -1344,7 +1344,7 @@ "time": "2019-11-02T15:04:20Z", "last_block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } @@ -1364,7 +1364,7 @@ "round": 1, "block_id": { "hash": "33B09B99A8361F66901189FD90421193BF042EB0F77611AA6EECF336C4D0023E", - "parts": { + "part_set_header": { "total": 1, "hash": "27942F5568D507D9A24EFE8E69C92549CEF6EDC65A339EA1EC1EFCF567A345E0" } @@ -1508,7 +1508,7 @@ "time": "2019-11-02T15:04:25Z", "last_block_id": { "hash": "33B09B99A8361F66901189FD90421193BF042EB0F77611AA6EECF336C4D0023E", - "parts": { + "part_set_header": { "total": 1, "hash": "27942F5568D507D9A24EFE8E69C92549CEF6EDC65A339EA1EC1EFCF567A345E0" } @@ -1528,7 +1528,7 @@ "round": 1, "block_id": { "hash": "E31F06F3C0FB3D1D9B8D5EC07A4C2A724CA848676F555E11463A3430CDFE7B5D", - "parts": { + "part_set_header": { "total": 1, "hash": "C21ABF38384FA329E41149881BD1D585364E896688798B8B4A0720DCEA1DBE66" } @@ -1672,7 +1672,7 @@ "time": "2019-11-02T15:04:30Z", "last_block_id": { "hash": "E31F06F3C0FB3D1D9B8D5EC07A4C2A724CA848676F555E11463A3430CDFE7B5D", - "parts": { + "part_set_header": { "total": 1, "hash": "C21ABF38384FA329E41149881BD1D585364E896688798B8B4A0720DCEA1DBE66" } @@ -1692,7 +1692,7 @@ "round": 1, "block_id": { "hash": "C96A0353879E003B199369036029639D5BA45AC7B179BD23B43E76C6F84B8196", - "parts": { + "part_set_header": { "total": 1, "hash": "0226BB60E49A65E6825B9D530CA3111A63ED3BB349C5C25AA9E018F90147BC6F" } @@ -1836,7 +1836,7 @@ "time": "2019-11-02T15:04:35Z", "last_block_id": { "hash": "C96A0353879E003B199369036029639D5BA45AC7B179BD23B43E76C6F84B8196", - "parts": { + "part_set_header": { "total": 1, "hash": "0226BB60E49A65E6825B9D530CA3111A63ED3BB349C5C25AA9E018F90147BC6F" } @@ -1856,7 +1856,7 @@ "round": 1, "block_id": { "hash": "0BFC479714B95F0B6739E382B0AEE300C07A13678D4D2CE58F66EE6ADEDE42BD", - "parts": { + "part_set_header": { "total": 1, "hash": "F0B4CF7D02401FF443251AB04A99B61C8E4F9AB3FFC0AB5B5815F9A5AEFD85BE" } diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.json index 87345a67b..ae5d96e31 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.json @@ -1,10 +1,10 @@ { - "description": "auto-generated from Apalache counterexample", + "description": "MC4_4_faulty_Test2NotEnoughTrustFailure.json", "initial": { "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "037EDD75748E835B951090EA56AFBA5E537D6BCBFD8833450FFED37BCB947352", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "42C62AB26BDCD052FD7D87449C1CA700A79780D55E2FC8129614D4D2DC24CB08", + "part_set_header": { + "total": 1, + "hash": "42C62AB26BDCD052FD7D87449C1CA700A79780D55E2FC8129614D4D2DC24CB08" } }, "signatures": [ @@ -36,31 +36,49 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "dyC/98kdQ9pBcjRMngvmxm4OJ5f1Ddzw/l8mT7V+G/uKuH3Il618O7YN40/ATTHtu517DFm+tsfHcDLY8KvgCg==" + "signature": "mzNheVmshOSGCNfL/NfBBpJcofUx6cqclvEMOc9rZJ6A2pOrxO8ZymXej0FvksZ5mmhfLvZ0aW+as59WMldWBw==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "w/035jufehur92XKIpEV/ddEaGd8zNK1IBxyOeK6c4zSKDN65KTk83IoRUZorPxm5WdG3qpouGAjYZKXNGh1Ag==" + "signature": "KisuL/gVSTDQP1Q51uBKd8xDZM4mX+rRKIpMlkfUYF+qW4K51sPvqL/pgKSiUwBPAoGRBzwLoavPg9oiyRwPBA==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "CZGS/p05b+r0Y3py9tb2N6yQF1rxPhzdQwnm7XAldTqDBbVH9/6qSm+2N4pPrytM4RmooSX2WlDM+lKjyw7cBg==" + "signature": "fgq+19zjPxTp8HILDBaW8VJg+wzyVkthtmf0HJxdoaXd+uZRQ7LDS2Tn7LXMKAQ9Q0sjtZ4BA3H3sfv9wA56BA==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "idu2/K9v9auv81wUKZJHNUP1ke5AEFjVYwBYpdsglHJTI2WDd2O8u6c2Pg0O2ZDliiv7/ChM+snLAFKrrMs8Ag==" + "signature": "Zy0rovAtLk58hTcprpXU7ikCdbky5rrQ8Y3o+/Xyo7VTt3zYiCdVsYj26agu8SR3cFkV96P2ryHF6NHWGwIJDw==" } ] } }, "next_validator_set": { "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { @@ -70,19 +88,10 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "trusting_period": "1400000000000", - "now": "2020-10-07T14:19:52.1602080392Z" + "now": "2020-10-21T12:40:04.160328400Z" }, "input": [ { @@ -90,17 +99,17 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "4", - "time": "1970-01-01T00:00:05Z", + "time": "1970-01-01T00:00:04Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "next_validators_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, @@ -111,18 +120,18 @@ "height": "4", "round": 1, "block_id": { - "hash": "0EB5049300A3BF6A48AA100639D81AC2EB79BD78FA228C0C1C11676B21E4AC35", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "D0E7B0C678E290DA835BB26EE826472D66B6A306801E5FE0803C5320C554610A", + "part_set_header": { + "total": 1, + "hash": "D0E7B0C678E290DA835BB26EE826472D66B6A306801E5FE0803C5320C554610A" } }, "signatures": [ { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:05Z", - "signature": "7YoqoViVeQmKz2btjoVI5euI7WETWM6eKX3xOFWpj04CYHvnwamVrMG8AdGKi5OFQ1iM+E33hJqn3ZTYX7H5Bw==" + "timestamp": "1970-01-01T00:00:04Z", + "signature": "lTGBsjVI6YwIRcxQ6Lct4Q+xrtJc9h3648c42uWe4MpSgy4rUI5g71AEpG90Tbn0PRizjKgCPhokPpQoQLiqAg==" } ] } @@ -138,50 +147,24 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:06Z", + "now": "1970-01-01T00:00:05Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -189,17 +172,17 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "3", - "time": "1970-01-01T00:00:02Z", + "time": "1970-01-01T00:00:03Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, @@ -210,18 +193,18 @@ "height": "3", "round": 1, "block_id": { - "hash": "020BE769E526D232E320357C2302C76DE359FEEA14DA211C1647CCAD0A0AC67E", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "AAB1B09D5FADAAE7CDF3451961A63F810DB73BF3214A7B74DBA36C52EDF1A793", + "part_set_header": { + "total": 1, + "hash": "AAB1B09D5FADAAE7CDF3451961A63F810DB73BF3214A7B74DBA36C52EDF1A793" } }, "signatures": [ { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "4iLlRp0sbGAhPzkCow6RRZlEEeZGq/nrtirAXDd4Utq0EOa69P1DlRk3aQpqwCjGRiauL6JT+KV6Gylb8fYHDQ==" + "timestamp": "1970-01-01T00:00:03Z", + "signature": "xn0eSsHYIsqUbmfAiJq1R0hqZbfuIjs5Na1c88EC1iPTuQAesKg9I7nXG4pk8d6U5fU4GysNLk5I4f7aoefOBA==" } ] } @@ -237,16 +220,7 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ @@ -258,47 +232,12 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:06Z", + "now": "1970-01-01T00:23:20Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -306,7 +245,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -316,7 +255,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "next_validators_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", "app_hash": "", "last_results_hash": null, @@ -327,24 +266,18 @@ "height": "2", "round": 1, "block_id": { - "hash": "80834C414998C26789D81B49C1F5911E0A68ECD4AB781ABBF7BD01D487F45FC3", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "872C1AB1DE37464802C172ECAB6D9956CA0F64E3B8655CCC1560CD1BB5F8C163", + "part_set_header": { + "total": 1, + "hash": "872C1AB1DE37464802C172ECAB6D9956CA0F64E3B8655CCC1560CD1BB5F8C163" } }, "signatures": [ { - "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "Qoczjg85vNtL8LfkctxRSTPZC104JRgAxS5jbXcLvRgyQwj2WqSi9HfKbD8Ixt+0pS5Xma68zqPhziUU4R5oAA==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "v38vgTmFRbspOjeESjVhLRKZ6U4pjwgnDV336JJ3JiLN9XVpLGkg76uCkiZZrVfTXjipix7hnYf8aLqVvT9LAA==" + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null } ] } @@ -360,16 +293,7 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ @@ -381,29 +305,12 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:06Z", + "now": "1970-01-01T00:23:22Z", "verdict": "INVALID" } ] diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.tla index f08f18e7e..233a837f6 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {"n1"} +/\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> { "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n3"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n2", "n4" }, + lastCommit |-> {"n1"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n3"}, + lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,44 +52,44 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 6, + now |-> 5, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 6 +/\ now = 5 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 6 +/\ prevNow = 5 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,41 +99,41 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {"n1"} +/\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> { "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n3"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n2", "n4" }, + lastCommit |-> {"n1"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n3"}, + lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -141,26 +141,26 @@ State3 == @@ 4 :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n3"}, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]] + lastCommit |-> {"n1"}, + time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 6, + now |-> 5, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -169,44 +169,44 @@ State3 == :> [current |-> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n3"}, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]], - now |-> 6, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 6 +/\ now = 1400 /\ nprobes = 1 /\ prevCurrent = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n3"}, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]] -/\ prevNow = 6 + lastCommit |-> {"n1"}, + time |-> 4]] +/\ prevNow = 5 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -216,41 +216,41 @@ State3 == (* Transition 1 to State4 *) State4 == -/\ Faulty = {"n1"} +/\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> { "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n3"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n2", "n4" }, + lastCommit |-> {"n1"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n3"}, + lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -258,34 +258,34 @@ State4 == @@ 3 :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> {"n1"}, height |-> 3, - lastCommit |-> {}, - time |-> 2]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] @@ 4 :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n3"}, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]] + lastCommit |-> {"n1"}, + time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 6, + now |-> 5, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -294,17 +294,17 @@ State4 == :> [current |-> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n3"}, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]], - now |-> 6, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -313,44 +313,44 @@ State4 == :> [current |-> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> {"n1"}, height |-> 3, - lastCommit |-> {}, - time |-> 2]], - now |-> 6, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], + now |-> 1400, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 6 +/\ now = 1402 /\ nprobes = 2 /\ prevCurrent = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> {"n1"}, height |-> 3, - lastCommit |-> {}, - time |-> 2]] -/\ prevNow = 6 + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] +/\ prevNow = 1400 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -360,84 +360,84 @@ State4 == (* Transition 5 to State5 *) State5 == -/\ Faulty = {"n1"} +/\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> { "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n3"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n2", "n4" }, + lastCommit |-> {"n1"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n3"}, + lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n3", "n4" }, + :> [Commits |-> {}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2]] @@ 3 :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> {"n1"}, height |-> 3, - lastCommit |-> {}, - time |-> 2]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] @@ 4 :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n3"}, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]] + lastCommit |-> {"n1"}, + time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 6, + now |-> 5, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -446,17 +446,17 @@ State5 == :> [current |-> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n3"}, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]], - now |-> 6, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -465,43 +465,43 @@ State5 == :> [current |-> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> {"n1"}, height |-> 3, - lastCommit |-> {}, - time |-> 2]], - now |-> 6, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], + now |-> 1400, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2]], - now |-> 6, + now |-> 1402, verdict |-> "INVALID", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -511,20 +511,20 @@ State5 == @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 6 +/\ now = 1402 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> { "n3", "n4" }, +/\ prevCurrent = [Commits |-> {}, header |-> - [NextVS |-> { "n2", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2]] -/\ prevNow = 6 +/\ prevNow = 1402 /\ prevVerdict = "INVALID" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -542,5 +542,5 @@ InvariantViolation == /\ history[s2$2]["verdict"] = "NOT_ENOUGH_TRUST")))) ================================================================================ -\* Created by Apalache on Wed Oct 07 14:19:52 UTC 2020 +\* Created by Apalache on Wed Oct 21 12:40:04 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.json index ad5938f62..8cad731fb 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.json @@ -1,10 +1,10 @@ { - "description": "auto-generated from Apalache counterexample", + "description": "MC4_4_faulty_Test2NotEnoughTrustSuccess.json", "initial": { "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "67A2F8253E1545321561A82A23D87B984E11621D2B877EB236FE649A20442932", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "EAA36857D0DB20A7B1E315A74E9871F509D7FD52CD3172CFD7A0A9E360CD6759", + "part_set_header": { + "total": 1, + "hash": "EAA36857D0DB20A7B1E315A74E9871F509D7FD52CD3172CFD7A0A9E360CD6759" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "yJFAxO4S7lWyeJYsQ+ZXD8qqOEJMea6qJI4emHXiz1G8toYIN31z7gcsXj3P0DUbdzIVUvCgPvvgVwoiLCKTDQ==" + "signature": "qnqWPNmmyQfNJkhPH2YBpWRlGjoLOoTzGLAKYuBuDzuLpDhvh+F4AOwsalo+qR70Lpx/yKU/+BTLPGxIIP47DA==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "hrdfvpMuSAwpAdG/apS8astAtVzL1GE1pV+b2LoSZwxx7XG78LbjvVzy9noKSY4XT6UlNaScd24ds0Dg1KnwBQ==" + "signature": "n0hMeOMwr+ZtcObdo2T99UzOfulXuCS7nbNCVbo7IrgqLHfo6xlxEddlOdYQp+3quMGI79osrl4EYvTB5wU4Cw==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "RM39gQxzEDoC6uc0x+KW2ULfNiFXhetirKHn9J/suisjslOcWaanyhB9YFeJC2XQ42amV3b6lveGE3pauA1cBg==" + "signature": "v52uJnW0wNu4YPG7K46I+sGGJxj+0wx09KQZZsbmspL02nH3LhZahLFb3KBhswHevKKlo52X4VKszwRnlw+yDA==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "SB2j93BXgPL20kTmEhBFlHKmw6LtACQYCILz67xRhsUmXRAsIXQt5AQXW4bU5BHOYpHog8lz/5ZmSQ7If1rFAw==" + "signature": "HuW1zhtKSgz1Z5JXr2Gyvw3q/bh2Wxf34cmkn8j/d5v3EZtDzfl+T4Y42Pgb9cnBLpKF2YmUkKcv2pyoctf5AA==" } ] } @@ -88,19 +88,10 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "trusting_period": "1400000000000", - "now": "2020-10-07T14:19:40.1602080380Z" + "now": "2020-10-21T12:39:48.160328398Z" }, "input": [ { @@ -108,7 +99,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -117,30 +108,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", - "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "D67533E0DAFB3715FEB042160B5B92D83FFF66612396F4C21BA0E44F5E9B32B3", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "019BDE90D53278193892E7526F8EDFB330CF828FA40DE442B756E5FA008AA75A", + "part_set_header": { + "total": 1, + "hash": "019BDE90D53278193892E7526F8EDFB330CF828FA40DE442B756E5FA008AA75A" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:05Z", - "signature": "U7LI1fPPCnzo2A+lbedXTQRFWx3NassTtt84R5xIPDtk4wF9HBou9fN3bXYI4YsLITK6PZ4YozR82Sn/Sg/nCA==" + "signature": "OhqYhk9MREkNYUm7+2wj6VyzM9mVrhuwgcGlUa9bC/XkgJ3w4WOkNz2KVxIMHOS+3z25LxmEKP54pi430CpeAA==" } ] } @@ -148,27 +139,36 @@ "validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -187,19 +187,11 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:18Z", + "now": "1970-01-01T00:23:17Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -207,18 +199,18 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "3", - "time": "1970-01-01T00:00:04Z", + "time": "1970-01-01T00:00:05Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", "app_hash": "", "last_results_hash": null, "evidence_hash": null, @@ -228,24 +220,18 @@ "height": "3", "round": 1, "block_id": { - "hash": "1E8C50E56D867507E195C5BAEC661D6A2BB13A0DE7D0938AD92F00C4F95F2DE5", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "B01A38225FB89F2211513DD148FEA72EF29900BEC909994A45546AC1D9B3F4D8", + "part_set_header": { + "total": 1, + "hash": "B01A38225FB89F2211513DD148FEA72EF29900BEC909994A45546AC1D9B3F4D8" } }, "signatures": [ { "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "VEo+CNnfMpbACDALmTmdgVljvugBj3TiH4kC1p2dT2tLS94luAOmB9psKeMVdcq3rbn2xwAUAH9x3Sn/6JDTBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "07NvNRtxhpFiZwpcKv0WSl/P/+fDSnTwsBQINAvzGRsWsF2kAQKhG1wEXjP+FXaFSSg6hjQWSF5GqgsD4w94Bw==" + "timestamp": "1970-01-01T00:00:05Z", + "signature": "oKV4etlDTo1H8hzjKYAWaAEQ3c0nYNNtbCk2Ps/I6xelmcpbI7T9xlJyqlq1k7+PFBRr4VQfVqYReYXdg46GBw==" } ] } @@ -253,58 +239,50 @@ "validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null - } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, - "voting_power": "50", - "proposer_priority": null - } - }, - "next_validator_set": { - "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:20Z", + "now": "1970-01-01T00:23:18Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -312,17 +290,17 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "2", - "time": "1970-01-01T00:00:03Z", + "time": "1970-01-01T00:00:02Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, "validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", - "next_validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "next_validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", "consensus_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", "app_hash": "", "last_results_hash": null, @@ -333,30 +311,30 @@ "height": "2", "round": 1, "block_id": { - "hash": "D639D3CDB4C5919F4368A9F035ECB5211F1E5E7BC759D9CAEA86499842D2ECC4", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "1675C8651E685C51D71557230044687433354724042B96E448D7CB5DD63D782E", + "part_set_header": { + "total": 1, + "hash": "1675C8651E685C51D71557230044687433354724042B96E448D7CB5DD63D782E" } }, "signatures": [ { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "21j4qzGjM4/rUVRee9mmb7iBLZJce7ga5GoyUQ8oM7ZQ5Mh/wikKHuW+QNkpUy1eiCexadbklzNtZWzzUW+XBg==" + "timestamp": "1970-01-01T00:00:02Z", + "signature": "XaLEDRyORZoi6iQKC0PT8kUcoBM7dkvDQ6rIHPyDzzh5jCopJO1QaP4szmAbDdrSV0+FiIdUR58pqFNCNEixCw==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "KmKhoCUZ9OuWjuNQVQZvua3dEANFO8mA96hlmXZjUmc0jx4zi6Z12yGqVUHv+i6qG6tmgC/mCg+SGEslN8YMBA==" + "timestamp": "1970-01-01T00:00:02Z", + "signature": "a8D11jt2L1iqVcCmijEG33x1ZpDPwyDJkQfl+Z9ZZBy/dRWrHPq9+AFjvWdPhWPhFdKAf7hgkE+UFUeUHSyuCQ==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "zUBHDUWaXD4jjNY8rUiSz31hRnMmUrzvkj18wrws5NKpHUvYzcdyupwUyllI6T6mLy25gGXyU/mBJgjWBLxSDw==" + "timestamp": "1970-01-01T00:00:02Z", + "signature": "ia6sqXFuJ4w8+BQyvKWJFrgg3GJCogW1rCyN/b6XPKEcVOORpFXOT79nVkGFjydUjKiWuANBl2Lf0zstoi6lCg==" } ] } @@ -390,50 +368,33 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:20Z", + "now": "1970-01-01T00:23:18Z", "verdict": "SUCCESS" }, { @@ -441,7 +402,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -450,30 +411,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", - "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "D67533E0DAFB3715FEB042160B5B92D83FFF66612396F4C21BA0E44F5E9B32B3", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "019BDE90D53278193892E7526F8EDFB330CF828FA40DE442B756E5FA008AA75A", + "part_set_header": { + "total": 1, + "hash": "019BDE90D53278193892E7526F8EDFB330CF828FA40DE442B756E5FA008AA75A" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:05Z", - "signature": "U7LI1fPPCnzo2A+lbedXTQRFWx3NassTtt84R5xIPDtk4wF9HBou9fN3bXYI4YsLITK6PZ4YozR82Sn/Sg/nCA==" + "signature": "OhqYhk9MREkNYUm7+2wj6VyzM9mVrhuwgcGlUa9bC/XkgJ3w4WOkNz2KVxIMHOS+3z25LxmEKP54pi430CpeAA==" } ] } @@ -481,27 +442,36 @@ "validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -520,19 +490,11 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:22Z", + "now": "1970-01-01T00:23:21Z", "verdict": "SUCCESS" } ] diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.tla index f3ddde223..5f4424bc9 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.tla @@ -9,7 +9,7 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 :> [NextVS |-> { "n1", "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, @@ -17,28 +17,28 @@ State2 == lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, time |-> 4] @@ 4 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n1"}, time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -57,7 +57,7 @@ State2 == height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 1397, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -76,7 +76,7 @@ State2 == time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 1398 +/\ now = 1397 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> @@ -85,7 +85,7 @@ State2 == height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 1398 +/\ prevNow = 1397 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> @@ -99,7 +99,7 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 :> [NextVS |-> { "n1", "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, @@ -107,28 +107,28 @@ State3 == lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, time |-> 4] @@ 4 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n1"}, time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -139,12 +139,12 @@ State3 == lastCommit |-> {}, time |-> 1]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]] /\ history = 0 :> [current |-> @@ -155,7 +155,7 @@ State3 == height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 1397, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -167,14 +167,14 @@ State3 == time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]], - now |-> 1398, + now |-> 1397, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -193,16 +193,16 @@ State3 == time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 1400 +/\ now = 1398 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> {"n4"}, +/\ prevCurrent = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]] -/\ prevNow = 1398 +/\ prevNow = 1397 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> @@ -216,7 +216,7 @@ State3 == (* Transition 1 to State4 *) State4 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 :> [NextVS |-> { "n1", "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, @@ -224,28 +224,28 @@ State4 == lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, time |-> 4] @@ 4 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n1"}, time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -256,20 +256,20 @@ State4 == lastCommit |-> {}, time |-> 1]] @@ 3 - :> [Commits |-> { "n3", "n4" }, + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {"n4"}, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4]] + time |-> 5]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]] /\ history = 0 :> [current |-> @@ -280,7 +280,7 @@ State4 == height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 1397, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -292,14 +292,14 @@ State4 == time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]], - now |-> 1398, + now |-> 1397, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -311,14 +311,14 @@ State4 == time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {"n4"}, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4]], - now |-> 1400, + time |-> 5]], + now |-> 1398, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -337,16 +337,16 @@ State4 == time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 1400 +/\ now = 1398 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> { "n3", "n4" }, +/\ prevCurrent = [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {"n4"}, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4]] -/\ prevNow = 1400 + time |-> 5]] +/\ prevNow = 1398 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> @@ -360,7 +360,7 @@ State4 == (* Transition 3 to State5 *) State5 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 :> [NextVS |-> { "n1", "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, @@ -368,28 +368,28 @@ State5 == lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, time |-> 4] @@ 4 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n1"}, time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -402,26 +402,26 @@ State5 == @@ 2 :> [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] @@ 3 - :> [Commits |-> { "n3", "n4" }, + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {"n4"}, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4]] + time |-> 5]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]] /\ history = 0 :> [current |-> @@ -432,7 +432,7 @@ State5 == height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 1397, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -444,14 +444,14 @@ State5 == time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]], - now |-> 1398, + now |-> 1397, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -463,14 +463,14 @@ State5 == time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {"n4"}, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4]], - now |-> 1400, + time |-> 5]], + now |-> 1398, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -484,12 +484,12 @@ State5 == :> [current |-> [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]], - now |-> 1400, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]], + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -501,26 +501,26 @@ State5 == time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 4 -/\ now = 1402 +/\ now = 1401 /\ nprobes = 3 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] -/\ prevNow = 1400 + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] +/\ prevNow = 1398 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> @@ -534,7 +534,7 @@ State5 == (* Transition 0 to State6 *) State6 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 :> [NextVS |-> { "n1", "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, @@ -542,28 +542,28 @@ State6 == lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, time |-> 4] @@ 4 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n1"}, time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -576,26 +576,26 @@ State6 == @@ 2 :> [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] @@ 3 - :> [Commits |-> { "n3", "n4" }, + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {"n4"}, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4]] + time |-> 5]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]] /\ history = 0 :> [current |-> @@ -606,7 +606,7 @@ State6 == height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 1397, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -618,14 +618,14 @@ State6 == time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]], - now |-> 1398, + now |-> 1397, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -637,14 +637,14 @@ State6 == time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {"n4"}, height |-> 3, lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4]], - now |-> 1400, + time |-> 5]], + now |-> 1398, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -658,12 +658,12 @@ State6 == :> [current |-> [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]], - now |-> 1400, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]], + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -675,53 +675,53 @@ State6 == time |-> 1]]] @@ 4 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]], - now |-> 1402, + now |-> 1401, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]]] -/\ latestVerified = [Commits |-> {"n4"}, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]]] +/\ latestVerified = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateVerified" /\ nextHeight = 4 -/\ now = 1402 +/\ now = 1401 /\ nprobes = 4 -/\ prevCurrent = [Commits |-> {"n4"}, +/\ prevCurrent = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5]] -/\ prevNow = 1402 +/\ prevNow = 1401 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> { "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] /\ state = "finishedSuccess" (* The following formula holds true in the last state and violates the invariant *) @@ -735,5 +735,5 @@ InvariantViolation == /\ history[s2$2]["verdict"] = "NOT_ENOUGH_TRUST")))) ================================================================================ -\* Created by Apalache on Wed Oct 07 14:19:39 UTC 2020 +\* Created by Apalache on Wed Oct 21 12:39:48 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.json index ce2b6ebc9..7388856e8 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.json @@ -1,10 +1,10 @@ { - "description": "auto-generated from Apalache counterexample", + "description": "MC4_4_faulty_Test3NotEnoughTrustFailure.json", "initial": { "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "037EDD75748E835B951090EA56AFBA5E537D6BCBFD8833450FFED37BCB947352", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32", + "part_set_header": { + "total": 1, + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "dyC/98kdQ9pBcjRMngvmxm4OJ5f1Ddzw/l8mT7V+G/uKuH3Il618O7YN40/ATTHtu517DFm+tsfHcDLY8KvgCg==" + "signature": "BwKig3Giy91zDlZ5BSa67+E0EV1K4q6At2piQgg1h48odVOAjEiC4Tt772ologMWt0gdjYzeYtYR15OKtza1Ag==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "w/035jufehur92XKIpEV/ddEaGd8zNK1IBxyOeK6c4zSKDN65KTk83IoRUZorPxm5WdG3qpouGAjYZKXNGh1Ag==" + "signature": "EYx9XdH96HYFIJtaddpFF+u/1GBwE1A3/Ds2e5BGHnti62RBwgsdIWe3denuQxgYNPnIymqvrCiBAGEEtYJHBg==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "CZGS/p05b+r0Y3py9tb2N6yQF1rxPhzdQwnm7XAldTqDBbVH9/6qSm+2N4pPrytM4RmooSX2WlDM+lKjyw7cBg==" + "signature": "QctMtMK8Zes6OspVTkVvKtwWix70IAp0okAi4zJjV981FEnOuK2j8Fd0WQNHHDyqFX7uGTVL5L7JqbBfLuvBAA==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "idu2/K9v9auv81wUKZJHNUP1ke5AEFjVYwBYpdsglHJTI2WDd2O8u6c2Pg0O2ZDliiv7/ChM+snLAFKrrMs8Ag==" + "signature": "yWtJtDMH9NOtAeRqomUYDa23BePOZ+y7FNiAxWZ9a8iYUOOxUU3CoCqxfRm6wpJWW2QUwBicQs7ntnU3z7cpBg==" } ] } @@ -62,27 +62,18 @@ "next_validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "trusting_period": "1400000000000", - "now": "2020-10-07T14:20:45.1602080445Z" + "now": "2020-10-21T12:41:10.160328407Z" }, "input": [ { @@ -90,17 +81,17 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "4", - "time": "1970-01-01T00:00:04Z", + "time": "1970-01-01T00:00:06Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", "app_hash": "", "last_results_hash": null, @@ -111,18 +102,18 @@ "height": "4", "round": 1, "block_id": { - "hash": "26EF377F2EFF5DAF0A8A654D23493FFBA28E5500139824A00527B5F2C0FEFCC5", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "5FD797E3E8932D06A1B85117FAAA4EA0A94AE7C08D1F3956DB3DCFB5210CF9E1", + "part_set_header": { + "total": 1, + "hash": "5FD797E3E8932D06A1B85117FAAA4EA0A94AE7C08D1F3956DB3DCFB5210CF9E1" } }, "signatures": [ { "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "a2Y4iKwhKuHCppACKu2F1LZYUKxQJ1NXPlXtk7C41zdyHDuhu5Dk7USIIJmmGLt9+iYg9XbKB//ao2/9ZV83BA==" + "timestamp": "1970-01-01T00:00:06Z", + "signature": "Dctn272+keDEml9Z43fxCMKQbMk8j5O77doKNFbW+UKB998sNVIKdhV3e51ofyNCuH1LU8MwUUL7/65bBbFGDA==" } ] } @@ -138,50 +129,24 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:18Z", + "now": "1970-01-01T00:00:07Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -189,72 +154,51 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "3", - "time": "1970-01-01T00:00:03Z", + "time": "1970-01-01T00:00:04Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "3", "round": 1, "block_id": { - "hash": "D10E34B2FCD44BB14B6805C945903AEFA3C8A3E6895F36A7B013A69F743DC4ED", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "D3D9A1F2E19635D4706ABB6650C136A11689D909E39A75422B281B5069A315FF", + "part_set_header": { + "total": 1, + "hash": "D3D9A1F2E19635D4706ABB6650C136A11689D909E39A75422B281B5069A315FF" } }, "signatures": [ - { - "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "+EdHuBQQ41ClCr4dSSJdYs8l4RafusybwdDRNki9V2U1A2xIxzheyy005Cr1N822C4EH/dQV27O0M/4iXO4xDA==" - }, - { - "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "I1B5vGesLSVnYSMLTIITweGzQiN4bsZ0HxS2KThv7qnLA4j95UTnq3Hc0DygqGiH83K/9zjnrwOngyr7egdLCA==" - }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "ma5W2Jt1OcHLCqDEaIxNqAz8LLtXxo4xaIYFuxh5bcDYldiXdY4upSrO2c+4UaxTG4Yx2LEf3DbBYakCpGGLCw==" + "timestamp": "1970-01-01T00:00:04Z", + "signature": "3qlwh//0DfysS4XasdH6K7n0KlCZz+aPLdd7v46K61ndkp18fxb1ktdRDV+xfcveFA/gS8Bphgs8Z0Me2yMHAQ==" }, { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "EZEuA3PPjFqMsotL3upErFgrXrAA5vl2YJ58sFiO5M87PUJKAZ0mxtc4ekW6aY+fBKlxgq0pyQSvc0WIjk03Aw==" } ] } }, "validator_set": { "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -272,26 +216,8 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ @@ -304,19 +230,11 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:18Z", + "now": "1970-01-01T00:00:07Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -324,39 +242,39 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "2", - "time": "1970-01-01T00:00:02Z", + "time": "1970-01-01T00:00:03Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" }, "commit": { "height": "2", "round": 1, "block_id": { - "hash": "BFE673CD34975C4F9ECDC3111596018D6499A81E3C39EF512C2AB01433B40DD0", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "112F17D3CFDDB085DA65556899952FDF4D7EAC40B58ED296191BE5BD6E8FA985", + "part_set_header": { + "total": 1, + "hash": "112F17D3CFDDB085DA65556899952FDF4D7EAC40B58ED296191BE5BD6E8FA985" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "8Yty3A8DBzcCRBIoH7JthqMBmS17X46pvMsA78DM7K19SpU9o0YyRUR3jspEdtM4EzoEyaoWjWwNnIzI5viCBQ==" + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "0Qk3H5kSYDCuUoVslBzaYh1j4Nb3h1II0a1KpIB1Ijj5NL6BZDovFev2bBTUKS1nkIO6dSIuNBfDTrKDX8o1Ag==" } ] } @@ -364,36 +282,18 @@ "validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -411,29 +311,12 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:18Z", + "now": "1970-01-01T00:00:07Z", "verdict": "SUCCESS" }, { @@ -441,17 +324,17 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "4", - "time": "1970-01-01T00:00:04Z", + "time": "1970-01-01T00:00:06Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", "app_hash": "", "last_results_hash": null, @@ -462,18 +345,18 @@ "height": "4", "round": 1, "block_id": { - "hash": "26EF377F2EFF5DAF0A8A654D23493FFBA28E5500139824A00527B5F2C0FEFCC5", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "5FD797E3E8932D06A1B85117FAAA4EA0A94AE7C08D1F3956DB3DCFB5210CF9E1", + "part_set_header": { + "total": 1, + "hash": "5FD797E3E8932D06A1B85117FAAA4EA0A94AE7C08D1F3956DB3DCFB5210CF9E1" } }, "signatures": [ { "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "a2Y4iKwhKuHCppACKu2F1LZYUKxQJ1NXPlXtk7C41zdyHDuhu5Dk7USIIJmmGLt9+iYg9XbKB//ao2/9ZV83BA==" + "timestamp": "1970-01-01T00:00:06Z", + "signature": "Dctn272+keDEml9Z43fxCMKQbMk8j5O77doKNFbW+UKB998sNVIKdhV3e51ofyNCuH1LU8MwUUL7/65bBbFGDA==" } ] } @@ -489,50 +372,24 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:19Z", + "now": "1970-01-01T00:23:22Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -540,72 +397,51 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "3", - "time": "1970-01-01T00:00:03Z", + "time": "1970-01-01T00:00:04Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "3", "round": 1, "block_id": { - "hash": "D10E34B2FCD44BB14B6805C945903AEFA3C8A3E6895F36A7B013A69F743DC4ED", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "D3D9A1F2E19635D4706ABB6650C136A11689D909E39A75422B281B5069A315FF", + "part_set_header": { + "total": 1, + "hash": "D3D9A1F2E19635D4706ABB6650C136A11689D909E39A75422B281B5069A315FF" } }, "signatures": [ - { - "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "+EdHuBQQ41ClCr4dSSJdYs8l4RafusybwdDRNki9V2U1A2xIxzheyy005Cr1N822C4EH/dQV27O0M/4iXO4xDA==" - }, - { - "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "I1B5vGesLSVnYSMLTIITweGzQiN4bsZ0HxS2KThv7qnLA4j95UTnq3Hc0DygqGiH83K/9zjnrwOngyr7egdLCA==" - }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "ma5W2Jt1OcHLCqDEaIxNqAz8LLtXxo4xaIYFuxh5bcDYldiXdY4upSrO2c+4UaxTG4Yx2LEf3DbBYakCpGGLCw==" + "timestamp": "1970-01-01T00:00:04Z", + "signature": "3qlwh//0DfysS4XasdH6K7n0KlCZz+aPLdd7v46K61ndkp18fxb1ktdRDV+xfcveFA/gS8Bphgs8Z0Me2yMHAQ==" }, { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "EZEuA3PPjFqMsotL3upErFgrXrAA5vl2YJ58sFiO5M87PUJKAZ0mxtc4ekW6aY+fBKlxgq0pyQSvc0WIjk03Aw==" } ] } }, "validator_set": { "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -623,26 +459,8 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ @@ -655,17 +473,9 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:23:23Z", "verdict": "INVALID" diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.tla index 64b02f007..08fb11f5d 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.tla @@ -11,39 +11,39 @@ TRUE State2 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] @@ 3 :> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3] + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> { "n1", "n3" }, + :> [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3" }, + VS |-> {"n4"}, height |-> 5, lastCommit |-> {"n4"}, - time |-> 5] + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,44 +52,44 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 1398 +/\ now = 7 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 1398 +/\ prevNow = 7 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -101,39 +101,39 @@ State2 == State3 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] @@ 3 :> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3] + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> { "n1", "n3" }, + :> [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3" }, + VS |-> {"n4"}, height |-> 5, lastCommit |-> {"n4"}, - time |-> 5] + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -141,26 +141,26 @@ State3 == @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]] + lastCommit |-> { "n2", "n3" }, + time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -169,44 +169,44 @@ State3 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]], - now |-> 1398, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 1398 +/\ now = 7 /\ nprobes = 1 /\ prevCurrent = [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]] -/\ prevNow = 1398 + lastCommit |-> { "n2", "n3" }, + time |-> 6]] +/\ prevNow = 7 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -218,74 +218,74 @@ State3 == State4 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] @@ 3 :> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3] + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> { "n1", "n3" }, + :> [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3" }, + VS |-> {"n4"}, height |-> 5, lastCommit |-> {"n4"}, - time |-> 5] + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 3 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]] + lastCommit |-> {"n1"}, + time |-> 4]] @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]] + lastCommit |-> { "n2", "n3" }, + time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -294,63 +294,63 @@ State4 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]], - now |-> 1398, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]], - now |-> 1398, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 1398 +/\ now = 7 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> { "n1", "n2", "n4" }, +/\ prevCurrent = [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]] -/\ prevNow = 1398 + lastCommit |-> {"n1"}, + time |-> 4]] +/\ prevNow = 7 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -362,82 +362,82 @@ State4 == State5 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] @@ 3 :> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3] + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> { "n1", "n3" }, + :> [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3" }, + VS |-> {"n4"}, height |-> 5, lastCommit |-> {"n4"}, - time |-> 5] + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n3"}, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] @@ 3 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]] + lastCommit |-> {"n1"}, + time |-> 4]] @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]] + lastCommit |-> { "n2", "n3" }, + time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -446,85 +446,85 @@ State5 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]], - now |-> 1398, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]], - now |-> 1398, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]], - now |-> 1398, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]], + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> {"n3"}, +/\ latestVerified = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 4 -/\ now = 1399 +/\ now = 1402 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> {"n3"}, +/\ prevCurrent = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] -/\ prevNow = 1398 + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] +/\ prevNow = 7 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -536,82 +536,82 @@ State5 == State6 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] @@ 3 :> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3] + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> { "n1", "n3" }, + :> [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3" }, + VS |-> {"n4"}, height |-> 5, lastCommit |-> {"n4"}, - time |-> 5] + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n3"}, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] @@ 3 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]] + lastCommit |-> {"n1"}, + time |-> 4]] @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]] + lastCommit |-> { "n2", "n3" }, + time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -620,55 +620,55 @@ State6 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]], - now |-> 1398, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]], - now |-> 1398, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]], - now |-> 1398, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]], + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -677,28 +677,28 @@ State6 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]], - now |-> 1399, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 1402, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> {"n3"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]]] -/\ latestVerified = [Commits |-> {"n3"}, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]]] +/\ latestVerified = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ -708,20 +708,20 @@ State6 == /\ nprobes = 4 /\ prevCurrent = [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]] -/\ prevNow = 1399 + lastCommit |-> { "n2", "n3" }, + time |-> 6]] +/\ prevNow = 1402 /\ prevVerdict = "NOT_ENOUGH_TRUST" -/\ prevVerified = [Commits |-> {"n3"}, +/\ prevVerified = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] /\ state = "working" (* Transition 2 to State7 *) @@ -729,82 +729,82 @@ State6 == State7 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] @@ 3 :> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3] + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> { "n1", "n3" }, + :> [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3" }, + VS |-> {"n4"}, height |-> 5, lastCommit |-> {"n4"}, - time |-> 5] + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n3"}, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] @@ 3 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]] + lastCommit |-> {"n1"}, + time |-> 4]] @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]] + lastCommit |-> { "n2", "n3" }, + time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1398, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -813,55 +813,55 @@ State7 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]], - now |-> 1398, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]], - now |-> 1398, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]], - now |-> 1398, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]], + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -870,47 +870,47 @@ State7 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> { "n1", "n3" }, + [NextVS |-> {"n4"}, VS |-> {"n4"}, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 4]], - now |-> 1399, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 1402, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> {"n3"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]]] @@ 5 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]], + lastCommit |-> {"n1"}, + time |-> 4]], now |-> 1403, verdict |-> "INVALID", verified |-> - [Commits |-> {"n3"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]]] -/\ latestVerified = [Commits |-> {"n3"}, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]]] +/\ latestVerified = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateFailed" @@ -918,22 +918,22 @@ State7 == /\ nextHeight = 3 /\ now = 1403 /\ nprobes = 5 -/\ prevCurrent = [Commits |-> { "n1", "n2", "n4" }, +/\ prevCurrent = [Commits |-> { "n2", "n3" }, header |-> [NextVS |-> {"n4"}, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]] + lastCommit |-> {"n1"}, + time |-> 4]] /\ prevNow = 1403 /\ prevVerdict = "INVALID" -/\ prevVerified = [Commits |-> {"n3"}, +/\ prevVerified = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] /\ state = "finishedFailure" (* The following formula holds true in the last state and violates the invariant *) @@ -949,5 +949,5 @@ InvariantViolation == /\ history[s3$2]["verdict"] = "NOT_ENOUGH_TRUST")))))) ================================================================================ -\* Created by Apalache on Wed Oct 07 14:20:45 UTC 2020 +\* Created by Apalache on Wed Oct 21 12:41:10 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.json index d6fb6c1fd..93aa22566 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.json @@ -1,10 +1,10 @@ { - "description": "auto-generated from Apalache counterexample", + "description": "MC4_4_faulty_Test3NotEnoughTrustSuccess.json", "initial": { "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "next_validators_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "54BD5EF1D284E0C21E1F1B36CC355275D7394B39F8AF10837D680EB32C7D776D", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "F7DC6F348F04E01EC7DEA4348A3BFA2F0D7533900986EA66F6006C70BDD52D2E", + "part_set_header": { + "total": 1, + "hash": "F7DC6F348F04E01EC7DEA4348A3BFA2F0D7533900986EA66F6006C70BDD52D2E" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "GgOVVVxrRwdFob0atNnPys0fJ8l/xcvknvsJxtgeiShup8aIgZJd445J976JtLBbWgoTBhCfY7Hyc9YnScwPCA==" + "signature": "S5wM4flAsMJ7uGSGduppmUqDeFZBUBFKkp+LTy249+AgM3oup9ULs7eUzNiwjhV4gWnPnLJ91m6IZ3s047xzAg==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "u76LJKtjHSF8GPayHDDhGfowGpXLHxMLg4KS0S0QTL2eWxAAH5LgAD1Tz80W8Vr/U458ZLppU9J6QvEB5CIrAg==" + "signature": "ZLOGEO5mgrVoTpFA5DLMLX0ggBWnWLWmMF5tAorZC732T+oR2u2USAvGhkZtpM73WN3NUp04aVHInGMsYtz9Dg==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "ZpOcjQDpiFdI3xYpuIw5kGUzU7kyLLs+jfXDFzgxTGHQbWT/+HmL2chLUM1Fq2p9aNdAhWcFNhnnBh6NH7/nAg==" + "signature": "Lwa9l7+dJci4+mXD9ZsvLnbX0TuzWYIjfj9vU51rAftFRGEig7DHToufWaMfjwGMN53WrG72YfHAXxBigWaBBg==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "cTzFxyrl1j2C7P/y5qN850JFbxZmHCiva6cY9NYQXahZ4cvnQchkQLvoCnE+jMDQKddDMySQLNGoI/AKb/2sCQ==" + "signature": "SSHBm3HdeyC1fgPqjTp647mRGxaCKA/GGraM0UFcuXv3mUjfjowL8CNjthJHgXIQCmYdF0HDwLZb1SCvWFe0Aw==" } ] } @@ -62,45 +62,36 @@ "next_validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "trusting_period": "1400000000000", - "now": "2020-10-07T14:20:21.1602080421Z" + "now": "2020-10-21T12:40:40.160328404Z" }, "input": [ { @@ -108,7 +99,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -117,30 +108,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", - "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "6B7DFF67CD01C0AD7132845B00D3BA18CC909384B80DA6DD5FA6F91B4398C1D0", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8", + "part_set_header": { + "total": 1, + "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:06Z", - "signature": "OokXT2v9ItLVTfVoPuNL5ld3ZQdj4mmrlsHDpmpKnhc/uX+TlGv2QtRCiYxkyFKbbvbBPzX52gfn7+dfRj0LAw==" + "signature": "t9kW3UR6XYVKMvGWcYkrZV6IjaJOp6a2p6g3bDE9v1XsUlDQ6f6QOXeJiDGqFG6E+Y3LX8njY5d17qXsODj0AA==" } ] } @@ -148,56 +139,30 @@ "validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:00:07Z", "verdict": "NOT_ENOUGH_TRUST" @@ -207,7 +172,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -216,30 +181,36 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" }, "commit": { "height": "3", "round": 1, "block_id": { - "hash": "11B82BD3F66BCAB87DAF14E2B56CDEE6E8ED044BA40534BDC97404F997776313", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "7C94A02475603E294985D76A6FB261947037CEDECD49917F8E55C93042A406BB", + "part_set_header": { + "total": 1, + "hash": "7C94A02475603E294985D76A6FB261947037CEDECD49917F8E55C93042A406BB" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "zdrkBFPJwNdo1URmadTfXjXs/FWEz45ZmhLGj9zQ5UiVhZ14trfnOvVzE5YStlRxiYefH1pBghCLS/C3+ALKDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:05Z", - "signature": "v32IyC2igxhJcG+sk8yqw9yMwuz/nxgJG/fbGkTZ1ZOMeYwrtfSRGNsJAqg82YLaAvab6KR3IC6quAd1V2jYDw==" + "signature": "6SesG2Pllmkgo3v0mCWRf5YBDybnREQ+otGImFk7dhlPaAoIPPwhKk6qlLUMaHrEwVBUh36JvdWlFtaF6DlSAQ==" } ] } @@ -247,47 +218,39 @@ "validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null - } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, - "voting_power": "50", - "proposer_priority": null - } + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] }, "next_validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:00:07Z", "verdict": "NOT_ENOUGH_TRUST" @@ -297,7 +260,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -306,9 +269,9 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", - "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "consensus_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "validators_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", + "next_validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "consensus_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", "app_hash": "", "last_results_hash": null, "evidence_hash": null, @@ -318,10 +281,10 @@ "height": "2", "round": 1, "block_id": { - "hash": "1302ECEB6D8AB030E1F9F30EAA22DABE2EB7ADB950ADF61DB79F6A7DB99F3B52", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "66564C37F3938D71A805A1B4F8A4D4695821715FBEDCAE9B4E9B8107546D6B5B", + "part_set_header": { + "total": 1, + "hash": "66564C37F3938D71A805A1B4F8A4D4695821715FBEDCAE9B4E9B8107546D6B5B" } }, "signatures": [ @@ -329,19 +292,19 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:03Z", - "signature": "TpVzPdPEDnY2iRhaWQLnJRWlk4bhD7gW+9j9Kj5u58GokYKYUI1yNb7alcm/Ac5/BqbxTn9Gg1qW5q5EXrxcAQ==" + "signature": "6BxvEzNLrr8OCdNXYf2rWo5U7ZvfOr1269EPWP6gktPoxQF89CqeX6CuDEF+BGvG3mW4aKvlHkmsAEjVtia0CA==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:03Z", - "signature": "cJ79/g3kvbq+3l+904jR8hAFn9pRsJq+i7lqMb2ZfpIRYtZYoWqJdRpvrHWjieWbPw3RWLoczRH+5dE63V1TDg==" + "signature": "TtpOye4tmTBPF1xBMkyX0dD7k17LZYL1g9rEOkFsSY0to4P3FgrVm6TM8vXsFK+7NDsoa/8eBVONuflwcIhKAg==" }, { "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:03Z", - "signature": "B/5ihARgS/g4tvxlMJAlih6tqBav6ID9+JByAkpukKaN3lUSJpS+XM6PySS2oo6MW8gLo4ETW9b/70USX2SDBA==" + "signature": "7G/4zXSW50jo+kN5LSl+TjDD3rH8TDGZ8fdO7CshCp/Eha8UhrE2EQ9aVe/w+5GbXGfqWPDdd3QYp+t6dDdiCg==" } ] } @@ -349,67 +312,59 @@ "validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null - } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, - "voting_power": "50", - "proposer_priority": null - } - } + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:08Z", + "now": "1970-01-01T00:00:09Z", "verdict": "SUCCESS" }, { @@ -417,7 +372,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -426,30 +381,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", - "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "6B7DFF67CD01C0AD7132845B00D3BA18CC909384B80DA6DD5FA6F91B4398C1D0", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8", + "part_set_header": { + "total": 1, + "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:06Z", - "signature": "OokXT2v9ItLVTfVoPuNL5ld3ZQdj4mmrlsHDpmpKnhc/uX+TlGv2QtRCiYxkyFKbbvbBPzX52gfn7+dfRj0LAw==" + "signature": "t9kW3UR6XYVKMvGWcYkrZV6IjaJOp6a2p6g3bDE9v1XsUlDQ6f6QOXeJiDGqFG6E+Y3LX8njY5d17qXsODj0AA==" } ] } @@ -457,58 +412,32 @@ "validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:08Z", + "now": "1970-01-01T00:23:22Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -516,7 +445,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -525,30 +454,36 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" }, "commit": { "height": "3", "round": 1, "block_id": { - "hash": "11B82BD3F66BCAB87DAF14E2B56CDEE6E8ED044BA40534BDC97404F997776313", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "7C94A02475603E294985D76A6FB261947037CEDECD49917F8E55C93042A406BB", + "part_set_header": { + "total": 1, + "hash": "7C94A02475603E294985D76A6FB261947037CEDECD49917F8E55C93042A406BB" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "zdrkBFPJwNdo1URmadTfXjXs/FWEz45ZmhLGj9zQ5UiVhZ14trfnOvVzE5YStlRxiYefH1pBghCLS/C3+ALKDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:05Z", - "signature": "v32IyC2igxhJcG+sk8yqw9yMwuz/nxgJG/fbGkTZ1ZOMeYwrtfSRGNsJAqg82YLaAvab6KR3IC6quAd1V2jYDw==" + "signature": "6SesG2Pllmkgo3v0mCWRf5YBDybnREQ+otGImFk7dhlPaAoIPPwhKk6qlLUMaHrEwVBUh36JvdWlFtaF6DlSAQ==" } ] } @@ -556,47 +491,39 @@ "validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null - } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, - "voting_power": "50", - "proposer_priority": null - } + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] }, "next_validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:23:22Z", "verdict": "SUCCESS" @@ -606,7 +533,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -615,30 +542,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", - "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "6B7DFF67CD01C0AD7132845B00D3BA18CC909384B80DA6DD5FA6F91B4398C1D0", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8", + "part_set_header": { + "total": 1, + "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:06Z", - "signature": "OokXT2v9ItLVTfVoPuNL5ld3ZQdj4mmrlsHDpmpKnhc/uX+TlGv2QtRCiYxkyFKbbvbBPzX52gfn7+dfRj0LAw==" + "signature": "t9kW3UR6XYVKMvGWcYkrZV6IjaJOp6a2p6g3bDE9v1XsUlDQ6f6QOXeJiDGqFG6E+Y3LX8njY5d17qXsODj0AA==" } ] } @@ -646,56 +573,30 @@ "validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:23:24Z", "verdict": "SUCCESS" diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.tla index 6e68a8e2c..f20cfdc41 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.tla @@ -11,39 +11,39 @@ TRUE State2 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5] @@ 4 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n4" }, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n2"}, time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,7 +52,7 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -62,14 +62,14 @@ State2 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -80,7 +80,7 @@ State2 == /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -89,7 +89,7 @@ State2 == /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -101,56 +101,56 @@ State2 == State3 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5] @@ 4 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n4" }, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n2"}, time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -160,33 +160,33 @@ State3 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -195,18 +195,18 @@ State3 == /\ nextHeight = 3 /\ now = 7 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> {"n4"}, +/\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] /\ prevNow = 7 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -218,64 +218,64 @@ State3 == State4 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5] @@ 4 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n4" }, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n2"}, time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 3 - :> [Commits |-> {"n2"}, + :> [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -285,72 +285,72 @@ State4 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 8 +/\ now = 9 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> {"n2"}, +/\ prevCurrent = [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]] /\ prevNow = 7 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -362,72 +362,72 @@ State4 == State5 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5] @@ 4 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n4" }, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n2"}, time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n3", "n4" }, + :> [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] @@ 3 - :> [Commits |-> {"n2"}, + :> [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -437,94 +437,94 @@ State5 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]], - now |-> 8, + now |-> 9, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> { "n1", "n3", "n4" }, +/\ latestVerified = [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 4 -/\ now = 8 +/\ now = 1402 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> { "n1", "n3", "n4" }, +/\ prevCurrent = [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] -/\ prevNow = 8 +/\ prevNow = 9 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -536,72 +536,72 @@ State5 == State6 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5] @@ 4 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n4" }, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n2"}, time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n3", "n4" }, + :> [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] @@ 3 - :> [Commits |-> {"n2"}, + :> [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -611,93 +611,93 @@ State6 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]], - now |-> 8, + now |-> 9, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 4 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], - now |-> 8, + now |-> 1402, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]]] -/\ latestVerified = [Commits |-> { "n1", "n3", "n4" }, +/\ latestVerified = [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ -706,21 +706,21 @@ State6 == /\ nextHeight = 3 /\ now = 1402 /\ nprobes = 4 -/\ prevCurrent = [Commits |-> {"n4"}, +/\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] -/\ prevNow = 8 +/\ prevNow = 1402 /\ prevVerdict = "NOT_ENOUGH_TRUST" -/\ prevVerified = [Commits |-> { "n1", "n3", "n4" }, +/\ prevVerified = [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] /\ state = "working" @@ -729,72 +729,72 @@ State6 == State7 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5] @@ 4 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n4" }, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n2"}, time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n3", "n4" }, + :> [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] @@ 3 - :> [Commits |-> {"n2"}, + :> [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -804,112 +804,112 @@ State7 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]], - now |-> 8, + now |-> 9, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 4 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], - now |-> 8, + now |-> 1402, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]]] @@ 5 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]], now |-> 1402, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]]] -/\ latestVerified = [Commits |-> {"n2"}, +/\ latestVerified = [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ -918,21 +918,21 @@ State7 == /\ nextHeight = 4 /\ now = 1404 /\ nprobes = 5 -/\ prevCurrent = [Commits |-> {"n2"}, +/\ prevCurrent = [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]] /\ prevNow = 1402 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> { "n1", "n3", "n4" }, +/\ prevVerified = [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] /\ state = "working" @@ -941,72 +941,72 @@ State7 == State8 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5] @@ 4 - :> [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n4" }, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n4"}, + lastCommit |-> {"n2"}, time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n3", "n4" }, + :> [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] @@ 3 - :> [Commits |-> {"n2"}, + :> [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]] @@ 4 - :> [Commits |-> {"n4"}, + :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -1016,131 +1016,131 @@ State8 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]], - now |-> 8, + now |-> 9, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 4 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], - now |-> 8, + now |-> 1402, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]]] @@ 5 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]], now |-> 1402, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n2", "n4" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]]] @@ 6 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]], now |-> 1404, verdict |-> "SUCCESS", verified |-> - [Commits |-> {"n2"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]]] -/\ latestVerified = [Commits |-> {"n4"}, +/\ latestVerified = [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ -1149,21 +1149,21 @@ State8 == /\ nextHeight = 4 /\ now = 1404 /\ nprobes = 6 -/\ prevCurrent = [Commits |-> {"n4"}, +/\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n2", "n4" }, - VS |-> {"n4"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n3", "n4" }, time |-> 6]] /\ prevNow = 1404 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> {"n2"}, +/\ prevVerified = [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n2"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 5]] /\ state = "finishedSuccess" @@ -1180,5 +1180,5 @@ InvariantViolation == /\ history[s3$2]["verdict"] = "NOT_ENOUGH_TRUST")))))) ================================================================================ -\* Created by Apalache on Wed Oct 07 14:20:21 UTC 2020 +\* Created by Apalache on Wed Oct 21 12:40:39 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.json index 2dfc5ece4..a5be755e1 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.json @@ -1,10 +1,10 @@ { - "description": "auto-generated from Apalache counterexample", + "description": "MC4_4_faulty_TestFailure.json", "initial": { "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "037EDD75748E835B951090EA56AFBA5E537D6BCBFD8833450FFED37BCB947352", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57", + "part_set_header": { + "total": 1, + "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "dyC/98kdQ9pBcjRMngvmxm4OJ5f1Ddzw/l8mT7V+G/uKuH3Il618O7YN40/ATTHtu517DFm+tsfHcDLY8KvgCg==" + "signature": "FKIpE4jILZ3tmeBUFmaT48nAxIBsAIRcnQ6dBdqHV6Xjhd2Bex94Yaqgg7Lv5NL1HACt5qH60qVRiEsv5oJwAA==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "w/035jufehur92XKIpEV/ddEaGd8zNK1IBxyOeK6c4zSKDN65KTk83IoRUZorPxm5WdG3qpouGAjYZKXNGh1Ag==" + "signature": "uuvlEKa9M4a+VtHoE2Racjm2Tzb41Hf/TH35lP158juWjHEgg2k1MnthMhcFaBxdeCucQulrAwUGd99/L4+uCg==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "CZGS/p05b+r0Y3py9tb2N6yQF1rxPhzdQwnm7XAldTqDBbVH9/6qSm+2N4pPrytM4RmooSX2WlDM+lKjyw7cBg==" + "signature": "Lolcqh4BLNDC4KTdmaB1bCXA0KjCKB8Rk73qvfL1oojxIIuA1l6WBES9iDPdoEe2QwPwOMtwbGj/A1NwJnvgAw==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "idu2/K9v9auv81wUKZJHNUP1ke5AEFjVYwBYpdsglHJTI2WDd2O8u6c2Pg0O2ZDliiv7/ChM+snLAFKrrMs8Ag==" + "signature": "NYxAvpFkpNWI9VLFcqdJyOT1KMMD2ZYCKLV4h0yuU+DkoyYmJnJv0dPtUXwalVHw0LT9K1Ad6f7rI3AfLTEuAw==" } ] } @@ -62,27 +62,27 @@ "next_validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null - } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, - "voting_power": "50", - "proposer_priority": null - } + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] }, "trusting_period": "1400000000000", - "now": "2020-10-07T14:19:26.1602080366Z" + "now": "2020-10-21T12:39:30.160328397Z" }, "input": [ { @@ -90,7 +90,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -99,36 +99,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", - "next_validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", - "consensus_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "0A187BC8F4371F2A905EB9206BC5A9619D8EA8FA9E410AD4E127330C9D1CDEEB", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "08CF8679B65FAC86B55F59D82020B505AF30926AAFED64DA06846277867A84E5", + "part_set_header": { + "total": 1, + "hash": "08CF8679B65FAC86B55F59D82020B505AF30926AAFED64DA06846277867A84E5" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "iO7Exvq3qiBaHMkUAA6NzB1ksQRvBnyx7NM4dqxjnyrmR7mwFPlYeFs4qGquqpXeidw/Oc27h9EjRyhuT8VtCw==" - }, - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:04Z", - "signature": "2JZ20Ks2rzOkrSS10wELlJqhG+Gq5pKBeJhuYO73VxND10BYd/bmnEYMpw9ZNosO/HJNPlzZrLRoMTjLPnS4AQ==" + "signature": "BT4H3HK9r85P40ZUFUnAjm5kNi6aB3vekISMJbuekdBeNEHbb77vwWfHmQ9DRzduQ8tkkKES+ArfYVYpVyu1AQ==" } ] } @@ -136,36 +130,27 @@ "validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null - }, + } + ] + }, + "next_validator_set": { + "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null - } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, - "voting_power": "50", - "proposer_priority": null - } - }, - "next_validator_set": { - "validators": [ { "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { @@ -176,25 +161,17 @@ "proposer_priority": null }, { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:00:05Z", "verdict": "NOT_ENOUGH_TRUST" @@ -204,7 +181,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -214,7 +191,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "next_validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "next_validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "app_hash": "", "last_results_hash": null, @@ -225,10 +202,10 @@ "height": "3", "round": 1, "block_id": { - "hash": "C269BB8E62E3D3C39E9F3AC031594CEFF7DA0CCADE118760D41DBCC648FC6FB8", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "FE6B075A3E5DE31475E3B4B42F2734E65F612B05846FE4C3309BA7BFFB736FE5", + "part_set_header": { + "total": 1, + "hash": "FE6B075A3E5DE31475E3B4B42F2734E65F612B05846FE4C3309BA7BFFB736FE5" } }, "signatures": [ @@ -236,7 +213,7 @@ "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:03Z", - "signature": "ZKwiRr7lpXPtiC8ckbsEu/Aqw3UGDXOim0AxaEK+Npe/j6T19QsPSm0Hi8+cdU8q/xL1I3/SGD1HzR4QSiGVDw==" + "signature": "Fg9f8bx660if/hhzf8LONx+W9nnYyMDkCb6DSG4V86XayN/SL6lwH2pLmMy5+t2LGoPR3ojm5Ht449rQKXByDA==" } ] } @@ -252,48 +229,12 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { - "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + "validators": [] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:00:05Z", "verdict": "NOT_ENOUGH_TRUST" @@ -303,7 +244,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -312,36 +253,57 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" }, "commit": { "height": "2", "round": 1, "block_id": { - "hash": "BA8BCA0EEEA2CF3D47560EE4DB39D3329EB16F156C5F25C0248B3F5B40E693E6", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "569551C9F317FF7CC95F7F79A7A16F7ABE3666C1546556D5D012F50F791727E6", + "part_set_header": { + "total": 1, + "hash": "569551C9F317FF7CC95F7F79A7A16F7ABE3666C1546556D5D012F50F791727E6" } }, "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, { "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:02Z", - "signature": "HoGiINR7+OMhkn9tacVFncJ2pVjGIatSkPA0NoCrxk90BBwo2ZW4dZ5achMQ5W6KmpNQtaCfby/bpWm3KBFgBQ==" + "signature": "sp8jP6xc3rg6J+OylAN8hlsisfw0cjWsVEsPNWog9LaxJq2M0cWzJKN7cAVbL+ZKU/myLo0iu7DTgnyeZYVyDA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null } ] } }, "validator_set": { "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { @@ -351,19 +313,28 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -372,18 +343,19 @@ }, "voting_power": "50", "proposer_priority": null - } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, - "voting_power": "50", - "proposer_priority": null - } - } + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:23:22Z", "verdict": "INVALID" diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.tla index 894a6068e..5f196a0af 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> { "n1", "n2" }, - VS |-> {"n2"}, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> { "n1", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + :> [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2" }, + VS |-> { "n1", "n3", "n4" }, height |-> 5, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,7 +52,7 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -62,14 +62,14 @@ State2 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -80,7 +80,7 @@ State2 == /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -89,7 +89,7 @@ State2 == /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,58 +99,58 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> { "n1", "n2" }, - VS |-> {"n2"}, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> { "n1", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + :> [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2" }, + VS |-> { "n1", "n3", "n4" }, height |-> 5, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 4 - :> [Commits |-> { "n1", "n2" }, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -160,33 +160,33 @@ State3 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> { "n1", "n2" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -195,18 +195,18 @@ State3 == /\ nextHeight = 3 /\ now = 5 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> { "n1", "n2" }, +/\ prevCurrent = [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4]] /\ prevNow = 5 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -216,41 +216,41 @@ State3 == (* Transition 1 to State4 *) State4 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> { "n1", "n2" }, - VS |-> {"n2"}, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> { "n1", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + :> [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2" }, + VS |-> { "n1", "n3", "n4" }, height |-> 5, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -258,24 +258,24 @@ State4 == @@ 3 :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> {}, VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> {}, time |-> 3]] @@ 4 - :> [Commits |-> { "n1", "n2" }, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -285,26 +285,26 @@ State4 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> { "n1", "n2" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -313,24 +313,24 @@ State4 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> {}, VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> {}, time |-> 3]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -341,16 +341,12 @@ State4 == /\ nprobes = 2 /\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n2" }, - VS |-> {"n2"}, - height |-> 3, - lastCommit |-> {"n3"}, - time |-> 3]] + [NextVS |-> {}, VS |-> {"n2"}, height |-> 3, lastCommit |-> {}, time |-> 3]] /\ prevNow = 5 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -360,74 +356,74 @@ State4 == (* Transition 5 to State5 *) State5 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n2"}, - VS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> { "n1", "n2" }, - VS |-> {"n2"}, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> { "n1", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + :> [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2" }, + VS |-> { "n1", "n3", "n4" }, height |-> 5, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n3"}, + :> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n2"}, - VS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]] @@ 3 :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> {}, VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> {}, time |-> 3]] @@ 4 - :> [Commits |-> { "n1", "n2" }, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -437,26 +433,26 @@ State5 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> { "n1", "n2" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2" }, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n2"}, + lastCommit |-> { "n1", "n3" }, time |-> 4]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -465,43 +461,43 @@ State5 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> {}, VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n3"}, + lastCommit |-> {}, time |-> 3]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n2"}, - VS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]], now |-> 1402, verdict |-> "INVALID", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -513,18 +509,18 @@ State5 == /\ nextHeight = 2 /\ now = 1402 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> {"n3"}, +/\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n2"}, - VS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]] /\ prevNow = 1402 /\ prevVerdict = "INVALID" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -537,5 +533,5 @@ InvariantViolation == state = "finishedFailure" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 4 ================================================================================ -\* Created by Apalache on Wed Oct 07 14:19:25 UTC 2020 +\* Created by Apalache on Wed Oct 21 12:39:29 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.json index 6c3d810a5..4b239ca95 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.json @@ -1,10 +1,10 @@ { - "description": "auto-generated from Apalache counterexample", + "description": "MC4_4_faulty_TestHeaderFromFuture.json", "initial": { "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "765CAC565626BF7405C8B07ECFC06BF202F969A1F1066897BEFD09A1866BF588", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D", + "part_set_header": { + "total": 1, + "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D" } }, "signatures": [ @@ -36,31 +36,49 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "4+XbEjav4FPgXtVKTINGTvMpDRD5B8d8aXdYlSpGWvsEMEjy2piHeNpGTXanK1cEQK+6upFDOwDdeWbF8Q2xAA==" + "signature": "8rGIxi7DjBLFlHUo/lAgTpmzsnTZ8HOgnQaIoe+HEM5AmrjBaVDWVMb5/nNAnJTj4hcReCh4jviXcyRkItFJCA==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "Fqul88ticG0rmDZ5auj0kNGlommKOkHKlI/HTrAqIqkKu3pmEI/kIpGBGOfoAaHyEtWoGrsRdb+W8FJTghzrDw==" + "signature": "3cXnzhzJLKeF47ulcIWjgqsv9JBf9olbAo0mcjo7Ij6TfmCpJO6SmTiacBkiznsFSOc1ZSH+cHDBKA4AT7ozAg==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "R70pC8Z3AinU6B9WBZjP3Wjdm0FP+gvUg5GohstMKnVOZb/sVLzhBLo7C7rAzrdrxaW4sD0ti7mEsFiTzoryBg==" + "signature": "4O8c5hxoHR861ldolxeY9W1iXCdxYJVIf0xD3+sANSxo0ipXayv8IS7YFw1zzZvDbjRRazVzbfyBYf2jl4JeDw==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "3YhDOz02vbnR1YCYsqsYHFCaKSTgcxPkqLntB0kfrwv8hjhsldwWNIdlvt4x7+Aw5zrHtDjr3s9Gt4aXfT+EDw==" + "signature": "2Hel7uygQXpjYRJZiwtPLKNxT2Tg1/F5Zzs3VZpleFII9H1e5Gs02UjU0lybSXBKk/tD+NXPsdchrH/6/DmwAQ==" } ] } }, "next_validator_set": { "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -79,19 +97,10 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "trusting_period": "1400000000000", - "now": "2020-10-07T14:21:10.1602080470Z" + "now": "2020-10-21T12:41:40.160328410Z" }, "input": [ { @@ -99,7 +108,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -108,61 +117,91 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "730D3D6B2E9F4F0F23879458F2D02E0004F0F241" + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "84AB6C8869EE93568CD06D65261704285EFFD993150E4220A49D3C3B7000F2B5", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "6900FC8655050D51838C6EF0D794EC8AE26848192D3CE0B1E45FAFA374777B5D", + "part_set_header": { + "total": 1, + "hash": "6900FC8655050D51838C6EF0D794EC8AE26848192D3CE0B1E45FAFA374777B5D" } }, - "signatures": [] + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] } }, "validator_set": { - "validators": [], - "proposer": { - "address": "730D3D6B2E9F4F0F23879458F2D02E0004F0F241", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "YnT69eNDaRaNU7teDTcyBedSD0B/Ziqx+sejm0wQba0=" + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null }, - "voting_power": "50", - "proposer_priority": null - } + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] }, "next_validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:23:21Z", "verdict": "INVALID" diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.tla index 4dd8bcb92..ff398ff2d 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.tla @@ -11,39 +11,39 @@ TRUE State2 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n2", "n3" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n3", "n4" }, - VS |-> { "n2", "n3" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n1"}, - VS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 3, - lastCommit |-> { "n2", "n3" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n4"}, + :> [NextVS |-> { "n2", "n3" }, VS |-> {"n1"}, height |-> 4, lastCommit |-> { "n2", "n3", "n4" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> { "n2", "n3" }, height |-> 5, lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,7 +52,7 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -62,14 +62,14 @@ State2 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -80,7 +80,7 @@ State2 == /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -89,7 +89,7 @@ State2 == /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -101,39 +101,39 @@ State2 == State3 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n2", "n3" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n3", "n4" }, - VS |-> { "n2", "n3" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n1"}, - VS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 3, - lastCommit |-> { "n2", "n3" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n4"}, + :> [NextVS |-> { "n2", "n3" }, VS |-> {"n1"}, height |-> 4, lastCommit |-> { "n2", "n3", "n4" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> { "n2", "n3" }, height |-> 5, lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -141,16 +141,16 @@ State3 == @@ 4 :> [Commits |-> {}, header |-> - [NextVS |-> {"n4"}, - VS |-> {}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 1402]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -160,7 +160,7 @@ State3 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -169,24 +169,24 @@ State3 == :> [current |-> [Commits |-> {}, header |-> - [NextVS |-> {"n4"}, - VS |-> {}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 1402]], now |-> 1401, verdict |-> "INVALID", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -197,16 +197,16 @@ State3 == /\ nprobes = 1 /\ prevCurrent = [Commits |-> {}, header |-> - [NextVS |-> {"n4"}, - VS |-> {}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 1402]] /\ prevNow = 1401 /\ prevVerdict = "INVALID" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -220,5 +220,5 @@ InvariantViolation == history[s$2]["now"] < history[s$2]["current"]["header"]["time"])) ================================================================================ -\* Created by Apalache on Wed Oct 07 14:21:09 UTC 2020 +\* Created by Apalache on Wed Oct 21 12:41:40 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.json index 29f6bbbb5..c1cf062b8 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.json @@ -1,10 +1,10 @@ { - "description": "auto-generated from Apalache counterexample", + "description": "MC4_4_faulty_TestSuccess.json", "initial": { "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "54BD5EF1D284E0C21E1F1B36CC355275D7394B39F8AF10837D680EB32C7D776D", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32", + "part_set_header": { + "total": 1, + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "GgOVVVxrRwdFob0atNnPys0fJ8l/xcvknvsJxtgeiShup8aIgZJd445J976JtLBbWgoTBhCfY7Hyc9YnScwPCA==" + "signature": "BwKig3Giy91zDlZ5BSa67+E0EV1K4q6At2piQgg1h48odVOAjEiC4Tt772ologMWt0gdjYzeYtYR15OKtza1Ag==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "u76LJKtjHSF8GPayHDDhGfowGpXLHxMLg4KS0S0QTL2eWxAAH5LgAD1Tz80W8Vr/U458ZLppU9J6QvEB5CIrAg==" + "signature": "EYx9XdH96HYFIJtaddpFF+u/1GBwE1A3/Ds2e5BGHnti62RBwgsdIWe3denuQxgYNPnIymqvrCiBAGEEtYJHBg==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "ZpOcjQDpiFdI3xYpuIw5kGUzU7kyLLs+jfXDFzgxTGHQbWT/+HmL2chLUM1Fq2p9aNdAhWcFNhnnBh6NH7/nAg==" + "signature": "QctMtMK8Zes6OspVTkVvKtwWix70IAp0okAi4zJjV981FEnOuK2j8Fd0WQNHHDyqFX7uGTVL5L7JqbBfLuvBAA==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "cTzFxyrl1j2C7P/y5qN850JFbxZmHCiva6cY9NYQXahZ4cvnQchkQLvoCnE+jMDQKddDMySQLNGoI/AKb/2sCQ==" + "signature": "yWtJtDMH9NOtAeRqomUYDa23BePOZ+y7FNiAxWZ9a8iYUOOxUU3CoCqxfRm6wpJWW2QUwBicQs7ntnU3z7cpBg==" } ] } @@ -69,38 +69,11 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "trusting_period": "1400000000000", - "now": "2020-10-07T14:19:14.1602080354Z" + "now": "2020-10-21T12:39:15.160328395Z" }, "input": [ { @@ -108,39 +81,39 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "4", - "time": "1970-01-01T00:00:06Z", + "time": "1970-01-01T00:00:05Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "8CBE618E2A1BD3A01105A0B3C5634CF794E2F994D0BE7807E65B16B9FDB3E687", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "C42E41B9448734056B715284B71A2A0E4B4AF3D9542FA65186000AB3E77515B4", + "part_set_header": { + "total": 1, + "hash": "C42E41B9448734056B715284B71A2A0E4B4AF3D9542FA65186000AB3E77515B4" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:06Z", - "signature": "H+it4dPg11oKjbn7OXKf+DISLBQYXuG5SHuO0RO2xTmHMqciCnXwI+jWrNZVlAHA2d2VJg4/mCTnDUL6anLqCw==" + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "S5fqAkv8esKaY/BBX1KXvLNOGncIfUqOsejYykzdNhCaCZ1XYGx4vh4IPVBvthpyAT+qrKmAbYKrLAVLDF2JCA==" } ] } @@ -148,47 +121,30 @@ "validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:00:07Z", "verdict": "NOT_ENOUGH_TRUST" @@ -198,51 +154,39 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "2", - "time": "1970-01-01T00:00:02Z", + "time": "1970-01-01T00:00:03Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", - "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "consensus_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" }, "commit": { "height": "2", "round": 1, "block_id": { - "hash": "724CC2AD6419EA2B4828696CA5FCE1E3F5291FDDF3710EBE2D4B853B68583D36", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "08D83797F35A8B8BAB3A9942D689B7FB8005C4FB6A212C96A4E1276868414D78", + "part_set_header": { + "total": 1, + "hash": "08D83797F35A8B8BAB3A9942D689B7FB8005C4FB6A212C96A4E1276868414D78" } }, "signatures": [ - { - "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "dq1nZMRGsZJ9AAX9n4ZCFeFFyWaLEzfgw2IWpJN0mT6PZ7nVXMsubKMe3h6hozuv9X2EKMmWZXZJ3PawsgiKDQ==" - }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "9jnlwZZ1mHOnE98b4fRcI7jIQ9l1q6S3J5dxYEnKYBDNsx+rmezzeVuJO85J08k11aFNX6FW83aMgx80dNrkDA==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "TnfzsL/xcTcGAygA4MKx+q5rDhYHkyanRvIyr1S3aVkc44/UsmLPz0OpcZM5UYImTk7/nPIdyXj/5sNqz2BCAA==" + "timestamp": "1970-01-01T00:00:03Z", + "signature": "HgtEpK1J+GYrEeJUun6NhucTVZHUKw4W4C6Oyd+Q4ni8b06yKawPAx6FskiPIzhCnLo6rGRhogTdlE7rQJNlBQ==" } ] } @@ -257,56 +201,11 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, { "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { @@ -315,27 +214,10 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:00:07Z", "verdict": "SUCCESS" @@ -345,81 +227,45 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "3", - "time": "1970-01-01T00:00:03Z", + "time": "1970-01-01T00:00:04Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" }, "commit": { "height": "3", "round": 1, "block_id": { - "hash": "ABD4E8F073C17D1101A78CF28C4BBB7134A8FDC55AA1214CD7C7565683E57937", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "703604A5B309697FE9306E77BA7825D6BE46D6B7F6106D4FA0F0B22C4F5E3EE2", + "part_set_header": { + "total": 1, + "hash": "703604A5B309697FE9306E77BA7825D6BE46D6B7F6106D4FA0F0B22C4F5E3EE2" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "rfELxH0LjlaNiwwwXVQuvZjyPKtqxAuFQr3+79VfyomjZXm2nNUQNFlU4WEQJ1Gy+wmZ3ehzHdFCLqGec9X3DQ==" - }, - { - "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "EDHrTTaoNvkYMQcF7qCOWQlvVc5Jojy/IXvK3z9QS+EOOO/2dBI+HRqdAo6czLjLRUgWC/NpqnNBr6BUXcbRBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "EoDtn6AvTVqEpT3Of2Kw+NIodiFOeryYPhhGtyRZtJhJmaHqzpLdC7Xk96SST4m1xOXiBcNJWfViDmLva6XJDg==" - }, - { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "641Vqx+jGWGjlDlOMij0QZ6O95fSVCJ9FNLoUkVJ881JuT9n37r8xeb6YG8i/QEfCO83IZr38rXrs8OWs1ZwDw==" } ] } }, "validator_set": { "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, { "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { @@ -428,51 +274,25 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:08Z", + "now": "1970-01-01T00:23:22Z", "verdict": "SUCCESS" }, { @@ -480,39 +300,39 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", "height": "4", - "time": "1970-01-01T00:00:06Z", + "time": "1970-01-01T00:00:05Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "8CBE618E2A1BD3A01105A0B3C5634CF794E2F994D0BE7807E65B16B9FDB3E687", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "C42E41B9448734056B715284B71A2A0E4B4AF3D9542FA65186000AB3E77515B4", + "part_set_header": { + "total": 1, + "hash": "C42E41B9448734056B715284B71A2A0E4B4AF3D9542FA65186000AB3E77515B4" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:06Z", - "signature": "H+it4dPg11oKjbn7OXKf+DISLBQYXuG5SHuO0RO2xTmHMqciCnXwI+jWrNZVlAHA2d2VJg4/mCTnDUL6anLqCw==" + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "S5fqAkv8esKaY/BBX1KXvLNOGncIfUqOsejYykzdNhCaCZ1XYGx4vh4IPVBvthpyAT+qrKmAbYKrLAVLDF2JCA==" } ] } @@ -520,49 +340,32 @@ "validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:08Z", + "now": "1970-01-01T00:23:22Z", "verdict": "SUCCESS" } ] diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.tla index 9bcb6e255..d56702264 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2] - @@ 3 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 3, lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n3"}, + time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n2"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,7 +52,7 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -62,14 +62,14 @@ State2 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -80,7 +80,7 @@ State2 == /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -89,7 +89,7 @@ State2 == /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,58 +99,58 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2] - @@ 3 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 3, lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n3"}, + time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n2"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 4 - :> [Commits |-> {"n2"}, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n3"}, + time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -160,33 +160,33 @@ State3 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]], + lastCommit |-> {"n3"}, + time |-> 5]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -195,18 +195,18 @@ State3 == /\ nextHeight = 2 /\ now = 7 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> {"n2"}, +/\ prevCurrent = [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n3"}, + time |-> 5]] /\ prevNow = 7 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -216,66 +216,66 @@ State3 == (* Transition 0 to State4 *) State4 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2] - @@ 3 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 3, lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n3"}, + time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n2"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n3", "n4" }, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] @@ 4 - :> [Commits |-> {"n2"}, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n3"}, + time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -285,72 +285,72 @@ State4 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]], + lastCommit |-> {"n3"}, + time |-> 5]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]], + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> { "n1", "n3", "n4" }, +/\ latestVerified = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 8 +/\ now = 1402 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> { "n1", "n3", "n4" }, +/\ prevCurrent = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] /\ prevNow = 7 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -360,74 +360,74 @@ State4 == (* Transition 3 to State5 *) State5 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2] - @@ 3 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 3, lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n3"}, + time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n2"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n3", "n4" }, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] @@ 3 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] + lastCommit |-> {"n1"}, + time |-> 4]] @@ 4 - :> [Commits |-> {"n2"}, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n3"}, + time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -437,171 +437,171 @@ State5 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]], + lastCommit |-> {"n3"}, + time |-> 5]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]], + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]], - now |-> 8, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 1402, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]]] -/\ latestVerified = [Commits |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]]] +/\ latestVerified = [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] + lastCommit |-> {"n1"}, + time |-> 4]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 4 -/\ now = 8 +/\ now = 1402 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> { "n1", "n2", "n4" }, +/\ prevCurrent = [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] -/\ prevNow = 8 + lastCommit |-> {"n1"}, + time |-> 4]] +/\ prevNow = 1402 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> { "n1", "n3", "n4" }, +/\ prevVerified = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] /\ state = "working" (* Transition 0 to State6 *) State6 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2] - @@ 3 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 3, lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 4] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n2"}, + :> [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n3"}, + time |-> 5] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n2"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 6] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n3", "n4" }, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] @@ 3 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] + lastCommit |-> {"n1"}, + time |-> 4]] @@ 4 - :> [Commits |-> {"n2"}, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n3"}, + time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -611,117 +611,117 @@ State6 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]], + lastCommit |-> {"n3"}, + time |-> 5]], now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]], + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]], - now |-> 8, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 1402, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n3", "n4" }, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2]]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]]] @@ 4 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]], - now |-> 8, + lastCommit |-> {"n3"}, + time |-> 5]], + now |-> 1402, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]]] -/\ latestVerified = [Commits |-> {"n2"}, + lastCommit |-> {"n1"}, + time |-> 4]]] +/\ latestVerified = [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n3"}, + time |-> 5]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateVerified" @@ 4 :> "StateVerified" /\ nextHeight = 4 -/\ now = 8 +/\ now = 1402 /\ nprobes = 4 -/\ prevCurrent = [Commits |-> {"n2"}, +/\ prevCurrent = [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n4"}, - VS |-> {"n2"}, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3", "n4" }, - time |-> 6]] -/\ prevNow = 8 + lastCommit |-> {"n3"}, + time |-> 5]] +/\ prevNow = 1402 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> { "n1", "n2", "n4" }, +/\ prevVerified = [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] + lastCommit |-> {"n1"}, + time |-> 4]] /\ state = "finishedSuccess" (* The following formula holds true in the last state and violates the invariant *) @@ -730,5 +730,5 @@ InvariantViolation == state = "finishedSuccess" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 4 ================================================================================ -\* Created by Apalache on Wed Oct 07 14:19:13 UTC 2020 +\* Created by Apalache on Wed Oct 21 12:39:14 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.json index e7e1966cb..bb2f575e4 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.json @@ -1,10 +1,10 @@ { - "description": "auto-generated from Apalache counterexample", + "description": "MC4_4_faulty_TestUntrustedBeforeTrusted.json", "initial": { "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "67A2F8253E1545321561A82A23D87B984E11621D2B877EB236FE649A20442932", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "A85B7F07FE8746ABBD0F58DCAB3FF6FD9D9AA167B0BF1DA9C963B9004F37CA40", + "part_set_header": { + "total": 1, + "hash": "A85B7F07FE8746ABBD0F58DCAB3FF6FD9D9AA167B0BF1DA9C963B9004F37CA40" } }, "signatures": [ @@ -36,40 +36,31 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "yJFAxO4S7lWyeJYsQ+ZXD8qqOEJMea6qJI4emHXiz1G8toYIN31z7gcsXj3P0DUbdzIVUvCgPvvgVwoiLCKTDQ==" + "signature": "jh+PtBHMF7RkPfgNfUv91C029lyCwcX2ZUFS2ZF6QJ3WbVnOrAV5a6KvGSHZwv1mdDzvacxkxyMeVO+cKXreBg==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "hrdfvpMuSAwpAdG/apS8astAtVzL1GE1pV+b2LoSZwxx7XG78LbjvVzy9noKSY4XT6UlNaScd24ds0Dg1KnwBQ==" + "signature": "tC/aOP3Ombl0MO3DpMjvbf5s/CnghG9O6KKcMcuyCjx/0U/+K/5trmgSoFUU8QM9lL1FYkR3f2moX48n3yw/CA==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "RM39gQxzEDoC6uc0x+KW2ULfNiFXhetirKHn9J/suisjslOcWaanyhB9YFeJC2XQ42amV3b6lveGE3pauA1cBg==" + "signature": "+OTQXTzlNtYPUk9f9yENJrTynpy3mCRHSGUHoOkAoFciWjoqkf+kkI+BiPJcci72zrXz3rcsKV82ukPdtv4YDg==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "SB2j93BXgPL20kTmEhBFlHKmw6LtACQYCILz67xRhsUmXRAsIXQt5AQXW4bU5BHOYpHog8lz/5ZmSQ7If1rFAw==" + "signature": "9bD1oaXHT1uSEAid7YGIgUVSRzBdgYzDJd32I7h8kUmL+Mo9sTX/cxLvPYY29PKrZ6Q/ffaDTZG3MwRWorEVAg==" } ] } }, "next_validator_set": { "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -88,19 +79,10 @@ "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "trusting_period": "1400000000000", - "now": "2020-10-07T14:21:18.1602080478Z" + "now": "2020-10-21T12:41:51.160328411Z" }, "input": [ { @@ -108,7 +90,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -117,51 +99,66 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "next_validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "consensus_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "consensus_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "730D3D6B2E9F4F0F23879458F2D02E0004F0F241" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "36A702AEF4687C7B27B0809AB552F689527C7A80D0E35C6158A05BCC4E3D0169", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "82829B64AF204EDD51AD6F464AE51741916F6305C61770E5595A975419154493", + "part_set_header": { + "total": 1, + "hash": "82829B64AF204EDD51AD6F464AE51741916F6305C61770E5595A975419154493" } }, - "signatures": [] + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] } }, "validator_set": { - "validators": [], - "proposer": { - "address": "730D3D6B2E9F4F0F23879458F2D02E0004F0F241", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "YnT69eNDaRaNU7teDTcyBedSD0B/Ziqx+sejm0wQba0=" + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null }, - "voting_power": "50", - "proposer_priority": null - } + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] }, "next_validator_set": { - "validators": [], - "proposer": { - "address": "730D3D6B2E9F4F0F23879458F2D02E0004F0F241", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "YnT69eNDaRaNU7teDTcyBedSD0B/Ziqx+sejm0wQba0=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + "validators": [] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:23:21Z", "verdict": "INVALID" diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.tla index 59ad3f354..0b9a00984 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.tla @@ -11,39 +11,39 @@ TRUE State2 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n4"}, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n2", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n3" }, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> {"n4"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + VS |-> {"n2"}, height |-> 5, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,7 +52,7 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -62,14 +62,14 @@ State2 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -80,7 +80,7 @@ State2 == /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -89,7 +89,7 @@ State2 == /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -101,39 +101,39 @@ State2 == State3 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n4"}, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n2", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n3" }, height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> {"n4"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + VS |-> {"n2"}, height |-> 5, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -142,15 +142,15 @@ State3 == :> [Commits |-> {}, header |-> [NextVS |-> {}, - VS |-> {}, + VS |-> { "n2", "n3" }, height |-> 4, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n2" }, time |-> 0]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -160,7 +160,7 @@ State3 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -170,23 +170,23 @@ State3 == [Commits |-> {}, header |-> [NextVS |-> {}, - VS |-> {}, + VS |-> { "n2", "n3" }, height |-> 4, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n2" }, time |-> 0]], now |-> 1401, verdict |-> "INVALID", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -198,15 +198,15 @@ State3 == /\ prevCurrent = [Commits |-> {}, header |-> [NextVS |-> {}, - VS |-> {}, + VS |-> { "n2", "n3" }, height |-> 4, - lastCommit |-> { "n1", "n2", "n4" }, + lastCommit |-> { "n1", "n2" }, time |-> 0]] /\ prevNow = 1401 /\ prevVerdict = "INVALID" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -221,5 +221,5 @@ InvariantViolation == < history[s$2]["verified"]["header"]["time"])) ================================================================================ -\* Created by Apalache on Wed Oct 07 14:21:18 UTC 2020 +\* Created by Apalache on Wed Oct 21 12:41:51 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.json index 9f2fd4486..855695017 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.json @@ -1,10 +1,10 @@ { - "description": "auto-generated from Apalache counterexample", + "description": "MC4_4_faulty_TestValsetDifferentAllSteps.json", "initial": { "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "next_validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "67A2F8253E1545321561A82A23D87B984E11621D2B877EB236FE649A20442932", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "5AD522AA6CAD611640B450F30A3B3A5D5CE38C4FF9F0116B5786676F8C8EE665", + "part_set_header": { + "total": 1, + "hash": "5AD522AA6CAD611640B450F30A3B3A5D5CE38C4FF9F0116B5786676F8C8EE665" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "yJFAxO4S7lWyeJYsQ+ZXD8qqOEJMea6qJI4emHXiz1G8toYIN31z7gcsXj3P0DUbdzIVUvCgPvvgVwoiLCKTDQ==" + "signature": "EsC5Pps5k8qHsRQuKZFA6V5im6+4tqBFeeHNwZreaMuD1+wrkiDGs3Uqfg+eKPOkvJ8vFHRZiI+lgfDXWKiEDA==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "hrdfvpMuSAwpAdG/apS8astAtVzL1GE1pV+b2LoSZwxx7XG78LbjvVzy9noKSY4XT6UlNaScd24ds0Dg1KnwBQ==" + "signature": "5l2jo2hx8+S8ayDp5CTaZzGJJvgacARjdCx5qJDKc11txgSxtxTeQXRtDccY1PnQ4Yyj9hzFOLK5ZlPCiFFrBA==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "RM39gQxzEDoC6uc0x+KW2ULfNiFXhetirKHn9J/suisjslOcWaanyhB9YFeJC2XQ42amV3b6lveGE3pauA1cBg==" + "signature": "koV3vjxo//+D/LlD5x/fRgVq2zecKHF0pynr0Cz0TgkvCy1VCBdY8HJDyjR0h/p9Yc+hPW4cCeAH/FfD7z6UBA==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "SB2j93BXgPL20kTmEhBFlHKmw6LtACQYCILz67xRhsUmXRAsIXQt5AQXW4bU5BHOYpHog8lz/5ZmSQ7If1rFAw==" + "signature": "BIHRCxuw6CSk/WbPie4q2Mpt0QQIqdQv+4P8SV8JuwmIv0ZW4jew+YW8W7cN6WtbL8gcJb/g33x39APjWNMhDw==" } ] } @@ -78,29 +78,11 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "trusting_period": "1400000000000", - "now": "2020-10-07T14:21:01.1602080461Z" + "now": "2020-10-21T12:41:29.160328408Z" }, "input": [ { @@ -108,7 +90,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -117,30 +99,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "next_validators_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", - "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "3CAEB0BC5FF6215FD9C5B8066A6AC70172FBED7DCCC70E52FA362050818875A1", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "085FE1BC05000D11CEFE84CE805441658B991ECD63E3A557E2618C1980564CC1", + "part_set_header": { + "total": 1, + "hash": "085FE1BC05000D11CEFE84CE805441658B991ECD63E3A557E2618C1980564CC1" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:04Z", - "signature": "906ZZfMro9iSNdUYKBZPRp2Z+hI1LDN0TyTCJKx6nm912kcMm7Xi950+b8KB4KfskfLQck5BN4AeI49CTo4SAw==" + "signature": "9agLzbT8r4o/JulKrtF/Nz1AHTAeSpE6rJWOH0YbdCtmNVwMg5HRxGsq851o0DdzOo9jr++bCkbHH36Sdh+dAQ==" } ] } @@ -148,32 +130,23 @@ "validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null @@ -188,25 +161,17 @@ "proposer_priority": null }, { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:00:05Z", "verdict": "NOT_ENOUGH_TRUST" @@ -216,7 +181,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -225,9 +190,9 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", - "next_validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", - "consensus_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", "app_hash": "", "last_results_hash": null, "evidence_hash": null, @@ -237,10 +202,10 @@ "height": "2", "round": 1, "block_id": { - "hash": "00C1B20811F24EDC72673D79AC54F258F9C419DC0C0151BE91C867A0D5BF0CF2", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "6620822B327672CF09FB590624C38030127A5833C19D581777CADF0AA6468D01", + "part_set_header": { + "total": 1, + "hash": "6620822B327672CF09FB590624C38030127A5833C19D581777CADF0AA6468D01" } }, "signatures": [ @@ -248,19 +213,13 @@ "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:02Z", - "signature": "scegdXJBQ/ulXYaYUnrMsTV16k0VEYNgTE8gYkO9yHmXicRv9DiX5ANBAL3OQLDjKX0BEjIr3OQSlZkHDvCnBw==" + "signature": "h5QLJ56GQpI4/7BTPpu9bIjTXTVOkJmg00eglmNu8DDRkzOZ0Y8oQBwHfPF5oTemQuldKIcIp+7CXqTAyOifAA==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:02Z", - "signature": "Y9SaaCm5SziKCcQOJymDFEd279KjevVaQ1e+QBXebeTkQwREeEhGkdAm3gkXXi2G03hu4wUxccHPrW4lsjO1Dw==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "BOvwFsWxXmYKlwkOZ8snlTnlNN9a8Np3b9rkMi4+facah4VcVmQ8EiNQYJX9sVu8/OWkric/GRuILAGWXqcQAw==" + "signature": "5+qd7jmx2o5GIBlXkivZnUbuzIE8VxqpoOnrzeZWTa3F3nddEZ5cT6v+fpUMNWfNaWLlIuc28ddKEQtenpflBA==" } ] } @@ -284,58 +243,23 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:00:05Z", "verdict": "SUCCESS" @@ -345,7 +269,7 @@ "signed_header": { "header": { "version": { - "block": "0", + "block": "11", "app": "0" }, "chain_id": "test-chain", @@ -354,36 +278,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", - "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "consensus_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" }, "commit": { "height": "3", "round": 1, "block_id": { - "hash": "05598FB87D7AA5B077F7024F1AE8C7056726EB8D53E3DA79EB9AFB4992414062", - "parts": { - "total": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000" + "hash": "E60D3DC5A38CE0773BF911BE62514F5FE6C12FA574F0571965E8EDE2D8899C01", + "part_set_header": { + "total": 1, + "hash": "E60D3DC5A38CE0773BF911BE62514F5FE6C12FA574F0571965E8EDE2D8899C01" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "Ja3/8/KA0cF3VX7r4p7yoJNeux7XmRdhzepsaNJGyxB1+wJQgjWDkPVR6ZjvWjJBKwJfdErW2HmhVYsqXQLKCw==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:03Z", - "signature": "Sl/Wv0RE1AIdWaGLuy6daPMFZs/aP32S1TTm9gumhcWyMYz4buiN5mJYwM0V4vaAoxCSCBoqO9Siy+5NbxHWAw==" + "signature": "L5MQUXKrrRk9I/wnx3Pai49qFdzSkkYRzM9eO7gOI5ofG2LaJoDMttkCKp2kp9/3koSWssnX+/Uuvy62XU/hCA==" } ] } @@ -391,56 +309,30 @@ "validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } + ] }, "next_validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null } - ], - "proposer": { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, "now": "1970-01-01T00:00:05Z", "verdict": "SUCCESS" diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.tla index 281dfa70e..a2a85760e 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.tla @@ -11,39 +11,39 @@ TRUE State2 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n1", "n2" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n1"}, + lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,7 +52,7 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -62,14 +62,14 @@ State2 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -80,7 +80,7 @@ State2 == /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -89,7 +89,7 @@ State2 == /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -101,56 +101,56 @@ State2 == State3 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n1", "n2" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n1"}, + lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 4 - :> [Commits |-> {"n1"}, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -160,33 +160,33 @@ State3 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -195,18 +195,18 @@ State3 == /\ nextHeight = 2 /\ now = 5 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> {"n1"}, +/\ prevCurrent = [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4]] /\ prevNow = 5 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -218,64 +218,64 @@ State3 == State4 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n1", "n2" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n1"}, + lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2", "n3" }, + :> [Commits |-> { "n1", "n2" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2]] @@ 4 - :> [Commits |-> {"n1"}, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -285,36 +285,36 @@ State4 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n2", "n3" }, + [Commits |-> { "n1", "n2" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2]], @@ -323,15 +323,15 @@ State4 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> { "n1", "n2", "n3" }, +/\ latestVerified = [Commits |-> { "n1", "n2" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2]] @@ -339,10 +339,10 @@ State4 == /\ nextHeight = 3 /\ now = 5 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> { "n1", "n2", "n3" }, +/\ prevCurrent = [Commits |-> { "n1", "n2" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2]] @@ -350,7 +350,7 @@ State4 == /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -362,72 +362,72 @@ State4 == State5 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n1", "n2" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n1"}, + lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2", "n3" }, + :> [Commits |-> { "n1", "n2" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2]] @@ 3 - :> [Commits |-> { "n3", "n4" }, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n1", "n2" }, time |-> 3]] @@ 4 - :> [Commits |-> {"n1"}, + :> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -437,36 +437,36 @@ State5 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n1", "n2", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, + lastCommit |-> {"n1"}, time |-> 4]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n2", "n3" }, + [Commits |-> { "n1", "n2" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2]], @@ -475,36 +475,36 @@ State5 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n1", "n2" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n1"}, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n1", "n2" }, time |-> 3]], now |-> 5, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n2", "n3" }, + [Commits |-> { "n1", "n2" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2]]] -/\ latestVerified = [Commits |-> { "n3", "n4" }, +/\ latestVerified = [Commits |-> {"n1"}, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n1", "n2" }, time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ -513,19 +513,19 @@ State5 == /\ nextHeight = 4 /\ now = 5 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> { "n3", "n4" }, +/\ prevCurrent = [Commits |-> {"n1"}, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n3", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, + lastCommit |-> { "n1", "n2" }, time |-> 3]] /\ prevNow = 5 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> { "n1", "n2", "n3" }, +/\ prevVerified = [Commits |-> { "n1", "n2" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, height |-> 2, lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 2]] @@ -542,5 +542,5 @@ InvariantViolation == = history[s2$2]["current"]["header"]["VS"])) ================================================================================ -\* Created by Apalache on Wed Oct 07 14:21:01 UTC 2020 +\* Created by Apalache on Wed Oct 21 12:41:29 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/single_step/sequential/commit/_less_than_one_third_nil_votes.json b/light-client/tests/support/single_step/sequential/commit/_less_than_one_third_nil_votes.json index 1d9c36bee..ff9c91963 100644 --- a/light-client/tests/support/single_step/sequential/commit/_less_than_one_third_nil_votes.json +++ b/light-client/tests/support/single_step/sequential/commit/_less_than_one_third_nil_votes.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -130,7 +130,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -150,7 +150,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } diff --git a/light-client/tests/support/single_step/sequential/commit/_more_than_two_third_vals_sign.json b/light-client/tests/support/single_step/sequential/commit/_more_than_two_third_vals_sign.json index 37410c303..646bc2ad2 100644 --- a/light-client/tests/support/single_step/sequential/commit/_more_than_two_third_vals_sign.json +++ b/light-client/tests/support/single_step/sequential/commit/_more_than_two_third_vals_sign.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -130,7 +130,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -150,7 +150,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } diff --git a/light-client/tests/support/single_step/sequential/commit/one_third_vals_dont_sign.json b/light-client/tests/support/single_step/sequential/commit/one_third_vals_dont_sign.json index 3047b56ec..452ca78f6 100644 --- a/light-client/tests/support/single_step/sequential/commit/one_third_vals_dont_sign.json +++ b/light-client/tests/support/single_step/sequential/commit/one_third_vals_dont_sign.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": 1, "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -115,7 +115,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": 1, "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -135,7 +135,7 @@ "round": 1, "block_id": { "hash": "BF9535C5A5FEFB00719BAB70B177C0D4EA3E18E433E91E396EC61ADE2CE12161", - "parts": { + "part_set_header": { "total": 1, "hash": "1DC8F8E942E7FDFB42A83B3E308FCBD6CC7602F60FB7812DC91F91A6AFAE295A" } diff --git a/light-client/tests/support/single_step/sequential/commit/wrong_commit_height.json b/light-client/tests/support/single_step/sequential/commit/wrong_commit_height.json index fe5ec5867..a746276c5 100644 --- a/light-client/tests/support/single_step/sequential/commit/wrong_commit_height.json +++ b/light-client/tests/support/single_step/sequential/commit/wrong_commit_height.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/commit/wrong_header_hash.json b/light-client/tests/support/single_step/sequential/commit/wrong_header_hash.json index 1bfe4cf97..c58f33c9f 100644 --- a/light-client/tests/support/single_step/sequential/commit/wrong_header_hash.json +++ b/light-client/tests/support/single_step/sequential/commit/wrong_header_hash.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "2D2D2D2D5468697320697320612033322D6279746520737472696E672D2D2D2D", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/commit/wrong_vote_signature.json b/light-client/tests/support/single_step/sequential/commit/wrong_vote_signature.json index d6a66de86..4fbc32905 100644 --- a/light-client/tests/support/single_step/sequential/commit/wrong_vote_signature.json +++ b/light-client/tests/support/single_step/sequential/commit/wrong_vote_signature.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/header/non_monotonic_bft_time.json b/light-client/tests/support/single_step/sequential/header/non_monotonic_bft_time.json index dc8f287f8..4509094e8 100644 --- a/light-client/tests/support/single_step/sequential/header/non_monotonic_bft_time.json +++ b/light-client/tests/support/single_step/sequential/header/non_monotonic_bft_time.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:03:50Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "8EC5D4DE70C7D42445EF3F26801DEE463060E7D2611FD5A492B9BA8F832A1FF2", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/header/non_monotonic_header_height.json b/light-client/tests/support/single_step/sequential/header/non_monotonic_header_height.json index 3a54021eb..25bfc7474 100644 --- a/light-client/tests/support/single_step/sequential/header/non_monotonic_header_height.json +++ b/light-client/tests/support/single_step/sequential/header/non_monotonic_header_height.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "2CA3CD7E4DB5CFB8EB2ED8772A89F833624A302210B87DE852B31C258FB0AE19", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_chain_id.json b/light-client/tests/support/single_step/sequential/header/wrong_chain_id.json index af58ca68f..ff6995a09 100644 --- a/light-client/tests/support/single_step/sequential/header/wrong_chain_id.json +++ b/light-client/tests/support/single_step/sequential/header/wrong_chain_id.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_header_timestamp.json b/light-client/tests/support/single_step/sequential/header/wrong_header_timestamp.json index cbe73d454..86412d900 100644 --- a/light-client/tests/support/single_step/sequential/header/wrong_header_timestamp.json +++ b/light-client/tests/support/single_step/sequential/header/wrong_header_timestamp.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:05:15Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_last_block_id.json b/light-client/tests/support/single_step/sequential/header/wrong_last_block_id.json index 2d412ea30..325ef7c21 100644 --- a/light-client/tests/support/single_step/sequential/header/wrong_last_block_id.json +++ b/light-client/tests/support/single_step/sequential/header/wrong_last_block_id.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "77726F6E672068617368", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_last_commit_hash.json b/light-client/tests/support/single_step/sequential/header/wrong_last_commit_hash.json index 01b6dd3b3..0f1943140 100644 --- a/light-client/tests/support/single_step/sequential/header/wrong_last_commit_hash.json +++ b/light-client/tests/support/single_step/sequential/header/wrong_last_commit_hash.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_next_valset_hash.json b/light-client/tests/support/single_step/sequential/header/wrong_next_valset_hash.json index 914f1d0d2..ae9d3fc82 100644 --- a/light-client/tests/support/single_step/sequential/header/wrong_next_valset_hash.json +++ b/light-client/tests/support/single_step/sequential/header/wrong_next_valset_hash.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_valset_hash.json b/light-client/tests/support/single_step/sequential/header/wrong_valset_hash.json index ec3e329f2..5621044cb 100644 --- a/light-client/tests/support/single_step/sequential/header/wrong_valset_hash.json +++ b/light-client/tests/support/single_step/sequential/header/wrong_valset_hash.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_128_validators.json b/light-client/tests/support/single_step/sequential/validator_set/_128_validators.json index e29410d6c..eef6e046f 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_128_validators.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_128_validators.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "482F85D79E5F24D05AF202841D4C2B9F52187169C6F3114F233EC9A4B9910460", - "parts": { + "part_set_header": { "total": "1", "hash": "FDA4F6D8EA316671EC4216B54F3468B848D9B79FCD7EAF6E588B1944FEA9FC8A" } @@ -1990,7 +1990,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "482F85D79E5F24D05AF202841D4C2B9F52187169C6F3114F233EC9A4B9910460", - "parts": { + "part_set_header": { "total": "1", "hash": "FDA4F6D8EA316671EC4216B54F3468B848D9B79FCD7EAF6E588B1944FEA9FC8A" } @@ -2010,7 +2010,7 @@ "round": "1", "block_id": { "hash": "73F0B1C5BED25522E1EDC1564A0B61CC32D329ADA24734A1FBAC956BB269D4D1", - "parts": { + "part_set_header": { "total": "1", "hash": "CE66B7065D4ECE7E1CBF9D0115A4825A77E838F8D3FAC2C978E4048F51155B8E" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_1_validator.json b/light-client/tests/support/single_step/sequential/validator_set/_1_validator.json index c6969b732..84382c2da 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_1_validator.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_1_validator.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": "1", "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": "1", "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -105,7 +105,7 @@ "round": "1", "block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": "1", "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_8_validators.json b/light-client/tests/support/single_step/sequential/validator_set/_8_validators.json index 4f9e63918..1691df15a 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_8_validators.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_8_validators.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "1CD820382BADFE9F39B17798A4EAFB356F692C14DE2704CF827D0AAC33E9778E", - "parts": { + "part_set_header": { "total": "1", "hash": "CBB0495230B716FAD25E815C2766B059A7C2D7D31126ABCB76EE8FA2509C778E" } @@ -190,7 +190,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "1CD820382BADFE9F39B17798A4EAFB356F692C14DE2704CF827D0AAC33E9778E", - "parts": { + "part_set_header": { "total": "1", "hash": "CBB0495230B716FAD25E815C2766B059A7C2D7D31126ABCB76EE8FA2509C778E" } @@ -210,7 +210,7 @@ "round": "1", "block_id": { "hash": "B71EBFEE6DA7660E16700C517B2C4BDAE902E0C64711FBE5CE14B27F9B27BAB6", - "parts": { + "part_set_header": { "total": "1", "hash": "E48F3D3AEE914F0CD55E616CA8513142A35BE45DCD6C5E7EAA0798B747C42147" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_half_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_half_valset_changes.json index a554a10db..7be832bde 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_half_valset_changes.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_half_valset_changes.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -130,7 +130,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -150,7 +150,7 @@ "round": "1", "block_id": { "hash": "5D8345A72BA9C1CFF6E358331E7749F6F046647E84C117BE5E6166CC1E5FDD8F", - "parts": { + "part_set_header": { "total": "1", "hash": "246B264D47EB5D355275E47C5C8E9D68F67FF608A4429EBC574A1A6DA7575FA3" } @@ -294,7 +294,7 @@ "time": "2019-11-02T15:04:15Z", "last_block_id": { "hash": "5D8345A72BA9C1CFF6E358331E7749F6F046647E84C117BE5E6166CC1E5FDD8F", - "parts": { + "part_set_header": { "total": "1", "hash": "246B264D47EB5D355275E47C5C8E9D68F67FF608A4429EBC574A1A6DA7575FA3" } @@ -314,7 +314,7 @@ "round": "1", "block_id": { "hash": "65BFBF3C6A94F15D77DCA9882CFF2620392D3BE01E0B0778C90B10F44977B7BF", - "parts": { + "part_set_header": { "total": "1", "hash": "34BCECAE745B8586DDFB4E3B3BE23027B459EAE6EF53AD516EBBF4B4D789F6E2" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_less_than_one_third_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_less_than_one_third_valset_changes.json index 54f783208..92448510a 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_less_than_one_third_valset_changes.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_less_than_one_third_valset_changes.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -130,7 +130,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -150,7 +150,7 @@ "round": "1", "block_id": { "hash": "8FD6915D5371DDD9BC5A1099B635CD847965634EB4C1C8602A7F6B9E2E479C2D", - "parts": { + "part_set_header": { "total": "1", "hash": "5079993121C414266DC4F5C356F1048276F8D1EEAB202771B5891C7092DB1517" } @@ -294,7 +294,7 @@ "time": "2019-11-02T15:04:15Z", "last_block_id": { "hash": "8FD6915D5371DDD9BC5A1099B635CD847965634EB4C1C8602A7F6B9E2E479C2D", - "parts": { + "part_set_header": { "total": "1", "hash": "5079993121C414266DC4F5C356F1048276F8D1EEAB202771B5891C7092DB1517" } @@ -314,7 +314,7 @@ "round": "1", "block_id": { "hash": "6DAF8F9DBCBA3CC85E46E8523D88C27356C646AB76141D7E59ADD9DF6D532FAF", - "parts": { + "part_set_header": { "total": "1", "hash": "75CFD5B7EBC2CA8C680789710CAB0B2991056C2EF4BAE017B9C8709754C361AE" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_more_than_two_thirds_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_more_than_two_thirds_valset_changes.json index 11a43a5b2..d4a7b4da8 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_more_than_two_thirds_valset_changes.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_more_than_two_thirds_valset_changes.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -130,7 +130,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -150,7 +150,7 @@ "round": "1", "block_id": { "hash": "2DDDDF1297BED341DDDCA18670FD3CF583BC74D023DA2D8336AC2CDEEABA9BDA", - "parts": { + "part_set_header": { "total": "1", "hash": "DBD8BC24177E9D6A95597AD17386ED38D420F8D5E97D453E40FB4E047B67154F" } @@ -294,7 +294,7 @@ "time": "2019-11-02T15:04:15Z", "last_block_id": { "hash": "2DDDDF1297BED341DDDCA18670FD3CF583BC74D023DA2D8336AC2CDEEABA9BDA", - "parts": { + "part_set_header": { "total": "1", "hash": "DBD8BC24177E9D6A95597AD17386ED38D420F8D5E97D453E40FB4E047B67154F" } @@ -314,7 +314,7 @@ "round": "1", "block_id": { "hash": "071124F72D6AF72AC97EC643BC577F6810E26CA34993BA28A0C6ED287DAF47AF", - "parts": { + "part_set_header": { "total": "1", "hash": "1E45AF46930C1E34A457BC9A2FDDB9ABC5E7B9B00CCF2A041FA4672635733CE1" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_one_third_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_one_third_valset_changes.json index 445756daa..d0df25465 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_one_third_valset_changes.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_one_third_valset_changes.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": "1", "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -115,7 +115,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": "1", "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -135,7 +135,7 @@ "round": "1", "block_id": { "hash": "0153E3DFDFAF4F6D6D9C7290D297B5580DE2EB33A7065F1B8A87447F418BCF13", - "parts": { + "part_set_header": { "total": "1", "hash": "79F36F0EAA0BF148E921BAC2AC329FCEEA87CC19848A418B97C09175E2BEE9E7" } @@ -255,7 +255,7 @@ "time": "2019-11-02T15:04:15Z", "last_block_id": { "hash": "0153E3DFDFAF4F6D6D9C7290D297B5580DE2EB33A7065F1B8A87447F418BCF13", - "parts": { + "part_set_header": { "total": "1", "hash": "79F36F0EAA0BF148E921BAC2AC329FCEEA87CC19848A418B97C09175E2BEE9E7" } @@ -275,7 +275,7 @@ "round": "1", "block_id": { "hash": "29593D4B37E92143833398B57900E16421D94E4951BEFFDF102373C843733571", - "parts": { + "part_set_header": { "total": "1", "hash": "2E39955B5EE48754ED1073B30635620115FE92CF0490EB7F543F0CEEED8BBD6C" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_two_thirds_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_two_thirds_valset_changes.json index fbbb5bd4d..8beebfe77 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_two_thirds_valset_changes.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_two_thirds_valset_changes.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": "1", "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -115,7 +115,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": "1", "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -135,7 +135,7 @@ "round": "1", "block_id": { "hash": "C46D5CC1F77D0B1B710FF3677C7C8C12AA59CA9603743D982D7DBC25679A07F4", - "parts": { + "part_set_header": { "total": "1", "hash": "215E23C3BF8A2D9D36F96564D53F94F1652FD47A265EE13F83FD33F2DAE85844" } @@ -255,7 +255,7 @@ "time": "2019-11-02T15:04:15Z", "last_block_id": { "hash": "C46D5CC1F77D0B1B710FF3677C7C8C12AA59CA9603743D982D7DBC25679A07F4", - "parts": { + "part_set_header": { "total": "1", "hash": "215E23C3BF8A2D9D36F96564D53F94F1652FD47A265EE13F83FD33F2DAE85844" } @@ -275,7 +275,7 @@ "round": "1", "block_id": { "hash": "200B0B5145164BC845E9101062ED495AF28AEF62836B37459B6ACC0AC033E424", - "parts": { + "part_set_header": { "total": "1", "hash": "BE403574F924CDFFA1D65866FFE4279A4F834E85C4BFDE6C52BFFBAC5D0AB794" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_valset_changes_fully.json b/light-client/tests/support/single_step/sequential/validator_set/_valset_changes_fully.json index df1e99446..ecf61cc2d 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_valset_changes_fully.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_valset_changes_fully.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "2EB6F5FA9AAFDB54CB286AA79AB51F83739FE14ED920FE3FC0539C1F220D9D1F", - "parts": { + "part_set_header": { "total": "1", "hash": "D9CEF668B474BC7CD90A909A7273650B16ABD3D3FC9876F108F4F490710165B0" } @@ -145,7 +145,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "2EB6F5FA9AAFDB54CB286AA79AB51F83739FE14ED920FE3FC0539C1F220D9D1F", - "parts": { + "part_set_header": { "total": "1", "hash": "D9CEF668B474BC7CD90A909A7273650B16ABD3D3FC9876F108F4F490710165B0" } @@ -165,7 +165,7 @@ "round": "1", "block_id": { "hash": "10F427D310AB14961658AA4157A60A0776A5B02A263B04E30FAED9D82A55B56C", - "parts": { + "part_set_header": { "total": "1", "hash": "24C52C4DEACA0659CEB742A0066DF7E06FBCC67832DF40C0D54E5B280EDCBBC9" } @@ -333,7 +333,7 @@ "time": "2019-11-02T15:04:15Z", "last_block_id": { "hash": "10F427D310AB14961658AA4157A60A0776A5B02A263B04E30FAED9D82A55B56C", - "parts": { + "part_set_header": { "total": "1", "hash": "24C52C4DEACA0659CEB742A0066DF7E06FBCC67832DF40C0D54E5B280EDCBBC9" } @@ -353,7 +353,7 @@ "round": "1", "block_id": { "hash": "21BA9CFB515FE00FE08E89C5E74E4E425C705CBFA309796A3540A897773EDEAB", - "parts": { + "part_set_header": { "total": "1", "hash": "DAB3C93C1C84059ECDC13C6B3D321E8FDE28A0ABEEB8C3BBBC18818B15F09ADC" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_valset_size_doubles.json b/light-client/tests/support/single_step/sequential/validator_set/_valset_size_doubles.json index 9ff410c24..a7e82f837 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_valset_size_doubles.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_valset_size_doubles.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": "1", "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -100,7 +100,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": "1", "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } @@ -120,7 +120,7 @@ "round": "1", "block_id": { "hash": "5750BB0C6B0A5BB3B3E3C7254E8523D02981843B0052203A6A8851EA2715D57B", - "parts": { + "part_set_header": { "total": "1", "hash": "EBCC54DF2FC6F66DBB4EF1F34B612ED0A32AAD8F492BF7E27E3A2F8BEECC3B84" } @@ -234,7 +234,7 @@ "time": "2019-11-02T15:04:15Z", "last_block_id": { "hash": "5750BB0C6B0A5BB3B3E3C7254E8523D02981843B0052203A6A8851EA2715D57B", - "parts": { + "part_set_header": { "total": "1", "hash": "EBCC54DF2FC6F66DBB4EF1F34B612ED0A32AAD8F492BF7E27E3A2F8BEECC3B84" } @@ -254,7 +254,7 @@ "round": "1", "block_id": { "hash": "61D474D8DF2941DC662FBF87CD31DD9BC2E26359B80949E171A7CE026C15528C", - "parts": { + "part_set_header": { "total": "1", "hash": "E3A68D13F47F0DDCD8CBC0BF9617B4D113F7B49A734D87353786A9838C2CD3AD" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_valset_size_halves.json b/light-client/tests/support/single_step/sequential/validator_set/_valset_size_halves.json index 2d0ff28bd..01f901a44 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/_valset_size_halves.json +++ b/light-client/tests/support/single_step/sequential/validator_set/_valset_size_halves.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -130,7 +130,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -150,7 +150,7 @@ "round": "1", "block_id": { "hash": "4007EAB43FB13ED8648B3388FEF543740E19FE9CA11A6FFC712685E6C09D0B02", - "parts": { + "part_set_header": { "total": "1", "hash": "C02108A3CFAE6A6BC9F83A13F8FF74A5B490506966C685BA61358883B538BBE6" } @@ -276,7 +276,7 @@ "time": "2019-11-02T15:04:15Z", "last_block_id": { "hash": "4007EAB43FB13ED8648B3388FEF543740E19FE9CA11A6FFC712685E6C09D0B02", - "parts": { + "part_set_header": { "total": "1", "hash": "C02108A3CFAE6A6BC9F83A13F8FF74A5B490506966C685BA61358883B538BBE6" } @@ -296,7 +296,7 @@ "round": "1", "block_id": { "hash": "53B8F366C0D6EDB6D70C48BB67DBF3CA520B88FF25B6B7DBA09BD8E5C9A49D36", - "parts": { + "part_set_header": { "total": "1", "hash": "7CD48149E322EC0BB7EA319D93F708578F1C3359F015D70856F3A84A65B6D3B8" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/faulty_signer.json b/light-client/tests/support/single_step/sequential/validator_set/faulty_signer.json index a571fcd11..7c7788c56 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/faulty_signer.json +++ b/light-client/tests/support/single_step/sequential/validator_set/faulty_signer.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -121,7 +121,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -141,7 +141,7 @@ "round": 1, "block_id": { "hash": "AFCEFE8A9B59376401E78B7732D25A06D82625D0AD5B915929D8AF61D323F43F", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } diff --git a/light-client/tests/support/single_step/sequential/validator_set/wrong_valset.json b/light-client/tests/support/single_step/sequential/validator_set/wrong_valset.json index 5742eea82..442e887bc 100644 --- a/light-client/tests/support/single_step/sequential/validator_set/wrong_valset.json +++ b/light-client/tests/support/single_step/sequential/validator_set/wrong_valset.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": 1, "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -115,7 +115,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": 1, "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -135,7 +135,7 @@ "round": 1, "block_id": { "hash": "ECE1D8CE9CA2EC2FD97C691BC77ADD1E839A8F77341DE46C37958950DC7719ED", - "parts": { + "part_set_header": { "total": 1, "hash": "7CC80FAE035AE9FE8D2A7B5497B72937CFC01C4ADD909E1EC18BEB60FC47D60F" } diff --git a/light-client/tests/support/single_step/skipping/commit/_more_than_two_third_vals_sign.json b/light-client/tests/support/single_step/skipping/commit/_more_than_two_third_vals_sign.json index 6aee16ba6..aad5a18f4 100644 --- a/light-client/tests/support/single_step/skipping/commit/_more_than_two_third_vals_sign.json +++ b/light-client/tests/support/single_step/skipping/commit/_more_than_two_third_vals_sign.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "round": "1", "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -130,7 +130,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": "1", "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } @@ -150,7 +150,7 @@ "round": "1", "block_id": { "hash": "673A5926573823D76B84C01877887D9AA305E1FAFE50EC167F433E7B3A0FAABB", - "parts": { + "part_set_header": { "total": "1", "hash": "08B22B6102C1AA5A35FE903C7ED2631A0DFC38D09F4592A39F9C1B5D82F61F85" } diff --git a/light-client/tests/support/single_step/skipping/commit/more_signatures_than_validators.json b/light-client/tests/support/single_step/skipping/commit/more_signatures_than_validators.json index c1ac46ace..9c018b83d 100644 --- a/light-client/tests/support/single_step/skipping/commit/more_signatures_than_validators.json +++ b/light-client/tests/support/single_step/skipping/commit/more_signatures_than_validators.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": 1, "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -115,7 +115,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "CB139C4EF48BAE1007BB3CF4E39131C3B27782CB8D12E1690C916C4CFEA359E0", - "parts": { + "part_set_header": { "total": 1, "hash": "9C6CEEFF8397D19C6AB5AD3F00608D3152090A9B645D3C3CC9D8E66C8B319034" } @@ -135,7 +135,7 @@ "round": 1, "block_id": { "hash": "22D13748C59A4A6D05B38FBFF520F6F6BA7BD74DA1ECBDD8419CF9B196DD9E5A", - "parts": { + "part_set_header": { "total": 1, "hash": "A862597A9288A057560DA73B642C7E1588C6D62BE1C89DBF9FD81C2E8FFA9E46" } diff --git a/light-client/tests/support/single_step/skipping/commit/no_signatures.json b/light-client/tests/support/single_step/skipping/commit/no_signatures.json index 8f858707d..5cc8adac4 100644 --- a/light-client/tests/support/single_step/skipping/commit/no_signatures.json +++ b/light-client/tests/support/single_step/skipping/commit/no_signatures.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "5C90F6FF07D5C5CFDD5334877502167F5823D99A7D4DF01AAD138B61B45519C9", - "parts": { + "part_set_header": { "total": 1, "hash": "D173D7CB2421A4D1A1214E45ADDCDC99FCB644A9EFECAE6FBD04BF4397DCE3FD" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "E2D461B56E897D006C8C6EB27B8C04E5B356233A33CF3CE563039BAC982A49EE", - "parts": { + "part_set_header": { "total": 1, "hash": "019870B693E80D52541782D79256EED22A3694B1C45DC498D69128DB9CE6F43C" } diff --git a/light-client/tests/support/single_step/skipping/commit/one_third_vals_dont_sign.json b/light-client/tests/support/single_step/skipping/commit/one_third_vals_dont_sign.json index 3f2999e6f..3b7699c23 100644 --- a/light-client/tests/support/single_step/skipping/commit/one_third_vals_dont_sign.json +++ b/light-client/tests/support/single_step/skipping/commit/one_third_vals_dont_sign.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": 1, "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -115,7 +115,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "BF9535C5A5FEFB00719BAB70B177C0D4EA3E18E433E91E396EC61ADE2CE12161", - "parts": { + "part_set_header": { "total": 1, "hash": "1DC8F8E942E7FDFB42A83B3E308FCBD6CC7602F60FB7812DC91F91A6AFAE295A" } @@ -135,7 +135,7 @@ "round": 1, "block_id": { "hash": "E56DEC6C1AF5879B55DB7288CE698E7C67BAD20011371BF1EC53845079583524", - "parts": { + "part_set_header": { "total": 1, "hash": "E7198B911EF65EA64C7A1601504F116213E27AE32A5D2BD6B5BDBFB3F28A69DE" } diff --git a/light-client/tests/support/single_step/skipping/header/header_from_future.json b/light-client/tests/support/single_step/skipping/header/header_from_future.json index 9eed5b68d..06e51ef94 100644 --- a/light-client/tests/support/single_step/skipping/header/header_from_future.json +++ b/light-client/tests/support/single_step/skipping/header/header_from_future.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "parts": { + "part_set_header": { "total": 1, "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "91C69B5C2135FC990C55328044785D55347C14D34AC0C4CB294C4C998011CCEE", - "parts": { + "part_set_header": { "total": 1, "hash": "BE6B7084656BF44140CB0B948A75ED2D3660F40E37B4549608FC6B737F37E624" } diff --git a/light-client/tests/support/single_step/skipping/header/out_of_trusting_period.json b/light-client/tests/support/single_step/skipping/header/out_of_trusting_period.json index f2d1058ba..83b494435 100644 --- a/light-client/tests/support/single_step/skipping/header/out_of_trusting_period.json +++ b/light-client/tests/support/single_step/skipping/header/out_of_trusting_period.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ "round": 1, "block_id": { "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "parts": { + "part_set_header": { "total": 1, "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" } @@ -85,7 +85,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "99399EF10C52CD14F1C256C93A575142FEFD529F29A2838F370ADDF5F44BE7BA", - "parts": { + "part_set_header": { "total": 1, "hash": "E34CEDF8C84D8D464CA2E86819640F413D4EFD93237C017AE73B8BBABD1FED26" } @@ -105,7 +105,7 @@ "round": 1, "block_id": { "hash": "5C90F6FF07D5C5CFDD5334877502167F5823D99A7D4DF01AAD138B61B45519C9", - "parts": { + "part_set_header": { "total": 1, "hash": "D173D7CB2421A4D1A1214E45ADDCDC99FCB644A9EFECAE6FBD04BF4397DCE3FD" } diff --git a/light-client/tests/support/single_step/skipping/validator_set/_skip_five_blocks.json b/light-client/tests/support/single_step/skipping/validator_set/_skip_five_blocks.json index 05a14c53c..6eaa4f522 100644 --- a/light-client/tests/support/single_step/skipping/validator_set/_skip_five_blocks.json +++ b/light-client/tests/support/single_step/skipping/validator_set/_skip_five_blocks.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "1", "block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": "1", "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -115,7 +115,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "CB139C4EF48BAE1007BB3CF4E39131C3B27782CB8D12E1690C916C4CFEA359E0", - "parts": { + "part_set_header": { "total": "1", "hash": "9C6CEEFF8397D19C6AB5AD3F00608D3152090A9B645D3C3CC9D8E66C8B319034" } @@ -135,7 +135,7 @@ "1", "block_id": { "hash": "22D13748C59A4A6D05B38FBFF520F6F6BA7BD74DA1ECBDD8419CF9B196DD9E5A", - "parts": { + "part_set_header": { "total": "1", "hash": "A862597A9288A057560DA73B642C7E1588C6D62BE1C89DBF9FD81C2E8FFA9E46" } diff --git a/light-client/tests/support/single_step/skipping/validator_set/_skip_one_block.json b/light-client/tests/support/single_step/skipping/validator_set/_skip_one_block.json index f39d0cb19..f49aee2bf 100644 --- a/light-client/tests/support/single_step/skipping/validator_set/_skip_one_block.json +++ b/light-client/tests/support/single_step/skipping/validator_set/_skip_one_block.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "1", "block_id": { "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "parts": { + "part_set_header": { "total": "1", "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" } @@ -115,7 +115,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "BF9535C5A5FEFB00719BAB70B177C0D4EA3E18E433E91E396EC61ADE2CE12161", - "parts": { + "part_set_header": { "total": "1", "hash": "1DC8F8E942E7FDFB42A83B3E308FCBD6CC7602F60FB7812DC91F91A6AFAE295A" } @@ -135,7 +135,7 @@ "1", "block_id": { "hash": "E56DEC6C1AF5879B55DB7288CE698E7C67BAD20011371BF1EC53845079583524", - "parts": { + "part_set_header": { "total": "1", "hash": "E7198B911EF65EA64C7A1601504F116213E27AE32A5D2BD6B5BDBFB3F28A69DE" } diff --git a/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_less_than_trust_level.json b/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_less_than_trust_level.json index 16f727c31..3320418ef 100644 --- a/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_less_than_trust_level.json +++ b/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_less_than_trust_level.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -32,7 +32,7 @@ "1", "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": "1", "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -130,7 +130,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "E5F746181F4DF1A002D34813250C1F0AD4C902CA3FAE0407720E7DF9A97CFEEF", - "parts": { + "part_set_header": { "total": "1", "hash": "9AADFF3B4468D4AA0672E667F68C92266AE4F8D1BBA2629AD1AB5B11BBCC71B2" } @@ -150,7 +150,7 @@ "1", "block_id": { "hash": "9E6C2B83DA2E8AABF69216B7DD6811BB79B3DFF86D9AB1AE4C1E33A52CD196F8", - "parts": { + "part_set_header": { "total": "1", "hash": "55AD480BBF5C09C12C113AAB8231B96953094898B1179267F4DF5C90FBFDC48F" } diff --git a/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_more_than_trust_level.json b/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_more_than_trust_level.json index 47a553c34..9c9e32388 100644 --- a/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_more_than_trust_level.json +++ b/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_more_than_trust_level.json @@ -12,7 +12,7 @@ "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -32,7 +32,7 @@ 1, "block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -130,7 +130,7 @@ "time": "2019-11-02T15:04:50Z", "last_block_id": { "hash": "C12ECA3BF0B713AA466AB3F4BF8923A7E6CF6F43A10A244FF199B3265D324E84", - "parts": { + "part_set_header": { "total": 1, "hash": "75C4E395D74369EE3391853437E7F950FCBF9B4D996E8C0DA79206F956C15C7E" } @@ -150,7 +150,7 @@ 1, "block_id": { "hash": "A4F4DE05CA302866B95F7300A802A1DF796C3560E906DEEF806377A942EC087B", - "parts": { + "part_set_header": { "total": 1, "hash": "4853DA8E3F94BEF6D9D13A9B6F09A6CF62C4F737C7BD28FED602E77641054E9C" } diff --git a/light-client/tests/support/voting_power/1_empty_signatures.json b/light-client/tests/support/voting_power/1_empty_signatures.json index 1f3b7c229..7a1a78a5a 100644 --- a/light-client/tests/support/voting_power/1_empty_signatures.json +++ b/light-client/tests/support/voting_power/1_empty_signatures.json @@ -17,7 +17,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -37,7 +37,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } diff --git a/light-client/tests/support/voting_power/2_1_all_signatures_absent.json b/light-client/tests/support/voting_power/2_1_all_signatures_absent.json index 615d56959..7106e1a8c 100644 --- a/light-client/tests/support/voting_power/2_1_all_signatures_absent.json +++ b/light-client/tests/support/voting_power/2_1_all_signatures_absent.json @@ -17,7 +17,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -37,7 +37,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } diff --git a/light-client/tests/support/voting_power/2_2_all_signatures_nil.json b/light-client/tests/support/voting_power/2_2_all_signatures_nil.json index 055581848..aa07ff543 100644 --- a/light-client/tests/support/voting_power/2_2_all_signatures_nil.json +++ b/light-client/tests/support/voting_power/2_2_all_signatures_nil.json @@ -17,7 +17,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -37,7 +37,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } diff --git a/light-client/tests/support/voting_power/3_1_one_invalid_signature.json b/light-client/tests/support/voting_power/3_1_one_invalid_signature.json index 42cbbecb3..1f747081b 100644 --- a/light-client/tests/support/voting_power/3_1_one_invalid_signature.json +++ b/light-client/tests/support/voting_power/3_1_one_invalid_signature.json @@ -16,7 +16,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -36,7 +36,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } diff --git a/light-client/tests/support/voting_power/3_2_all_signatures_invalid.json b/light-client/tests/support/voting_power/3_2_all_signatures_invalid.json index f000d34fc..7b83a6182 100644 --- a/light-client/tests/support/voting_power/3_2_all_signatures_invalid.json +++ b/light-client/tests/support/voting_power/3_2_all_signatures_invalid.json @@ -16,7 +16,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -36,7 +36,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } diff --git a/light-client/tests/support/voting_power/7_signatures_from_diff_valset.json b/light-client/tests/support/voting_power/7_signatures_from_diff_valset.json index eb13c16cf..b930ce21b 100644 --- a/light-client/tests/support/voting_power/7_signatures_from_diff_valset.json +++ b/light-client/tests/support/voting_power/7_signatures_from_diff_valset.json @@ -17,7 +17,7 @@ "time": "2019-11-02T15:04:10Z", "last_block_id": { "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "parts": { + "part_set_header": { "total": 1, "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" } @@ -37,7 +37,7 @@ "round": 1, "block_id": { "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "parts": { + "part_set_header": { "total": 1, "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" } diff --git a/light-node/src/rpc.rs b/light-node/src/rpc.rs index ea282aefb..e1bc5da95 100644 --- a/light-node/src/rpc.rs +++ b/light-node/src/rpc.rs @@ -188,7 +188,7 @@ mod test { "time": "2019-11-02T15:04:00Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -208,7 +208,7 @@ mod test { "round": 1, "block_id": { "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "parts": { + "part_set_header": { "total": 1, "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" } diff --git a/proto/README.md b/proto/README.md index 591513190..cafcdaa76 100644 --- a/proto/README.md +++ b/proto/README.md @@ -5,7 +5,7 @@ [![Build Status][build-image]][build-link] [![Audit Status][audit-image]][audit-link] [![Apache 2.0 Licensed][license-image]][license-link] -![Rust 1.39+][rustc-image] +![Rust Stable][rustc-image] Crate for interacting with Tendermint [proto structs][tendermint-go-proto-link]. @@ -13,7 +13,7 @@ Crate for interacting with Tendermint [proto structs][tendermint-go-proto-link]. ## Requirements -- Rust 1.39+ +- The latest stable version of Rust ## License @@ -43,7 +43,7 @@ limitations under the License. [audit-link]: https://github.com/informalsystems/tendermint-rs/actions?query=workflow%3AAudit-Check [license-image]: https://img.shields.io/badge/license-Apache2.0-blue.svg [license-link]: https://github.com/informalsystems/tendermint-rs/blob/master/LICENSE -[rustc-image]: https://img.shields.io/badge/rustc-1.39+-blue.svg +[rustc-image]: https://img.shields.io/badge/rustc-stable-blue.svg [//]: # (general links) diff --git a/rpc-probe/Cargo.toml b/rpc-probe/Cargo.toml new file mode 100644 index 000000000..d5784912c --- /dev/null +++ b/rpc-probe/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "tendermint-rpc-probe" +version = "0.1.0" +authors = ["Thane Thomson "] +edition = "2018" +license = "Apache-2.0" +homepage = "https://www.tendermint.com/" +repository = "https://github.com/informalsystems/tendermint-rs" +readme = "README.md" + +description = """ + tendermint-rpc-probe allows us to probe a running Tendermint instance with + a given sequence of requests, capturing those requests and/or responses. + """ + +[package.metadata.docs.rs] +all-features = true + +[dependencies] +async-tungstenite = { version = "0.9", features = [ "tokio-runtime" ] } +futures = "0.3" +getrandom = "0.1" +serde = { version = "1", features = [ "derive" ] } +serde_json = "1" +structopt = "0.3" +thiserror = "1.0" +tokio = { version = "0.3", features = [ "full" ] } +tracing = "0.1" +uuid = "0.8" diff --git a/rpc-probe/README.md b/rpc-probe/README.md new file mode 100644 index 000000000..17f307c2a --- /dev/null +++ b/rpc-probe/README.md @@ -0,0 +1,11 @@ +# Tendermint RPC Probe + +The Tendermint RPC probe is an application that assists in testing the various +crates in this repository. It currently allows you to execute a quick probe of +a running [Tendermint] node, where a quick probe executes requests against all +of the [Tendermint RPC] endpoints (including subscriptions for different event +types), and saves all of the responses it gets as JSON files. These JSON files +can be used in testing in other crates. + +[Tendermint]: https://github.com/tendermint/tendermint +[Tendermint RPC]: https://docs.tendermint.com/master/rpc/ diff --git a/rpc-probe/src/error.rs b/rpc-probe/src/error.rs new file mode 100644 index 000000000..7836f8724 --- /dev/null +++ b/rpc-probe/src/error.rs @@ -0,0 +1,58 @@ +//! Errors relating to the RPC probe's operations. + +use thiserror::Error; +use tokio::sync::mpsc::error::SendError; +use tokio::task::JoinError; + +pub type Result = std::result::Result; + +#[derive(Debug, Clone, Error)] +pub enum Error { + #[error("an internal error occurred: {0}")] + InternalError(String), + + #[error("WebSocket connection error: {0}")] + WebSocketError(String), + + #[error("timed out: {0}")] + Timeout(String), + + #[error("malformed RPC response: {0}")] + MalformedResponse(String), + + #[error("{0} request failed: {1}")] + Failed(String, String), +} + +impl From for Error { + fn from(e: async_tungstenite::tungstenite::Error) -> Self { + Self::WebSocketError(e.to_string()) + } +} + +impl From for Error { + fn from(e: tokio::time::error::Elapsed) -> Self { + Self::Timeout(e.to_string()) + } +} + +impl From for Error { + fn from(e: serde_json::Error) -> Self { + Self::MalformedResponse(e.to_string()) + } +} + +impl From> for Error { + fn from(e: tokio::sync::mpsc::error::SendError) -> Self { + Self::InternalError(format!("failed to send to channel: {}", e)) + } +} + +impl From for Error { + fn from(e: tokio::task::JoinError) -> Self { + Self::InternalError(format!( + "failed while waiting for async task to join: {}", + e + )) + } +} diff --git a/rpc-probe/src/main.rs b/rpc-probe/src/main.rs new file mode 100644 index 000000000..caab9168d --- /dev/null +++ b/rpc-probe/src/main.rs @@ -0,0 +1,41 @@ +mod error; +mod messages; +mod opts; +mod quick; +mod subscription; +mod websocket; + +use crate::opts::GeneralOptions; +use crate::quick::quick_probe; +use std::path::PathBuf; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +struct Opts { + #[structopt(flatten)] + general: GeneralOptions, + + #[structopt(subcommand)] + cmd: Command, +} + +#[derive(Debug, StructOpt)] +enum Command { + /// Perform a general-purpose quick probe of a Tendermint node. + /// + /// This assumes that the Tendermint node in question is running the + /// kvstore application. + /// + /// This will automatically try to execute every kind of request against + /// the given node, recording all of its responses. For a full list of + /// supported endpoints, please see https://docs.tendermint.com/master/rpc/ + Quick, +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + let opts = Opts::from_args(); + match opts.cmd { + Command::Quick => quick_probe(opts.general).await.map_err(Into::into), + } +} diff --git a/rpc-probe/src/messages.rs b/rpc-probe/src/messages.rs new file mode 100644 index 000000000..01fc95500 --- /dev/null +++ b/rpc-probe/src/messages.rs @@ -0,0 +1,25 @@ +//! Messages for interacting with the Tendermint RPC. + +use getrandom::getrandom; +use serde_json::json; + +pub fn request_wrapper(method: &str, params: serde_json::Value) -> serde_json::Value { + json!({ + "jsonrpc": "2.0", + "id": uuid_v4(), + "method": method, + "params": params, + }) +} + +fn uuid_v4() -> String { + let mut bytes = [0; 16]; + getrandom(&mut bytes).expect("RNG failure!"); + + let uuid = uuid::Builder::from_bytes(bytes) + .set_variant(uuid::Variant::RFC4122) + .set_version(uuid::Version::Random) + .build(); + + uuid.to_string() +} diff --git a/rpc-probe/src/opts.rs b/rpc-probe/src/opts.rs new file mode 100644 index 000000000..d61785887 --- /dev/null +++ b/rpc-probe/src/opts.rs @@ -0,0 +1,23 @@ +//! Options relating to probe execution. + +use std::path::PathBuf; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +pub struct GeneralOptions { + /// The address of the Tendermint node's WebSocket-based RPC endpoint. + #[structopt(default_value = "ws://127.0.0.1:26657/websocket", long)] + pub addr: String, + + /// The output path in which to store the received responses. + #[structopt(parse(from_os_str), short, long)] + pub output: PathBuf, + + /// Save responses within their original JSON-RPC wrappers. + #[structopt(long)] + pub save_wrapper: bool, + + /// Increase output logging verbosity. + #[structopt(short, long)] + pub verbose: bool, +} diff --git a/rpc-probe/src/quick.rs b/rpc-probe/src/quick.rs new file mode 100644 index 000000000..ea2f004bd --- /dev/null +++ b/rpc-probe/src/quick.rs @@ -0,0 +1,36 @@ +//! RPC quick probe-related functionality. + +use crate::error::Result; +use crate::messages::request_wrapper; +use crate::opts::GeneralOptions; +use crate::websocket::WebSocketClient; +use serde_json::json; +use tracing::info; + +/// Execute a quick probe against a live Tendermint node using the given +/// options. +/// +/// This assumes that the given Tendermint node is running the `kvstore` +/// application. +pub async fn quick_probe(opts: GeneralOptions) -> Result<()> { + info!( + "Connecting to Tendermint node WebSocket RPC endpoint: {}", + opts.addr + ); + let (mut client, driver) = WebSocketClient::new(&opts.addr).await?; + let driver_handle = tokio::spawn(async move { driver.run().await }); + + let abci_info = client + .request(request_wrapper("abci_info", json!({}))) + .await?; + info!( + "Received ABCI info: {}", + serde_json::to_string_pretty(&abci_info).unwrap() + ); + + info!("Closing RPC connection"); + client.close().await?; + driver_handle.await??; + info!("Connection closed"); + Ok(()) +} diff --git a/rpc-probe/src/subscription.rs b/rpc-probe/src/subscription.rs new file mode 100644 index 000000000..2ef34eaed --- /dev/null +++ b/rpc-probe/src/subscription.rs @@ -0,0 +1,10 @@ +//! Subscription-related functionality for the WebSocket-based client. + +use crate::error::Result; +use tokio::sync::mpsc; + +/// We receive events (serialized JSON-RPC responses) via a subscription. +pub type SubscriptionRx = mpsc::UnboundedReceiver>; + +/// The sending end of a subscription channel. +pub type SubscriptionTx = mpsc::UnboundedSender>; diff --git a/rpc-probe/src/websocket.rs b/rpc-probe/src/websocket.rs new file mode 100644 index 000000000..f0eeb1319 --- /dev/null +++ b/rpc-probe/src/websocket.rs @@ -0,0 +1,389 @@ +//! WebSocket client for interacting with a remote Tendermint node. +//! +//! We purposefully do not use the WebSocket client provided by the +//! `tendermint-rpc` crate because we need to record the raw JSON-RPC responses +//! from the remote endpoint. The `tendermint-rpc` client does not expose these +//! raw responses. + +use crate::error::{Error, Result}; +use crate::subscription::{SubscriptionRx, SubscriptionTx}; +use async_tungstenite::tokio::{connect_async, ConnectStream}; +use async_tungstenite::tungstenite::protocol::frame::coding::CloseCode; +use async_tungstenite::tungstenite::protocol::CloseFrame; +use async_tungstenite::tungstenite::Message; +use async_tungstenite::WebSocketStream; +use futures::{SinkExt, StreamExt}; +use serde_json::json; +use std::borrow::Cow; +use std::collections::HashMap; +use tokio::sync::mpsc; +use tracing::{debug, error}; + +#[derive(Debug, Clone)] +pub struct WebSocketClient { + cmd_tx: mpsc::UnboundedSender, +} + +impl WebSocketClient { + pub async fn new(url: &str) -> Result<(Self, WebSocketClientDriver)> { + let (stream, _response) = connect_async(url).await?; + let (cmd_tx, cmd_rx) = mpsc::unbounded_channel(); + Ok(( + WebSocketClient { cmd_tx }, + WebSocketClientDriver::new(stream, cmd_rx), + )) + } + + pub async fn request(&mut self, wrapper: serde_json::Value) -> Result { + let (response_tx, mut response_rx) = mpsc::unbounded_channel(); + self.send_cmd(DriverCommand::Request { + wrapper, + response_tx, + }) + .await?; + response_rx.recv().await.ok_or_else(|| { + Error::InternalError("internal channel communication problem".to_string()) + })? + } + + pub async fn subscribe(&mut self, id: String, query: String) -> Result { + let (subscription_tx, subscription_rx) = mpsc::unbounded_channel(); + let (response_tx, mut response_rx) = mpsc::unbounded_channel(); + self.send_cmd(DriverCommand::Subscribe { + id, + query, + subscription_tx, + response_tx, + }) + .await?; + let _ = response_rx.recv().await.ok_or_else(|| { + Error::InternalError("internal channel communication problem".to_string()) + })?; + Ok(subscription_rx) + } + + pub async fn close(&mut self) -> Result<()> { + self.send_cmd(DriverCommand::Terminate).await + } + + async fn send_cmd(&mut self, cmd: DriverCommand) -> Result<()> { + self.cmd_tx.send(cmd).map_err(|e| { + Error::InternalError( + "WebSocket driver channel receiving end closed unexpectedly".to_string(), + ) + }) + } +} + +type JsonResultTx = mpsc::UnboundedSender>; +type DriverCommandTx = mpsc::UnboundedSender; +type DriverCommandRx = mpsc::UnboundedReceiver; + +#[derive(Debug, Clone)] +enum DriverCommand { + Subscribe { + id: String, + query: String, + subscription_tx: SubscriptionTx, + response_tx: JsonResultTx, + }, + Request { + wrapper: serde_json::Value, + response_tx: JsonResultTx, + }, + Terminate, +} + +#[derive(Debug)] +pub struct WebSocketClientDriver { + stream: WebSocketStream, + cmd_rx: DriverCommandRx, + subscribers: HashMap>, + pending_commands: HashMap, +} + +impl WebSocketClientDriver { + fn new(stream: WebSocketStream, cmd_rx: DriverCommandRx) -> Self { + Self { + stream, + cmd_rx, + subscribers: HashMap::new(), + pending_commands: HashMap::new(), + } + } + + pub async fn run(mut self) -> Result<()> { + loop { + tokio::select! { + Some(res) = self.stream.next() => match res { + Ok(msg) => self.handle_incoming_msg(msg).await?, + Err(e) => return Err( + Error::WebSocketError( + format!("failed to read from WebSocket connection: {}", e), + ), + ), + }, + Some(cmd) = self.cmd_rx.recv() => match cmd { + DriverCommand::Subscribe { + id, + query, + subscription_tx, + response_tx, + } => self.subscribe(id, query, subscription_tx, response_tx).await?, + DriverCommand::Request { + wrapper, + response_tx, + } => self.request(wrapper, response_tx).await?, + DriverCommand::Terminate => return self.close().await, + }, + } + } + } + + async fn send_msg(&mut self, msg: Message) -> Result<()> { + self.stream.send(msg).await.map_err(|e| { + Error::WebSocketError(format!("failed to write to WebSocket connection: {}", e)) + }) + } + + async fn send_json(&mut self, req: &serde_json::Value) -> Result<()> { + self.send_msg(Message::Text(serde_json::to_string(req).unwrap())) + .await + } + + async fn handle_incoming_msg(&mut self, msg: Message) -> Result<()> { + match msg { + Message::Text(s) => self.handle_text_msg(s), + Message::Ping(v) => self.pong(v).await, + _ => Ok(()), + } + } + + fn handle_text_msg(&mut self, msg: String) -> Result<()> { + debug!("Received incoming text message: {}", msg); + + let json_msg = serde_json::from_str::(&msg)?; + let id = json_msg.get("id").ok_or_else(|| { + Error::MalformedResponse(format!("incoming message has no \"id\" field: {}", msg)) + })?; + + // Check if we recognize this ID as a response to an earlier request + if id.is_string() { + let id_str = id.as_str().unwrap(); + if self.pending_commands.contains_key(id_str) { + return self.confirm_pending_command(id_str.to_string(), json_msg); + } + } + + // If we don't recognize the ID of the incoming message, it's most + // likely an event. + self.handle_event(json_msg) + } + + fn handle_event(&mut self, ev: serde_json::Value) -> Result<()> { + let result = match ev.get("result") { + Some(p) => p, + None => { + error!("Failed to parse incoming message as an event: no \"result\" field"); + return Ok(()); + } + }; + let query = match result.get("query").unwrap().as_str() { + Some(q) => q.to_string(), + None => { + error!("Failed to parse incoming message as an event: cannot interpret \"query\" field as a string"); + return Ok(()); + } + }; + self.publish_event(query, ev) + } + + fn publish_event(&mut self, query: String, ev: serde_json::Value) -> Result<()> { + let subs_for_query = match self.subscribers.get_mut(&query) { + Some(s) => s, + None => return Ok(()), + }; + let mut disconnected = Vec::new(); + for (subs_id, mut subs_tx) in subs_for_query { + if let Err(e) = subs_tx.send(Ok(ev.clone())) { + error!( + "Disconnecting subscription with ID {} due to channel send failure: {}", + subs_id, e + ); + disconnected.push(subs_id.clone()); + } + } + let subs_for_query = self.subscribers.get_mut(&query).unwrap(); + for subs_id in disconnected { + subs_for_query.remove(&subs_id); + } + Ok(()) + } + + fn confirm_pending_command(&mut self, id: String, wrapper: serde_json::Value) -> Result<()> { + let pending_command = self.pending_commands.remove(&id).unwrap(); + match pending_command { + DriverCommand::Subscribe { + id, + query, + subscription_tx, + mut response_tx, + } => { + self.confirm_pending_subscription(id, wrapper, query, subscription_tx, response_tx) + } + DriverCommand::Request { + wrapper: outgoing_wrapper, + response_tx, + } => { + let method = outgoing_wrapper + .get("method") + .unwrap() + .as_str() + .unwrap() + .to_string(); + self.confirm_pending_request(method, wrapper, response_tx) + } + _ => panic!("Unexpected pending command type: {:?}", pending_command), + } + } + + fn confirm_pending_subscription( + &mut self, + id: String, + wrapper: serde_json::Value, + query: String, + subscription_tx: SubscriptionTx, + response_tx: JsonResultTx, + ) -> Result<()> { + if let Some(e) = wrapper.get("error") { + let _ = response_tx.send(Err(Error::Failed( + "subscribe".to_string(), + serde_json::to_string_pretty(e).unwrap(), + )))?; + return Ok(()); + } + if let Some(r) = wrapper.get("result") { + return self.add_subscriber(id, query, subscription_tx, response_tx, r.clone()); + } + error!("Missing result and error fields in wrapper response"); + Ok(()) + } + + fn add_subscriber( + &mut self, + id: String, + query: String, + subscription_tx: SubscriptionTx, + response_tx: JsonResultTx, + response: serde_json::Value, + ) -> Result<()> { + let subs_for_query = match self.subscribers.get_mut(&query) { + Some(s) => s, + None => { + self.subscribers.insert(query.clone(), HashMap::new()); + self.subscribers.get_mut(&query).unwrap() + } + }; + subs_for_query.insert(id, subscription_tx); + let _ = response_tx.send(Ok(response))?; + Ok(()) + } + + fn confirm_pending_request( + &mut self, + method: String, + wrapper: serde_json::Value, + response_tx: JsonResultTx, + ) -> Result<()> { + if let Some(e) = wrapper.get("error") { + let _ = response_tx.send(Err(Error::Failed( + method, + serde_json::to_string_pretty(e).unwrap(), + )))?; + return Ok(()); + } + if let Some(r) = wrapper.get("result") { + let _ = response_tx.send(Ok(r.clone()))?; + return Ok(()); + } + Ok(()) + } + + async fn pong(&mut self, v: Vec) -> Result<()> { + self.send_msg(Message::Pong(v)).await + } + + async fn subscribe( + &mut self, + id: String, + query: String, + subscription_tx: JsonResultTx, + response_tx: JsonResultTx, + ) -> Result<()> { + // First check if we already have a subscription for this query + if self.subscribers.contains_key(&query) { + // There's no need to go to the effort of sending a subscription + // request - confirm the subscription immediately + return self.add_subscriber( + id, + query, + subscription_tx, + response_tx, + // Send back an empty result object + serde_json::Value::Object(serde_json::Map::new()), + ); + } + + let req = json!({ + "id": id, + "jsonrpc": "2.0", + "method": "subscribe", + "params": { + "query": query, + } + }); + self.send_json(&req).await?; + self.pending_commands.insert( + id.clone(), + DriverCommand::Subscribe { + id, + query, + subscription_tx, + response_tx, + }, + ); + Ok(()) + } + + async fn request( + &mut self, + wrapper: serde_json::Value, + response_tx: JsonResultTx, + ) -> Result<()> { + let id = wrapper.get("id").unwrap().as_str().unwrap().to_owned(); + self.send_json(&wrapper).await?; + self.pending_commands.insert( + id.clone(), + DriverCommand::Request { + wrapper, + response_tx, + }, + ); + Ok(()) + } + + async fn close(mut self) -> Result<()> { + self.send_msg(Message::Close(Some(CloseFrame { + code: CloseCode::Normal, + reason: Cow::from("client closed WebSocket connection"), + }))) + .await?; + + while let Some(res) = self.stream.next().await { + if res.is_err() { + return Ok(()); + } + } + Ok(()) + } +} diff --git a/rpc/tests/support/block.json b/rpc/tests/support/block.json index 6ae8fddd5..bbc83ca42 100644 --- a/rpc/tests/support/block.json +++ b/rpc/tests/support/block.json @@ -4,7 +4,7 @@ "result": { "block_id": { "hash": "4FFD15F274758E474898498A191EB8CA6FC6C466576255DA132908A12AC1674C", - "parts": { + "part_set_header": { "total": 1, "hash": "BBA710736635FA20CDB4F48732563869E90871D31FE9E7DE3D900CD4334D8775" } @@ -20,7 +20,7 @@ "time": "2020-03-15T16:57:08.151Z", "last_block_id": { "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "parts": { + "part_set_header": { "total": 1, "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" } @@ -46,7 +46,7 @@ "round": 0, "block_id": { "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "parts": { + "part_set_header": { "total": 1, "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" } diff --git a/rpc/tests/support/block_empty_block_id.json b/rpc/tests/support/block_empty_block_id.json index d766a2748..f0396d701 100644 --- a/rpc/tests/support/block_empty_block_id.json +++ b/rpc/tests/support/block_empty_block_id.json @@ -5,7 +5,7 @@ "block_meta": { "block_id": { "hash": "17E077714CE817C0DB3118D21EA060B2A16D9F07CB08AB603292F797FFD7F361", - "parts": { + "part_set_header": { "total": "1", "hash": "1ED5B68A21D82D091C25D535F52C2D47419162618245C60D69B162A366F97A45" } @@ -22,7 +22,7 @@ "total_txs": "0", "last_block_id": { "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "parts": { + "part_set_header": { "total": "1", "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" } @@ -51,7 +51,7 @@ "total_txs": "0", "last_block_id": { "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "parts": { + "part_set_header": { "total": "1", "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" } @@ -75,7 +75,7 @@ "last_commit": { "block_id": { "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "parts": { + "part_set_header": { "total": "1", "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" } @@ -87,7 +87,7 @@ "round": "0", "block_id": { "hash": "", - "parts": { + "part_set_header": { "total": "0", "hash": "" } @@ -103,7 +103,7 @@ "round": "0", "block_id": { "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "parts": { + "part_set_header": { "total": "1", "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" } diff --git a/rpc/tests/support/block_with_evidences.json b/rpc/tests/support/block_with_evidences.json index efa9f7050..4ec62a39f 100644 --- a/rpc/tests/support/block_with_evidences.json +++ b/rpc/tests/support/block_with_evidences.json @@ -4,7 +4,7 @@ "result": { "block_id": { "hash": "649A276C615AD3B922A620ADBE5484DE9D87E2154469AE8F90DC40769350A52B", - "parts": { + "part_set_header": { "total": 1, "hash": "D2A0D52E67AAD464122612577AD80049D785BC4DB9D0A992FC143C276B2B65DB" } @@ -20,7 +20,7 @@ "time": "2020-04-28T15:48:20.640286Z", "last_block_id": { "hash": "B5F14F439A73EBDF8EF5222C957CFE6E15C95EE825C8B22E423464E675278C47", - "parts": { + "part_set_header": { "total": 1, "hash": "C5A0FADCFFF5A69D088DE7BB6836C9C5DB7955B549509E548C296D2C099D2D5D" } @@ -49,7 +49,7 @@ "round": "0", "block_id": { "hash": "86EB9FCF52C4A81F2445157B0BF7AFBB107DF156D0853F38A019200F69465883", - "parts": { + "part_set_header": { "total": 1, "hash": "B8F7219F14CB9EAA167A4E56FC8D2D4F3545C93A04357B33C34121C801D7E4F2" } @@ -65,7 +65,7 @@ "round": "0", "block_id": { "hash": "B5F14F439A73EBDF8EF5222C957CFE6E15C95EE825C8B22E423464E675278C47", - "parts": { + "part_set_header": { "total": 1, "hash": "C5A0FADCFFF5A69D088DE7BB6836C9C5DB7955B549509E548C296D2C099D2D5D" } @@ -84,7 +84,7 @@ "round": 0, "block_id": { "hash": "B5F14F439A73EBDF8EF5222C957CFE6E15C95EE825C8B22E423464E675278C47", - "parts": { + "part_set_header": { "total": 1, "hash": "C5A0FADCFFF5A69D088DE7BB6836C9C5DB7955B549509E548C296D2C099D2D5D" } diff --git a/rpc/tests/support/blockchain.json b/rpc/tests/support/blockchain.json index e081e30d1..08823a3ea 100644 --- a/rpc/tests/support/blockchain.json +++ b/rpc/tests/support/blockchain.json @@ -7,7 +7,7 @@ { "block_id": { "hash": "0BC81BF032E1251D2BF45FB7FAD70BA1333080FD6DC52FE8A18A09C3859DB99D", - "parts": { + "part_set_header": { "total": 1, "hash": "5E97E2B494BF58C02BE385AE80F08A7DDBFAE922ED0363C892D17DB549DAF4AA" } @@ -24,7 +24,7 @@ "total_txs": "2", "last_block_id": { "hash": "B6F22387BD2A7A012BFF88ACE131E871660A8D7CAD756D22B911FA408C9B9FB0", - "parts": { + "part_set_header": { "total": 1, "hash": "99043B16957F2BFF5C1A24B290AD44CBCD95B0DC164E18063FA566240B7B3AFC" } @@ -43,7 +43,7 @@ { "block_id": { "hash": "B6F22387BD2A7A012BFF88ACE131E871660A8D7CAD756D22B911FA408C9B9FB0", - "parts": { + "part_set_header": { "total": 1, "hash": "99043B16957F2BFF5C1A24B290AD44CBCD95B0DC164E18063FA566240B7B3AFC" } @@ -60,7 +60,7 @@ "total_txs": "1", "last_block_id": { "hash": "C1D3D762700AD5CDDCB724A55CA239B92FC934C4AD163FFDCAC476A42A97320A", - "parts": { + "part_set_header": { "total": 1, "hash": "C5FAA5B7738D7010CA712FBC2B2355605D388990DE0FDE731A854FE279325C1A" } @@ -79,7 +79,7 @@ { "block_id": { "hash": "C1D3D762700AD5CDDCB724A55CA239B92FC934C4AD163FFDCAC476A42A97320A", - "parts": { + "part_set_header": { "total": 1, "hash": "C5FAA5B7738D7010CA712FBC2B2355605D388990DE0FDE731A854FE279325C1A" } @@ -96,7 +96,7 @@ "total_txs": "1", "last_block_id": { "hash": "954B81C860ABF508F272C2A402AC81BFBBDA8BA4B2A627A60730FA36915C53AF", - "parts": { + "part_set_header": { "total": 1, "hash": "842ADFA93717FDBE551BDAB96BED2E50D67FCA216421C97DE1A47BC61FF50E58" } @@ -115,7 +115,7 @@ { "block_id": { "hash": "954B81C860ABF508F272C2A402AC81BFBBDA8BA4B2A627A60730FA36915C53AF", - "parts": { + "part_set_header": { "total": 1, "hash": "842ADFA93717FDBE551BDAB96BED2E50D67FCA216421C97DE1A47BC61FF50E58" } @@ -132,7 +132,7 @@ "total_txs": "1", "last_block_id": { "hash": "A5873B845F3CD93203D8E1306F756F3BD93E1E3828A2343FD9B898D4DD66BD55", - "parts": { + "part_set_header": { "total": 1, "hash": "3E5A9C4ACC1C217DAEBD68E29B99B013603D2902BF974F9695FCA08E1E4E8867" } @@ -151,7 +151,7 @@ { "block_id": { "hash": "A5873B845F3CD93203D8E1306F756F3BD93E1E3828A2343FD9B898D4DD66BD55", - "parts": { + "part_set_header": { "total": 1, "hash": "3E5A9C4ACC1C217DAEBD68E29B99B013603D2902BF974F9695FCA08E1E4E8867" } @@ -168,7 +168,7 @@ "total_txs": "0", "last_block_id": { "hash": "5EE242F6FF4EF8D2BD2EBD7428100848438E4D3FD0C9BF01109ACF2338352AD2", - "parts": { + "part_set_header": { "total": 1, "hash": "21ED492846DFF04D65E445A56C38AAAE6151F0099B09C9FC9498EF154C46A8AD" } @@ -187,7 +187,7 @@ { "block_id": { "hash": "5EE242F6FF4EF8D2BD2EBD7428100848438E4D3FD0C9BF01109ACF2338352AD2", - "parts": { + "part_set_header": { "total": 1, "hash": "21ED492846DFF04D65E445A56C38AAAE6151F0099B09C9FC9498EF154C46A8AD" } @@ -204,7 +204,7 @@ "total_txs": "0", "last_block_id": { "hash": "C764D3F013CAFBF9CDCCB718DAFDF15C1B23C3D8ADC5EE811C6CC45E0711F04B", - "parts": { + "part_set_header": { "total": 1, "hash": "2B51E708767543A566AA1FDBC279E06FB59C3F7658D2389DCAF389A95242E623" } @@ -223,7 +223,7 @@ { "block_id": { "hash": "C764D3F013CAFBF9CDCCB718DAFDF15C1B23C3D8ADC5EE811C6CC45E0711F04B", - "parts": { + "part_set_header": { "total": 1, "hash": "2B51E708767543A566AA1FDBC279E06FB59C3F7658D2389DCAF389A95242E623" } @@ -240,7 +240,7 @@ "total_txs": "0", "last_block_id": { "hash": "9E0DF66B93354C474987ED69ADEDD5B2B1DC557A71A391B002E8BEE558C397F1", - "parts": { + "part_set_header": { "total": 1, "hash": "529D1FFB543793F8B999AC4E801C8A14CA2DC6E873DC7759945C4B960CAC77DC" } @@ -259,7 +259,7 @@ { "block_id": { "hash": "9E0DF66B93354C474987ED69ADEDD5B2B1DC557A71A391B002E8BEE558C397F1", - "parts": { + "part_set_header": { "total": 1, "hash": "529D1FFB543793F8B999AC4E801C8A14CA2DC6E873DC7759945C4B960CAC77DC" } @@ -276,7 +276,7 @@ "total_txs": "0", "last_block_id": { "hash": "F7888681D07FB5AEAF416D00C22E06CFD9A25DBD65519E97823F979206163CF1", - "parts": { + "part_set_header": { "total": 1, "hash": "3D4BB2D494CF343011AF2ADE01D6CC88BE6FE26CE5756840931507554BF64F0B" } @@ -295,7 +295,7 @@ { "block_id": { "hash": "F7888681D07FB5AEAF416D00C22E06CFD9A25DBD65519E97823F979206163CF1", - "parts": { + "part_set_header": { "total": 1, "hash": "3D4BB2D494CF343011AF2ADE01D6CC88BE6FE26CE5756840931507554BF64F0B" } @@ -312,7 +312,7 @@ "total_txs": "0", "last_block_id": { "hash": "0D9BB9FA6EB9D64E80CF920EB917B1124F298B12C92BE7FD5328564C6D85D087", - "parts": { + "part_set_header": { "total": 1, "hash": "E110DA5AEC7F6D8285F2F8A5CE732D8995E6B35C7B685BA819D3CBD903CB2330" } @@ -331,7 +331,7 @@ { "block_id": { "hash": "0D9BB9FA6EB9D64E80CF920EB917B1124F298B12C92BE7FD5328564C6D85D087", - "parts": { + "part_set_header": { "total": 1, "hash": "E110DA5AEC7F6D8285F2F8A5CE732D8995E6B35C7B685BA819D3CBD903CB2330" } @@ -348,7 +348,7 @@ "total_txs": "0", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } diff --git a/rpc/tests/support/commit.json b/rpc/tests/support/commit.json index 1f0e55472..659678325 100644 --- a/rpc/tests/support/commit.json +++ b/rpc/tests/support/commit.json @@ -13,7 +13,7 @@ "time": "2020-10-01T13:39:16.446728262Z", "last_block_id": { "hash": "F039C21B34127537B56D653A108ECC847EA0178E65FE69476D2F97F044A69E1C", - "parts": { + "part_set_header": { "total": 1, "hash": "D31DCBFF294D3CEFA57EAEF7D411350FD6D700A1E9ED4F79711B5CC83F5BE5BC" } @@ -33,7 +33,7 @@ "round": 0, "block_id": { "hash": "EDEF6D800E431D29A2EEC727408F24540104449246A28A71AE335AED8E892D1E", - "parts": { + "part_set_header": { "total": 1, "hash": "1AA0DDA243CCC5FA0DC0C958DE5CBC12C1B91B9472BE2DF7C1D797C4BBA87436" } diff --git a/rpc/tests/support/commit_1.json b/rpc/tests/support/commit_1.json index 96ebce12b..03971cb74 100644 --- a/rpc/tests/support/commit_1.json +++ b/rpc/tests/support/commit_1.json @@ -13,7 +13,7 @@ "time": "2020-09-30T15:53:38.3317756Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -33,7 +33,7 @@ "round": 0, "block_id": { "hash": "14FE58148FBF37743B360D1B92BB8528ADA50E22BA219DA417B16379EEE306D3", - "parts": { + "part_set_header": { "total": 1, "hash": "F45A469B007676CC8A65DEB6C194D04A9166F4690F36ECA7C71E730E2F1D916E" } diff --git a/rpc/tests/support/event_new_block_1.json b/rpc/tests/support/event_new_block_1.json index e79d9179a..cf227f5ee 100644 --- a/rpc/tests/support/event_new_block_1.json +++ b/rpc/tests/support/event_new_block_1.json @@ -17,7 +17,7 @@ "time": "2020-09-14T16:33:54.21191421Z", "last_block_id": { "hash": "D3B2CC7EDAFF87433A5DBCDCDF4077A56AACDE3606034262B0CDB120F62EB40B", - "parts": { + "part_set_header": { "total": 1, "hash": "3AB411EAFE9A3B7AC013B0214990E5653112A39909289E3EA9211F07B8CD6EED" } @@ -43,7 +43,7 @@ "round": 0, "block_id": { "hash": "D3B2CC7EDAFF87433A5DBCDCDF4077A56AACDE3606034262B0CDB120F62EB40B", - "parts": { + "part_set_header": { "total": 1, "hash": "3AB411EAFE9A3B7AC013B0214990E5653112A39909289E3EA9211F07B8CD6EED" } diff --git a/rpc/tests/support/event_new_block_2.json b/rpc/tests/support/event_new_block_2.json index 82103c9ac..4eb94ded2 100644 --- a/rpc/tests/support/event_new_block_2.json +++ b/rpc/tests/support/event_new_block_2.json @@ -17,7 +17,7 @@ "time": "2020-09-14T16:33:55.21191421Z", "last_block_id": { "hash": "F30A71F2409FB15AACAEDB6CC122DFA2525BEE9CAE521721B06BFDCA291B8D56", - "parts": { + "part_set_header": { "total": 1, "hash": "A514FF7C92EBDF19F8D9B953E4B4BAC8627A50350048BD885D22747CE7F5A01C" } @@ -43,7 +43,7 @@ "round": 0, "block_id": { "hash": "F30A71F2409FB15AACAEDB6CC122DFA2525BEE9CAE521721B06BFDCA291B8D56", - "parts": { + "part_set_header": { "total": 1, "hash": "A514FF7C92EBDF19F8D9B953E4B4BAC8627A50350048BD885D22747CE7F5A01C" } diff --git a/rpc/tests/support/event_new_block_3.json b/rpc/tests/support/event_new_block_3.json index 385b0b810..236449ee4 100644 --- a/rpc/tests/support/event_new_block_3.json +++ b/rpc/tests/support/event_new_block_3.json @@ -17,7 +17,7 @@ "time": "2020-09-14T16:33:56.21191421Z", "last_block_id": { "hash": "192C18392B93AE4C03F477C96D8B84C5390BB86E3E88662B336C9DE070ADF02F", - "parts": { + "part_set_header": { "total": 1, "hash": "ACD43137746F0AFF53A6EBCA7C8D03B80F9F96D5542E3679F65855A66FA76E2B" } @@ -43,7 +43,7 @@ "round": 0, "block_id": { "hash": "192C18392B93AE4C03F477C96D8B84C5390BB86E3E88662B336C9DE070ADF02F", - "parts": { + "part_set_header": { "total": 1, "hash": "ACD43137746F0AFF53A6EBCA7C8D03B80F9F96D5542E3679F65855A66FA76E2B" } diff --git a/rpc/tests/support/first_block.json b/rpc/tests/support/first_block.json index 34ae3582e..e450dbe25 100644 --- a/rpc/tests/support/first_block.json +++ b/rpc/tests/support/first_block.json @@ -4,7 +4,7 @@ "result": { "block_id": { "hash": "D00C415348A1FCA98A9F6E811804E69DE2C5865A2F057C275552C8F57B427052", - "parts": { + "part_set_header": { "total": 1, "hash": "5C67DA0F82C5D66C862808EFA9FEFA2FEF08F32DB5FE87EFF7B2C5A56F83AA07" } @@ -20,7 +20,7 @@ "time": "2020-03-15T16:56:30.934369Z", "last_block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } @@ -46,7 +46,7 @@ "round": 0, "block_id": { "hash": "", - "parts": { + "part_set_header": { "total": 0, "hash": "" } diff --git a/tendermint/src/block/id.rs b/tendermint/src/block/id.rs index 381182018..d9a1ee1a1 100644 --- a/tendermint/src/block/id.rs +++ b/tendermint/src/block/id.rs @@ -49,7 +49,7 @@ pub struct Id { /// PartSetHeader in protobuf is defined as never nil using the gogoproto /// annotations. This does not translate to Rust, but we can indicate this /// in the DomainType. - pub parts: PartSetHeader, + pub part_set_header: PartSetHeader, } impl DomainType for Id {} @@ -63,7 +63,7 @@ impl TryFrom for Id { } Ok(Self { hash: value.hash.try_into()?, - parts: value.part_set_header.unwrap().try_into()?, + part_set_header: value.part_set_header.unwrap().try_into()?, }) } } @@ -85,7 +85,7 @@ impl From for RawBlockId { } else { RawBlockId { hash: value.hash.into(), - part_set_header: Some(value.parts.into()), + part_set_header: Some(value.part_set_header.into()), } } } @@ -100,7 +100,7 @@ impl TryFrom for Id { } Ok(Self { hash: value.hash.try_into()?, - parts: value.part_set_header.unwrap().try_into()?, + part_set_header: value.part_set_header.unwrap().try_into()?, }) } } @@ -109,7 +109,7 @@ impl From for RawCanonicalBlockId { fn from(value: Id) -> Self { RawCanonicalBlockId { hash: value.hash.as_bytes().to_vec(), - part_set_header: Some(value.parts.into()), + part_set_header: Some(value.part_set_header.into()), } } } @@ -137,7 +137,7 @@ impl FromStr for Id { fn from_str(s: &str) -> Result { Ok(Self { hash: Hash::from_hex_upper(Algorithm::Sha256, s)?, - parts: PartSetHeader::default(), + part_set_header: PartSetHeader::default(), }) } } diff --git a/tendermint/src/proposal.rs b/tendermint/src/proposal.rs index 387017c91..bc62e457d 100644 --- a/tendermint/src/proposal.rs +++ b/tendermint/src/proposal.rs @@ -139,7 +139,7 @@ mod tests { "DEADBEEFDEADBEEFBAFBAFBAFBAFBAFADEADBEEFDEADBEEFBAFBAFBAFBAFBAFA", ) .unwrap(), - parts: Header { + part_set_header: Header { total: 65535, hash: Hash::from_hex_upper( Algorithm::Sha256, @@ -225,7 +225,7 @@ mod tests { "DEADBEEFDEADBEEFBAFBAFBAFBAFBAFADEADBEEFDEADBEEFBAFBAFBAFBAFBAFA", ) .unwrap(), - parts: Header { + part_set_header: Header { total: 65535, hash: Hash::from_hex_upper( Algorithm::Sha256, diff --git a/tendermint/src/serializers/custom.rs b/tendermint/src/serializers/custom.rs index e365189d0..e9341d29c 100644 --- a/tendermint/src/serializers/custom.rs +++ b/tendermint/src/serializers/custom.rs @@ -27,14 +27,14 @@ where D: Deserializer<'de>, { #[derive(Deserialize)] - struct Parts { + struct PartSetHeader { total: u32, hash: String, } #[derive(Deserialize)] struct BlockId { hash: String, - parts: Parts, + part_set_header: PartSetHeader, } if let Some(tmp_id) = >::deserialize(deserializer)? { if tmp_id.hash.is_empty() { @@ -43,9 +43,9 @@ where Ok(Some(block::Id { hash: Hash::from_str(&tmp_id.hash) .map_err(|err| D::Error::custom(format!("{}", err)))?, - parts: block::parts::Header { - total: tmp_id.parts.total, - hash: Hash::from_str(&tmp_id.parts.hash) + part_set_header: block::parts::Header { + total: tmp_id.part_set_header.total, + hash: Hash::from_str(&tmp_id.part_set_header.hash) .map_err(|err| D::Error::custom(format!("{}", err)))?, }, })) diff --git a/tendermint/src/vote/sign_vote.rs b/tendermint/src/vote/sign_vote.rs index 2ca8d753b..43001abb1 100644 --- a/tendermint/src/vote/sign_vote.rs +++ b/tendermint/src/vote/sign_vote.rs @@ -118,7 +118,7 @@ mod tests { timestamp: Some(dt.into()), block_id: Some(BlockId { hash: Hash::try_from(b"DEADBEEFDEADBEEFBAFBAFBAFBAFBAFA".to_vec()).unwrap(), - parts: Header { + part_set_header: Header { total: 1_000_000, hash: Hash::try_from(b"0022446688AACCEE1133557799BBDDFF".to_vec()).unwrap(), }, @@ -268,7 +268,7 @@ mod tests { hash: Hash::from_hex_upper(Algorithm::Sha256, "DEADBEEFDEADBEEFBAFBAFBAFBAFBAFA") .unwrap(), //Hash::new(Algorithm::Sha256, // b"hash".to_vec().as_slice()).unwrap(), - parts: Header { + part_set_header: Header { total: 1_000_000, hash: Hash::from_hex_upper( Algorithm::Sha256, @@ -334,7 +334,7 @@ mod tests { block_id: Some(BlockId { hash: Hash::from_hex_upper(Algorithm::Sha256, "DEADBEEFDEADBEEFBAFBAFBAFBAFBAFA") .unwrap(), - parts: Header { + part_set_header: Header { total: 1_000_000, hash: Hash::from_hex_upper( Algorithm::Sha256, diff --git a/tendermint/tests/support/serialization/block/header.json b/tendermint/tests/support/serialization/block/header.json index dbb1d5b92..389452968 100644 --- a/tendermint/tests/support/serialization/block/header.json +++ b/tendermint/tests/support/serialization/block/header.json @@ -10,7 +10,7 @@ "total_txs": "4", "last_block_id": { "hash": "42C70F10EF1835CED7248114514B4EF3D06F0D7FD24F6486E3315DEE310D305C", - "parts": { + "part_set_header": { "total": 1, "hash": "F51D1B8E6ED859CE23F6B0539E0101653ED4025B13DAA3E76FCC779D5FD96ABE" } diff --git a/tendermint/tests/support/serialization/block/header_with_known_hash.json b/tendermint/tests/support/serialization/block/header_with_known_hash.json index f9f4d1cae..4bdaeb4b9 100644 --- a/tendermint/tests/support/serialization/block/header_with_known_hash.json +++ b/tendermint/tests/support/serialization/block/header_with_known_hash.json @@ -8,7 +8,7 @@ "time": "2020-09-14T16:33:54.21191421Z", "last_block_id": { "hash": "D3B2CC7EDAFF87433A5DBCDCDF4077A56AACDE3606034262B0CDB120F62EB40B", - "parts": { + "part_set_header": { "total": 1, "hash": "3AB411EAFE9A3B7AC013B0214990E5653112A39909289E3EA9211F07B8CD6EED" } diff --git a/testgen/src/commit.rs b/testgen/src/commit.rs index cb133fa18..791f6421b 100644 --- a/testgen/src/commit.rs +++ b/testgen/src/commit.rs @@ -110,7 +110,7 @@ impl Generator for Commit { let block_header = header.generate()?; let block_id = block::Id { hash: block_header.hash(), - parts: PartSetHeader::default(), + part_set_header: PartSetHeader::default(), }; let votes = match &self.votes { None => self.clone().generate_default_votes().votes.unwrap(), diff --git a/testgen/src/vote.rs b/testgen/src/vote.rs index 9ab13aab1..1e8fceabc 100644 --- a/testgen/src/vote.rs +++ b/testgen/src/vote.rs @@ -85,7 +85,7 @@ impl Generator for Vote { let block_header = header.generate()?; let block_id = block::Id { hash: block_header.hash(), - parts: PartSetHeader::default(), + part_set_header: PartSetHeader::default(), }; let validator_index = match self.index { Some(i) => i, From 8fa7608e64d8337369b4a0fa27bfce2774ba2c70 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 23 Oct 2020 14:42:50 -0400 Subject: [PATCH 02/14] Fix tokio integration and logging Signed-off-by: Thane Thomson --- rpc-probe/Cargo.toml | 5 +++-- rpc-probe/src/main.rs | 8 ++++++++ rpc-probe/src/quick.rs | 2 +- rpc-probe/src/websocket.rs | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/rpc-probe/Cargo.toml b/rpc-probe/Cargo.toml index d5784912c..e2af69465 100644 --- a/rpc-probe/Cargo.toml +++ b/rpc-probe/Cargo.toml @@ -17,13 +17,14 @@ description = """ all-features = true [dependencies] -async-tungstenite = { version = "0.9", features = [ "tokio-runtime" ] } +async-tungstenite = { version = "0.10", features = [ "tokio-runtime" ] } futures = "0.3" getrandom = "0.1" +log = "0.4" serde = { version = "1", features = [ "derive" ] } serde_json = "1" +simple_logger = "1.11" structopt = "0.3" thiserror = "1.0" tokio = { version = "0.3", features = [ "full" ] } -tracing = "0.1" uuid = "0.8" diff --git a/rpc-probe/src/main.rs b/rpc-probe/src/main.rs index caab9168d..3c333d6b9 100644 --- a/rpc-probe/src/main.rs +++ b/rpc-probe/src/main.rs @@ -7,6 +7,8 @@ mod websocket; use crate::opts::GeneralOptions; use crate::quick::quick_probe; +use log::LevelFilter; +use simple_logger::SimpleLogger; use std::path::PathBuf; use structopt::StructOpt; @@ -35,6 +37,12 @@ enum Command { #[tokio::main] async fn main() -> Result<(), Box> { let opts = Opts::from_args(); + let log_level = if opts.general.verbose { + LevelFilter::Debug + } else { + LevelFilter::Info + }; + SimpleLogger::new().with_level(log_level).init().unwrap(); match opts.cmd { Command::Quick => quick_probe(opts.general).await.map_err(Into::into), } diff --git a/rpc-probe/src/quick.rs b/rpc-probe/src/quick.rs index ea2f004bd..fbd23d4ad 100644 --- a/rpc-probe/src/quick.rs +++ b/rpc-probe/src/quick.rs @@ -4,8 +4,8 @@ use crate::error::Result; use crate::messages::request_wrapper; use crate::opts::GeneralOptions; use crate::websocket::WebSocketClient; +use log::info; use serde_json::json; -use tracing::info; /// Execute a quick probe against a live Tendermint node using the given /// options. diff --git a/rpc-probe/src/websocket.rs b/rpc-probe/src/websocket.rs index f0eeb1319..c2ee59999 100644 --- a/rpc-probe/src/websocket.rs +++ b/rpc-probe/src/websocket.rs @@ -13,11 +13,11 @@ use async_tungstenite::tungstenite::protocol::CloseFrame; use async_tungstenite::tungstenite::Message; use async_tungstenite::WebSocketStream; use futures::{SinkExt, StreamExt}; +use log::{debug, error}; use serde_json::json; use std::borrow::Cow; use std::collections::HashMap; use tokio::sync::mpsc; -use tracing::{debug, error}; #[derive(Debug, Clone)] pub struct WebSocketClient { From d7ecdb5f76cbb3a82baece50c8e0f8b630a3b438 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 23 Oct 2020 14:44:46 -0400 Subject: [PATCH 03/14] Return response instead of result Signed-off-by: Thane Thomson --- rpc-probe/src/websocket.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/rpc-probe/src/websocket.rs b/rpc-probe/src/websocket.rs index c2ee59999..c28be2794 100644 --- a/rpc-probe/src/websocket.rs +++ b/rpc-probe/src/websocket.rs @@ -302,9 +302,12 @@ impl WebSocketClientDriver { )))?; return Ok(()); } - if let Some(r) = wrapper.get("result") { - let _ = response_tx.send(Ok(r.clone()))?; - return Ok(()); + if let Some(result) = wrapper.get("result") { + if let Some(response) = result.get("response") { + let _ = response_tx.send(Ok(response.clone()))?; + return Ok(()); + } + error!("Missing \"response\" field in RPC response"); } Ok(()) } From 8dc0de19512a34af69cb78836169f9e5b99a7bf6 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 30 Oct 2020 17:36:36 -0400 Subject: [PATCH 04/14] Add first working version with docs and convenience script Signed-off-by: Thane Thomson --- .gitignore | 3 + rpc-probe/Cargo.toml | 1 + rpc-probe/README.md | 84 ++++++++++++ rpc-probe/run-with-docker.sh | 28 ++++ rpc-probe/src/error.rs | 18 ++- rpc-probe/src/main.rs | 58 +++++---- rpc-probe/src/messages.rs | 25 ---- rpc-probe/src/opts.rs | 18 +-- rpc-probe/src/plan.rs | 246 +++++++++++++++++++++++++++++++++++ rpc-probe/src/quick.rs | 205 ++++++++++++++++++++++++----- rpc-probe/src/request.rs | 47 +++++++ rpc-probe/src/utils.rs | 25 ++++ rpc-probe/src/websocket.rs | 39 ++---- 13 files changed, 672 insertions(+), 125 deletions(-) create mode 100755 rpc-probe/run-with-docker.sh delete mode 100644 rpc-probe/src/messages.rs create mode 100644 rpc-probe/src/plan.rs create mode 100644 rpc-probe/src/request.rs create mode 100644 rpc-probe/src/utils.rs diff --git a/.gitignore b/.gitignore index bcb0a5c55..42a22f676 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ Cargo.lock # These are log files emitted by model-based tests **/*.log + +# RPC probe results +/rpc-probe/probe-results/ diff --git a/rpc-probe/Cargo.toml b/rpc-probe/Cargo.toml index e2af69465..6eb8d7902 100644 --- a/rpc-probe/Cargo.toml +++ b/rpc-probe/Cargo.toml @@ -25,6 +25,7 @@ serde = { version = "1", features = [ "derive" ] } serde_json = "1" simple_logger = "1.11" structopt = "0.3" +subtle-encoding = "0.5.1" thiserror = "1.0" tokio = { version = "0.3", features = [ "full" ] } uuid = "0.8" diff --git a/rpc-probe/README.md b/rpc-probe/README.md index 17f307c2a..d87882f29 100644 --- a/rpc-probe/README.md +++ b/rpc-probe/README.md @@ -7,5 +7,89 @@ of the [Tendermint RPC] endpoints (including subscriptions for different event types), and saves all of the responses it gets as JSON files. These JSON files can be used in testing in other crates. +## Requirements + +To run this probe locally, you will need: + +* The Rust toolchain (latest stable) +* Docker + +## Usage (with Docker) + +From the root of the tendermint.rs repository: + +```bash +cd rpc-probe +./run-with-docker.sh +``` + +This will: + +1. Build the `tendermint-rpc-probe` executable +2. Pull the latest version of the Tendermint Docker image +3. Initialize and run a Tendermint node with the `kvstore` app in the + background. (This node exposes a WebSocket endpoint at + `ws://127.0.0.1:26657/websocket`) +4. Run `tendermint-rpc-probe` against the running Tendermint node. +5. Terminate the Docker image. + +To run a specific version of Tendermint, simply: + +```bash +TENDERMINT_TAG="v0.33.8" ./run-with-docker.sh +``` + +## Usage (without Docker) + +Simply run: + +```bash +cargo run -- --help +``` + +to see what options are available to run the probe. + +For example: + +```bash +# Executes the probe with all default options (i.e. against a Tendermint node +# listening on 127.0.0.1:26657) +cargo run + +# Customize the address +cargo run -- --addr ws://192.168.1.15:26657/websocket + +# Customize how long to wait before each request (in milliseconds) +# Defaults to 1000ms +cargo run -- --request-wait 100 +``` + +## Output + +By default, all request and response JSON-RPC messages will be written into a +folder called `probe-results` in the `rpc-probe` directory. + +For example, the `probe-results/responses/abci_info.json` file (returned by the +[`abci_info`] RPC request) could look something like: + +```json +{ + "id": "8944f639-7da0-4595-ac5e-3e432079f510", + "jsonrpc": "2.0", + "result": { + "response": { + "app_version": "1", + "data": "{\"size\":0}", + "last_block_app_hash": "AAAAAAAAAAA=", + "last_block_height": "13", + "version": "0.17.0" + } + } +} +``` + +The full JSON-RPC wrapper is saved to disk. + [Tendermint]: https://github.com/tendermint/tendermint [Tendermint RPC]: https://docs.tendermint.com/master/rpc/ +[`abci_info`]: https://docs.tendermint.com/master/rpc/#/ABCI/abci_info diff --git a/rpc-probe/run-with-docker.sh b/rpc-probe/run-with-docker.sh new file mode 100755 index 000000000..79dd0bab3 --- /dev/null +++ b/rpc-probe/run-with-docker.sh @@ -0,0 +1,28 @@ +#!/bin/sh +set -e + +TENDERMINT_TAG=${TENDERMINT_TAG:-latest} +TENDERMINT_IMAGE="tendermint/tendermint:${TENDERMINT_TAG}" + +echo "Using Tendermint Docker image: ${TENDERMINT_IMAGE}" + +cargo build + +rm -rf /tmp/tendermint +mkdir -p /tmp/tendermint +docker pull "${TENDERMINT_IMAGE}" +docker run -it --rm -v "/tmp/tendermint:/tendermint" "${TENDERMINT_IMAGE}" init +docker run -d \ + --name rpc-probe-tendermint \ + --rm \ + -v "/tmp/tendermint:/tendermint" \ + -p 26657:26657 \ + "${TENDERMINT_IMAGE}" node --proxy_app=kvstore + +echo "Waiting for local Docker node to come up..." +sleep 5 + +set +e +cargo run + +docker stop rpc-probe-tendermint diff --git a/rpc-probe/src/error.rs b/rpc-probe/src/error.rs index 7836f8724..253b1390e 100644 --- a/rpc-probe/src/error.rs +++ b/rpc-probe/src/error.rs @@ -1,8 +1,6 @@ //! Errors relating to the RPC probe's operations. use thiserror::Error; -use tokio::sync::mpsc::error::SendError; -use tokio::task::JoinError; pub type Result = std::result::Result; @@ -20,8 +18,14 @@ pub enum Error { #[error("malformed RPC response: {0}")] MalformedResponse(String), - #[error("{0} request failed: {1}")] - Failed(String, String), + #[error("\"{0}\" request failed with response: {1}")] + Failed(String, serde_json::Value), + + #[error("invalid parameter value: {0}")] + InvalidParamValue(String), + + #[error("I/O error: {0}")] + IoError(String), } impl From for Error { @@ -56,3 +60,9 @@ impl From for Error { )) } } + +impl From for Error { + fn from(e: std::io::Error) -> Self { + Self::IoError(e.to_string()) + } +} diff --git a/rpc-probe/src/main.rs b/rpc-probe/src/main.rs index 3c333d6b9..c1c537e4f 100644 --- a/rpc-probe/src/main.rs +++ b/rpc-probe/src/main.rs @@ -1,49 +1,59 @@ mod error; -mod messages; -mod opts; +mod plan; mod quick; +mod request; mod subscription; +mod utils; mod websocket; -use crate::opts::GeneralOptions; -use crate::quick::quick_probe; +use crate::quick::quick_probe_plan; use log::LevelFilter; use simple_logger::SimpleLogger; use std::path::PathBuf; use structopt::StructOpt; +use tokio::time::Duration; #[derive(Debug, StructOpt)] +/// A utility application that primarily aims to assist in testing +/// compatibility between tendermint.rs (https://github.com/informalsystems/tendermint-rs) +/// and Tendermint (https://github.com/tendermint/tendermint). +/// +/// Running this application will execute a "quick probe" against a running +/// Tendermint node. This executes a number of RPC requests against the node, +/// saving both the requests and responses to the desired output folder. struct Opts { - #[structopt(flatten)] - general: GeneralOptions, + /// The address of the Tendermint node's WebSocket-based RPC endpoint. + #[structopt(default_value = "ws://127.0.0.1:26657/websocket", long)] + pub addr: String, - #[structopt(subcommand)] - cmd: Command, -} + /// The output path in which to store the received responses. + #[structopt(default_value = "probe-results", parse(from_os_str), short, long)] + pub output: PathBuf, -#[derive(Debug, StructOpt)] -enum Command { - /// Perform a general-purpose quick probe of a Tendermint node. - /// - /// This assumes that the Tendermint node in question is running the - /// kvstore application. - /// - /// This will automatically try to execute every kind of request against - /// the given node, recording all of its responses. For a full list of - /// supported endpoints, please see https://docs.tendermint.com/master/rpc/ - Quick, + /// How long to wait between requests, in milliseconds. + #[structopt(default_value = "1000", long)] + pub request_wait: u64, + + /// Increase output logging verbosity. + #[structopt(short, long)] + pub verbose: bool, } #[tokio::main] async fn main() -> Result<(), Box> { let opts = Opts::from_args(); - let log_level = if opts.general.verbose { + let log_level = if opts.verbose { LevelFilter::Debug } else { LevelFilter::Info }; SimpleLogger::new().with_level(log_level).init().unwrap(); - match opts.cmd { - Command::Quick => quick_probe(opts.general).await.map_err(Into::into), - } + + let (plan, driver) = quick_probe_plan(&opts.output, Duration::from_millis(opts.request_wait))? + .connect(&opts.addr) + .await?; + let driver_handle = tokio::spawn(async move { driver.run().await }); + plan.execute_and_close().await?; + driver_handle.await??; + Ok(()) } diff --git a/rpc-probe/src/messages.rs b/rpc-probe/src/messages.rs deleted file mode 100644 index 01fc95500..000000000 --- a/rpc-probe/src/messages.rs +++ /dev/null @@ -1,25 +0,0 @@ -//! Messages for interacting with the Tendermint RPC. - -use getrandom::getrandom; -use serde_json::json; - -pub fn request_wrapper(method: &str, params: serde_json::Value) -> serde_json::Value { - json!({ - "jsonrpc": "2.0", - "id": uuid_v4(), - "method": method, - "params": params, - }) -} - -fn uuid_v4() -> String { - let mut bytes = [0; 16]; - getrandom(&mut bytes).expect("RNG failure!"); - - let uuid = uuid::Builder::from_bytes(bytes) - .set_variant(uuid::Variant::RFC4122) - .set_version(uuid::Version::Random) - .build(); - - uuid.to_string() -} diff --git a/rpc-probe/src/opts.rs b/rpc-probe/src/opts.rs index d61785887..e01b5457e 100644 --- a/rpc-probe/src/opts.rs +++ b/rpc-probe/src/opts.rs @@ -4,20 +4,4 @@ use std::path::PathBuf; use structopt::StructOpt; #[derive(Debug, StructOpt)] -pub struct GeneralOptions { - /// The address of the Tendermint node's WebSocket-based RPC endpoint. - #[structopt(default_value = "ws://127.0.0.1:26657/websocket", long)] - pub addr: String, - - /// The output path in which to store the received responses. - #[structopt(parse(from_os_str), short, long)] - pub output: PathBuf, - - /// Save responses within their original JSON-RPC wrappers. - #[structopt(long)] - pub save_wrapper: bool, - - /// Increase output logging verbosity. - #[structopt(short, long)] - pub verbose: bool, -} +pub struct GeneralOptions {} diff --git a/rpc-probe/src/plan.rs b/rpc-probe/src/plan.rs new file mode 100644 index 000000000..cc60e08ec --- /dev/null +++ b/rpc-probe/src/plan.rs @@ -0,0 +1,246 @@ +//! Coordination of JSON-RPC requests. + +use crate::error::{Error, Result}; +use crate::request::Request; +use crate::utils::uuid_v4; +use crate::websocket::{WebSocketClient, WebSocketClientDriver}; +use futures::StreamExt; +use log::{debug, info}; +use std::fs; +use std::path::{Path, PathBuf}; +use tokio::time::Duration; + +/// A structured, sequential execution plan for requests which we would like to +/// execute against a running Tendermint node. +#[derive(Debug)] +pub struct Plan { + // Where to store all the raw JSON requests we generate. + requests_path: PathBuf, + // Where to store all the raw JSON responses we get back. + responses_path: PathBuf, + // Default period to wait before executing a request, in milliseconds. + request_wait: Duration, + // The list of requests we would like to execute (one at a time, in sequence). + requests: Vec, + // The client to use when executing the requests. + client: WebSocketClient, +} + +impl Plan { + pub fn new(output_path: &Path, request_wait: Duration) -> Result { + info!( + "Saving request and response data to: {}", + output_path.to_str().unwrap() + ); + let requests_path = output_path.join("requests"); + let responses_path = output_path.join("responses"); + let paths = vec![&requests_path, &responses_path]; + for path in paths { + if !path.exists() { + fs::create_dir_all(path)?; + debug!("Created path: {}", path.to_str().unwrap()); + } + if !path.is_dir() { + return Err(Error::InvalidParamValue(format!( + "path {} should be a directory, but it is not", + path.to_str().unwrap() + ))); + } + } + Ok(PlanBuilderWithPaths { + requests_path, + responses_path, + request_wait, + }) + } + + pub async fn execute(&mut self) -> Result<()> { + info!("Executing plan"); + for request in &self.requests { + request.write(&self.requests_path).await?; + let response = match request.execute(&mut self.client, self.request_wait).await { + Ok(r) => r, + Err(e) => match e { + Error::Failed(_, r) => r, + _ => return Err(e), + }, + }; + let response_output = self.responses_path.join(format!("{}.json", request.name)); + tokio::fs::write( + &response_output, + serde_json::to_string_pretty(&response).unwrap(), + ) + .await?; + info!( + "Executed \"{}\". Wrote response to {}", + request.name, + response_output.to_str().unwrap() + ); + } + Ok(()) + } + + pub async fn execute_and_close(mut self) -> Result<()> { + self.execute().await?; + self.client.close().await + } +} + +pub struct PlanBuilderWithPaths { + requests_path: PathBuf, + responses_path: PathBuf, + request_wait: Duration, +} + +impl PlanBuilderWithPaths { + pub fn then(self, request: impl Into) -> PlanBuilderWithRequests { + PlanBuilderWithRequests { + requests_path: self.requests_path, + responses_path: self.responses_path, + request_wait: self.request_wait, + requests: vec![request.into()], + } + } +} + +pub struct PlanBuilderWithRequests { + requests_path: PathBuf, + responses_path: PathBuf, + request_wait: Duration, + requests: Vec, +} + +impl PlanBuilderWithRequests { + pub fn then(mut self, request: impl Into) -> PlanBuilderWithRequests { + self.requests.push(request.into()); + self + } + + /// Attempts to connect to the given WebSocket address and finally + /// construct the request plan. + /// + /// On success, this also returns the WebSocket client driver, such that + /// the caller can execute the driver. + pub async fn connect(self, addr: &str) -> Result<(Plan, WebSocketClientDriver)> { + let (client, driver) = WebSocketClient::new(addr).await?; + Ok(( + Plan { + requests_path: self.requests_path, + responses_path: self.responses_path, + requests: self.requests, + request_wait: self.request_wait, + client, + }, + driver, + )) + } +} + +/// A request with additional information attached to it pertaining to its +/// execution within its plan. +#[derive(Debug)] +pub struct PlannedRequest { + // What do we call this planned request? + name: String, + // The request to be executed. + request: Request, + // The minimum height at which this request can be executed. + min_height: Option, + // Custom wait period before executing this request. + wait: Option, +} + +impl PlannedRequest { + pub fn new(name: &str, request: Request) -> Self { + Self { + request, + name: name.to_owned(), + min_height: None, + wait: None, + } + } + + pub fn with_min_height(mut self, h: u64) -> Self { + self.min_height = Some(h); + self + } + + /// Dumps the full wrapped JSON request into the given output directory. + /// + /// This planned request's name is used as the filename, and extension is + /// `.json`. + pub async fn write(&self, output_dir: &Path) -> Result<()> { + let output_file = output_dir.join(format!("{}.json", self.name)); + tokio::fs::write(&output_file, self.request.to_string()).await?; + debug!( + "Wrote request \"{}\" to: {}", + self.name, + output_file.to_str().unwrap() + ); + Ok(()) + } + + /// Execute this planned request using the given client. + pub async fn execute( + &self, + client: &mut WebSocketClient, + default_wait: Duration, + ) -> Result { + info!("Executing request \"{}\"...", self.name); + if let Some(min_height) = self.min_height { + info!(" - Waiting for height {}...", min_height); + self.wait_for_height(client, min_height).await?; + info!(" - Target height reached"); + } + let wait = self.wait.unwrap_or(default_wait); + tokio::time::sleep(wait).await; + self.request.execute(client).await + } + + async fn wait_for_height(&self, client: &mut WebSocketClient, h: u64) -> Result<()> { + let mut subs = client + .subscribe(uuid_v4(), "tm.event = 'NewBlock'".to_owned()) + .await?; + while let Some(result) = subs.next().await { + let resp = result?; + // TODO(thane): Find a more readable way of getting this value. + let height = resp + .get("result") + .unwrap() + .get("data") + .unwrap() + .get("value") + .unwrap() + .get("block") + .unwrap() + .get("header") + .unwrap() + .get("height") + .unwrap() + .as_str() + .unwrap() + .to_owned() + .parse::() + .unwrap(); + if height >= h { + return Ok(()); + } + } + Err(Error::InternalError(format!( + "subscription terminated before we could reach target height of {}", + h + ))) + } +} + +impl From for PlannedRequest { + fn from(request: Request) -> Self { + let name = request.method.clone(); + Self { + request, + name, + min_height: None, + wait: None, + } + } +} diff --git a/rpc-probe/src/quick.rs b/rpc-probe/src/quick.rs index fbd23d4ad..20565708a 100644 --- a/rpc-probe/src/quick.rs +++ b/rpc-probe/src/quick.rs @@ -1,36 +1,181 @@ //! RPC quick probe-related functionality. use crate::error::Result; -use crate::messages::request_wrapper; -use crate::opts::GeneralOptions; -use crate::websocket::WebSocketClient; -use log::info; +use crate::plan::{Plan, PlanBuilderWithRequests, PlannedRequest}; +use crate::request::Request; +use crate::utils::{encode_kvpair, hex_string}; use serde_json::json; +use std::path::Path; +use tokio::time::Duration; -/// Execute a quick probe against a live Tendermint node using the given -/// options. -/// -/// This assumes that the given Tendermint node is running the `kvstore` -/// application. -pub async fn quick_probe(opts: GeneralOptions) -> Result<()> { - info!( - "Connecting to Tendermint node WebSocket RPC endpoint: {}", - opts.addr - ); - let (mut client, driver) = WebSocketClient::new(&opts.addr).await?; - let driver_handle = tokio::spawn(async move { driver.run().await }); - - let abci_info = client - .request(request_wrapper("abci_info", json!({}))) - .await?; - info!( - "Received ABCI info: {}", - serde_json::to_string_pretty(&abci_info).unwrap() - ); - - info!("Closing RPC connection"); - client.close().await?; - driver_handle.await??; - info!("Connection closed"); - Ok(()) +pub fn quick_probe_plan( + output_path: &Path, + request_wait: Duration, +) -> Result { + Ok(Plan::new(output_path, request_wait)? + .then(Request::new("health", json!({}))) + .then(Request::new("abci_info", json!({}))) + .then(PlannedRequest::new( + "abci_query_non_existent_key", + Request::new( + "abci_query", + json!({ + "data": hex_string("non-existent-key"), + }), + ), + )) + .then(Request::new( + "broadcast_tx_async", + json!({ + "tx": encode_kvpair("test-async", "async"), + }), + )) + .then(Request::new( + "broadcast_tx_sync", + json!({ + "tx": encode_kvpair("test-sync", "sync"), + }), + )) + .then(Request::new( + "broadcast_tx_commit", + json!({ + "tx": encode_kvpair("test-commit", "commit"), + }), + )) + .then(PlannedRequest::new( + "abci_query_existing_key", + Request::new( + "abci_query", + json!({ + "data": hex_string("test-commit"), + }), + ), + )) + // Triggers an error from the ABCI app. + .then(PlannedRequest::new( + "broadcast_tx_commit_existing_key", + Request::new( + "broadcast_tx_commit", + json!({ + "tx": encode_kvpair("test-commit", "commit"), + }), + ), + )) + // Should give us an invalid height error. + .then(PlannedRequest::new( + "block_at_height_0", + Request::new("block", json!({"height": "0"})), + )) + .then(PlannedRequest::new( + "block_at_height_1", + Request::new("block", json!({"height": "1"})), + )) + .then(PlannedRequest::new( + "block_at_latest_height", + Request::new("block", json!({})), + )) + .then(PlannedRequest::new( + "block_results_at_height_1", + Request::new( + "block_results", + json!({ + "height": "1", + }), + ), + )) + .then( + PlannedRequest::new( + "block_results_at_height_10", + Request::new( + "block_results", + json!({ + "height": "10", + }), + ), + ) + .with_min_height(10), + )) } + +// Result has the structure: (test name, method, JSON params) +// fn quick_probe_requests<'a>() -> Vec<(&'a str, &'a str, serde_json::Value)> { +// vec![ +// ("health", "health", json!({})), +// ("abci_info", "abci_info", json!({})), +// ( +// "abci_query_non_existent_key", +// "abci_query", +// json!({ +// "data": hex_string("non-existent-key"), +// }), +// ), +// ( +// "broadcast_tx_async", +// "broadcast_tx_async", +// json!({ +// "tx": encode_kvpair("test-async", "async123"), +// }), +// ), +// ( +// "broadcast_tx_sync", +// "broadcast_tx_sync", +// json!({ +// "tx": encode_kvpair("test-sync", "sync123"), +// }), +// ), +// ( +// "broadcast_tx_commit", +// "broadcast_tx_commit", +// json!({ +// "tx": encode_kvpair("test-commit", "commit123"), +// }), +// ), +// ( +// "abci_query_existing_key", +// "abci_query", +// json!({ +// "data": hex_string("test-commit"), +// }), +// ), +// // Should get an error here because we already wrote to this key. +// ( +// "broadcast_tx_commit_existing_key", +// "broadcast_tx_commit", +// json!({ +// "tx": encode_kvpair("test-commit", "another123"), +// }), +// ), +// ( +// "block_at_height_0", +// "block", +// json!({ +// "height": "0", +// }), +// ), +// ( +// "block_at_height_1", +// "block", +// json!({ +// "height": "1", +// }), +// ), +// ("block_latest", "block", json!({})), +// ( +// "block_results_height_1", +// "block_results", +// json!({ +// "height": "1", +// }), +// ), +// ("block_results_latest", "block_results", json!({})), +// // We assume here that at least 5 blocks have been created +// ( +// "blockchain", +// "blockchain", +// json!({ +// "min_height": "2", +// "max_height": "5", +// }), +// ), +// ] +// } diff --git a/rpc-probe/src/request.rs b/rpc-probe/src/request.rs new file mode 100644 index 000000000..367bb7ef9 --- /dev/null +++ b/rpc-probe/src/request.rs @@ -0,0 +1,47 @@ +//! Messages for interacting with the Tendermint RPC. + +use crate::error::Result; +use crate::utils::uuid_v4; +use crate::websocket::WebSocketClient; +use serde_json::json; +use std::fmt; + +#[derive(Debug)] +pub struct Request { + /// The JSON-RPC request method. + pub method: String, + /// The parameters for the specific method. + pub params: serde_json::Value, + // The ID of this request (auto-generated). + id: String, +} + +impl Request { + pub fn new(method: &str, params: serde_json::Value) -> Self { + Self { + method: method.to_owned(), + params, + id: uuid_v4(), + } + } + + pub fn wrapper(&self) -> serde_json::Value { + json!({ + "jsonrpc": "2.0", + "id": self.id, + "method": self.method, + "params": self.params, + }) + } + + pub async fn execute(&self, client: &mut WebSocketClient) -> Result { + client.request(self.wrapper()).await + } +} + +impl fmt::Display for Request { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let wrapper = self.wrapper(); + write!(f, "{}", serde_json::to_string_pretty(&wrapper).unwrap()) + } +} diff --git a/rpc-probe/src/utils.rs b/rpc-probe/src/utils.rs new file mode 100644 index 000000000..fc5db2eb9 --- /dev/null +++ b/rpc-probe/src/utils.rs @@ -0,0 +1,25 @@ +//! Utility methods. + +use getrandom::getrandom; +use subtle_encoding::{base64, hex}; + +pub fn uuid_v4() -> String { + let mut bytes = [0; 16]; + getrandom(&mut bytes).expect("RNG failure!"); + + let uuid = uuid::Builder::from_bytes(bytes) + .set_variant(uuid::Variant::RFC4122) + .set_version(uuid::Version::Random) + .build(); + + uuid.to_string() +} + +pub fn encode_kvpair(key: &str, value: &str) -> String { + let kvpair = format!("{}={}", key, value); + String::from_utf8(base64::encode(kvpair.as_bytes())).unwrap() +} + +pub fn hex_string(s: &str) -> String { + String::from_utf8(hex::encode(s.as_bytes())).unwrap() +} diff --git a/rpc-probe/src/websocket.rs b/rpc-probe/src/websocket.rs index c28be2794..ea73bbd13 100644 --- a/rpc-probe/src/websocket.rs +++ b/rpc-probe/src/websocket.rs @@ -13,7 +13,7 @@ use async_tungstenite::tungstenite::protocol::CloseFrame; use async_tungstenite::tungstenite::Message; use async_tungstenite::WebSocketStream; use futures::{SinkExt, StreamExt}; -use log::{debug, error}; +use log::{debug, error, warn}; use serde_json::json; use std::borrow::Cow; use std::collections::HashMap; @@ -21,7 +21,7 @@ use tokio::sync::mpsc; #[derive(Debug, Clone)] pub struct WebSocketClient { - cmd_tx: mpsc::UnboundedSender, + cmd_tx: DriverCommandTx, } impl WebSocketClient { @@ -68,9 +68,10 @@ impl WebSocketClient { async fn send_cmd(&mut self, cmd: DriverCommand) -> Result<()> { self.cmd_tx.send(cmd).map_err(|e| { - Error::InternalError( - "WebSocket driver channel receiving end closed unexpectedly".to_string(), - ) + Error::InternalError(format!( + "WebSocket driver channel receiving end closed unexpectedly: {}", + e.to_string() + )) }) } } @@ -204,9 +205,9 @@ impl WebSocketClientDriver { None => return Ok(()), }; let mut disconnected = Vec::new(); - for (subs_id, mut subs_tx) in subs_for_query { + for (subs_id, subs_tx) in subs_for_query { if let Err(e) = subs_tx.send(Ok(ev.clone())) { - error!( + warn!( "Disconnecting subscription with ID {} due to channel send failure: {}", subs_id, e ); @@ -227,7 +228,7 @@ impl WebSocketClientDriver { id, query, subscription_tx, - mut response_tx, + response_tx, } => { self.confirm_pending_subscription(id, wrapper, query, subscription_tx, response_tx) } @@ -255,11 +256,8 @@ impl WebSocketClientDriver { subscription_tx: SubscriptionTx, response_tx: JsonResultTx, ) -> Result<()> { - if let Some(e) = wrapper.get("error") { - let _ = response_tx.send(Err(Error::Failed( - "subscribe".to_string(), - serde_json::to_string_pretty(e).unwrap(), - )))?; + if wrapper.get("error").is_some() { + let _ = response_tx.send(Err(Error::Failed("subscribe".to_string(), wrapper)))?; return Ok(()); } if let Some(r) = wrapper.get("result") { @@ -295,20 +293,11 @@ impl WebSocketClientDriver { wrapper: serde_json::Value, response_tx: JsonResultTx, ) -> Result<()> { - if let Some(e) = wrapper.get("error") { - let _ = response_tx.send(Err(Error::Failed( - method, - serde_json::to_string_pretty(e).unwrap(), - )))?; + if wrapper.get("error").is_some() { + let _ = response_tx.send(Err(Error::Failed(method, wrapper)))?; return Ok(()); } - if let Some(result) = wrapper.get("result") { - if let Some(response) = result.get("response") { - let _ = response_tx.send(Ok(response.clone()))?; - return Ok(()); - } - error!("Missing \"response\" field in RPC response"); - } + let _ = response_tx.send(Ok(wrapper))?; Ok(()) } From 4c8ba56cc1be41ee639ee6f9df111f2fb083853b Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 30 Oct 2020 17:38:48 -0400 Subject: [PATCH 05/14] Fix clippy warnings Signed-off-by: Thane Thomson --- rpc-probe/src/plan.rs | 6 +++++- rpc-probe/src/quick.rs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/rpc-probe/src/plan.rs b/rpc-probe/src/plan.rs index cc60e08ec..9fb65dc01 100644 --- a/rpc-probe/src/plan.rs +++ b/rpc-probe/src/plan.rs @@ -27,7 +27,11 @@ pub struct Plan { } impl Plan { - pub fn new(output_path: &Path, request_wait: Duration) -> Result { + /// Create a new builder for a plan. + /// + /// This builder is not useful until you've added at least one request and + /// call the `connect` method. + pub fn new_builder(output_path: &Path, request_wait: Duration) -> Result { info!( "Saving request and response data to: {}", output_path.to_str().unwrap() diff --git a/rpc-probe/src/quick.rs b/rpc-probe/src/quick.rs index 20565708a..4d13822bc 100644 --- a/rpc-probe/src/quick.rs +++ b/rpc-probe/src/quick.rs @@ -12,7 +12,7 @@ pub fn quick_probe_plan( output_path: &Path, request_wait: Duration, ) -> Result { - Ok(Plan::new(output_path, request_wait)? + Ok(Plan::new_builder(output_path, request_wait)? .then(Request::new("health", json!({}))) .then(Request::new("abci_info", json!({}))) .then(PlannedRequest::new( From ce7bd46bc8de6384eca302867a9e7673fc1317c8 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 30 Oct 2020 17:41:33 -0400 Subject: [PATCH 06/14] Clean up old code Signed-off-by: Thane Thomson --- rpc-probe/src/quick.rs | 83 ------------------------------------------ 1 file changed, 83 deletions(-) diff --git a/rpc-probe/src/quick.rs b/rpc-probe/src/quick.rs index 4d13822bc..5fa889940 100644 --- a/rpc-probe/src/quick.rs +++ b/rpc-probe/src/quick.rs @@ -96,86 +96,3 @@ pub fn quick_probe_plan( .with_min_height(10), )) } - -// Result has the structure: (test name, method, JSON params) -// fn quick_probe_requests<'a>() -> Vec<(&'a str, &'a str, serde_json::Value)> { -// vec![ -// ("health", "health", json!({})), -// ("abci_info", "abci_info", json!({})), -// ( -// "abci_query_non_existent_key", -// "abci_query", -// json!({ -// "data": hex_string("non-existent-key"), -// }), -// ), -// ( -// "broadcast_tx_async", -// "broadcast_tx_async", -// json!({ -// "tx": encode_kvpair("test-async", "async123"), -// }), -// ), -// ( -// "broadcast_tx_sync", -// "broadcast_tx_sync", -// json!({ -// "tx": encode_kvpair("test-sync", "sync123"), -// }), -// ), -// ( -// "broadcast_tx_commit", -// "broadcast_tx_commit", -// json!({ -// "tx": encode_kvpair("test-commit", "commit123"), -// }), -// ), -// ( -// "abci_query_existing_key", -// "abci_query", -// json!({ -// "data": hex_string("test-commit"), -// }), -// ), -// // Should get an error here because we already wrote to this key. -// ( -// "broadcast_tx_commit_existing_key", -// "broadcast_tx_commit", -// json!({ -// "tx": encode_kvpair("test-commit", "another123"), -// }), -// ), -// ( -// "block_at_height_0", -// "block", -// json!({ -// "height": "0", -// }), -// ), -// ( -// "block_at_height_1", -// "block", -// json!({ -// "height": "1", -// }), -// ), -// ("block_latest", "block", json!({})), -// ( -// "block_results_height_1", -// "block_results", -// json!({ -// "height": "1", -// }), -// ), -// ("block_results_latest", "block_results", json!({})), -// // We assume here that at least 5 blocks have been created -// ( -// "blockchain", -// "blockchain", -// json!({ -// "min_height": "2", -// "max_height": "5", -// }), -// ), -// ] -// } From 687bd125f152c0bd55396e6bc23ca05b7431bf58 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Mon, 2 Nov 2020 08:50:30 -0500 Subject: [PATCH 07/14] Allow for customization of run script params Signed-off-by: Thane Thomson --- rpc-probe/run-with-docker.sh | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/rpc-probe/run-with-docker.sh b/rpc-probe/run-with-docker.sh index 79dd0bab3..dae8e678d 100755 --- a/rpc-probe/run-with-docker.sh +++ b/rpc-probe/run-with-docker.sh @@ -2,7 +2,16 @@ set -e TENDERMINT_TAG=${TENDERMINT_TAG:-latest} +DOCKER_PULL=${DOCKER_PULL:-1} +VERBOSE=${VERBOSE:-0} +OUTPUT=${OUTPUT:-"probe-results"} +REQUEST_WAIT=${REQUEST_WAIT:-1000} + TENDERMINT_IMAGE="tendermint/tendermint:${TENDERMINT_TAG}" +FLAGS="--output ${OUTPUT} --request-wait ${REQUEST_WAIT}" +if [ "${VERBOSE}" -eq "1" ]; then + FLAGS="${FLAGS} -v" +fi echo "Using Tendermint Docker image: ${TENDERMINT_IMAGE}" @@ -10,7 +19,13 @@ cargo build rm -rf /tmp/tendermint mkdir -p /tmp/tendermint -docker pull "${TENDERMINT_IMAGE}" + +if [ "${DOCKER_PULL}" -eq "1" ]; then + docker pull "${TENDERMINT_IMAGE}" +else + echo "Skipping pulling of Docker image" +fi + docker run -it --rm -v "/tmp/tendermint:/tendermint" "${TENDERMINT_IMAGE}" init docker run -d \ --name rpc-probe-tendermint \ @@ -23,6 +38,6 @@ echo "Waiting for local Docker node to come up..." sleep 5 set +e -cargo run +cargo run -- ${FLAGS} docker stop rpc-probe-tendermint From a8e62e0805fe7d28508c97b29e9c5bf463573fce Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 6 Nov 2020 18:16:50 -0500 Subject: [PATCH 08/14] Merge latest changes from master Signed-off-by: Thane Thomson --- CHANGELOG.md | 15 +- light-client/Cargo.toml | 4 +- light-client/src/builder/light_client.rs | 2 +- light-client/src/components/io.rs | 2 +- light-client/src/light_client.rs | 2 +- light-client/src/operations/voting_power.rs | 4 +- light-client/src/predicates.rs | 14 +- light-client/src/predicates/errors.rs | 8 + light-client/src/supervisor.rs | 2 +- light-client/src/tests.rs | 2 + light-client/src/types.rs | 2 + light-client/tests/light_client.rs | 57 +- light-client/tests/model_based.rs | 466 +- .../multi_peer/conflicting_headers.json | 60 +- ...lid_commits_from_one_of_the_witnesses.json | 198 +- ...g_valid_commits_from_the_only_witness.json | 132 +- .../multi_peer/malicious_validator_set.json | 132 +- .../header_out_of_trusting_period.json | 132 +- .../single_peer/not_enough_commits.json | 72 +- ...002_draft.tla => Blockchain_003_draft.tla} | 4 +- .../tests/support/model_based/LightTests.tla | 219 +- ...02_draft.tla => Lightclient_003_draft.tla} | 7 +- .../support/model_based/MC100_2_faulty.json | 9 + .../support/model_based/MC100_2_faulty.tla | 28 + .../support/model_based/MC10_3_faulty.json | 26 + .../support/model_based/MC10_3_faulty.tla | 17 + .../support/model_based/MC4_4_faulty.json | 16 +- .../support/model_based/MC50_2_faulty.json | 9 + .../support/model_based/MC50_2_faulty.tla | 23 + .../MC100_2_faulty_TestFailure.json | 6494 +++ .../MC100_2_faulty_TestFailure.tla | 4288 ++ .../MC100_2_faulty_TestSuccess.json | 39244 ++++++++++++++++ .../MC100_2_faulty_TestSuccess.tla | 5455 +++ ...0_3_faulty_TestEmptyCommitEmptyValset.json | 368 + ...10_3_faulty_TestEmptyCommitEmptyValset.tla | 239 + ..._faulty_TestEmptyCommitNonEmptyValset.json | 487 + ...3_faulty_TestEmptyCommitNonEmptyValset.tla | 238 + .../MC10_3_faulty_TestFailure.json | 1130 + .../single_step/MC10_3_faulty_TestFailure.tla | 390 + .../MC10_3_faulty_TestHalfValsetChanges.json | 1330 + .../MC10_3_faulty_TestHalfValsetChanges.tla | 388 + ...alfValsetChangesVerdictNotEnoughTrust.json | 876 + ...HalfValsetChangesVerdictNotEnoughTrust.tla | 389 + ...y_TestHalfValsetChangesVerdictSuccess.json | 1649 + ...ty_TestHalfValsetChangesVerdictSuccess.tla | 389 + .../MC10_3_faulty_TestHeaderFromFuture.json | 457 + .../MC10_3_faulty_TestHeaderFromFuture.tla | 230 + ...lty_TestHeaderNotWithinTrustingPeriod.json | 1115 + ...ulty_TestHeaderNotWithinTrustingPeriod.tla | 379 + ...faulty_TestLessThanThirdValsetChanges.json | 1110 + ..._faulty_TestLessThanThirdValsetChanges.tla | 406 + ...10_3_faulty_TestLessThanTwoThirdsSign.json | 898 + ...C10_3_faulty_TestLessThanTwoThirdsSign.tla | 463 + ...10_3_faulty_TestMoreThanTwoThirdsSign.json | 1822 + ...C10_3_faulty_TestMoreThanTwoThirdsSign.tla | 376 + ...ty_TestMoreThanTwoThirdsValsetChanges.json | 1727 + ...lty_TestMoreThanTwoThirdsValsetChanges.tla | 388 + .../MC10_3_faulty_TestNonMonotonicHeight.json | 566 + .../MC10_3_faulty_TestNonMonotonicHeight.tla | 236 + ...10_3_faulty_TestOneThirdValsetChanges.json | 900 + ...C10_3_faulty_TestOneThirdValsetChanges.tla | 388 + .../MC10_3_faulty_TestSuccess.json | 2689 ++ .../single_step/MC10_3_faulty_TestSuccess.tla | 553 + ...0_3_faulty_TestTwoThirdsValsetChanges.json | 1571 + ...10_3_faulty_TestTwoThirdsValsetChanges.tla | 388 + ...0_3_faulty_TestUntrustedBeforeTrusted.json | 560 + ...10_3_faulty_TestUntrustedBeforeTrusted.tla | 236 + .../MC10_3_faulty_TestValsetChangesFully.json | 1091 + .../MC10_3_faulty_TestValsetChangesFully.tla | 391 + ..._3_faulty_TestValsetDifferentAllSteps.json | 1964 + ...0_3_faulty_TestValsetDifferentAllSteps.tla | 378 + .../MC10_3_faulty_TestValsetDoubles.json | 1055 + .../MC10_3_faulty_TestValsetDoubles.tla | 381 + .../MC10_3_faulty_TestValsetHalves.json | 1551 + .../MC10_3_faulty_TestValsetHalves.tla | 384 + ...4_4_faulty_Test2NotEnoughTrustFailure.json | 509 +- ...C4_4_faulty_Test2NotEnoughTrustFailure.tla | 302 +- ...C4_4_faulty_Test2NotEnoughTrustSuccess.tla | 524 +- ...C4_4_faulty_Test3NotEnoughTrustFailure.tla | 666 +- ...C4_4_faulty_Test3NotEnoughTrustSuccess.tla | 800 +- ...4_4_faulty_TestEmptyCommitEmptyValset.json | 227 + ...C4_4_faulty_TestEmptyCommitEmptyValset.tla | 234 + ...faulty_TestEmptyCommitNonEmptyValset.json} | 159 +- ...4_faulty_TestEmptyCommitNonEmptyValset.tla | 234 + .../single_step/MC4_4_faulty_TestFailure.json | 364 - .../single_step/MC4_4_faulty_TestFailure.tla | 437 +- .../MC4_4_faulty_TestHalfValsetChanges.json | 724 + .../MC4_4_faulty_TestHalfValsetChanges.tla | 556 + ...alfValsetChangesVerdictNotEnoughTrust.json | 679 + ...HalfValsetChangesVerdictNotEnoughTrust.tla | 554 + ...y_TestHalfValsetChangesVerdictSuccess.json | 872 + ...ty_TestHalfValsetChangesVerdictSuccess.tla | 557 + .../MC4_4_faulty_TestHeaderFromFuture.tla | 124 +- ...lty_TestHeaderNotWithinTrustingPeriod.json | 983 + ...ulty_TestHeaderNotWithinTrustingPeriod.tla | 544 + ...faulty_TestLessThanThirdValsetChanges.json | 1190 + ..._faulty_TestLessThanThirdValsetChanges.tla | 558 + ...C4_4_faulty_TestLessThanTwoThirdsSign.json | 866 + ...MC4_4_faulty_TestLessThanTwoThirdsSign.tla | 584 + ...C4_4_faulty_TestMoreThanTwoThirdsSign.json | 798 + ...MC4_4_faulty_TestMoreThanTwoThirdsSign.tla | 544 + .../MC4_4_faulty_TestNonMonotonicHeight.json | 306 + .../MC4_4_faulty_TestNonMonotonicHeight.tla | 227 + ...C4_4_faulty_TestOneThirdValsetChanges.json | 1153 + ...MC4_4_faulty_TestOneThirdValsetChanges.tla | 556 + .../single_step/MC4_4_faulty_TestSuccess.json | 806 +- .../single_step/MC4_4_faulty_TestSuccess.tla | 618 +- ...C4_4_faulty_TestUntrustedBeforeTrusted.tla | 85 +- .../MC4_4_faulty_TestValsetChangesFully.json | 768 + .../MC4_4_faulty_TestValsetChangesFully.tla | 552 + ..._4_faulty_TestValsetDifferentAllSteps.json | 341 - ...4_4_faulty_TestValsetDifferentAllSteps.tla | 254 +- .../MC4_4_faulty_TestValsetDoubles.json | 969 + .../MC4_4_faulty_TestValsetDoubles.tla | 546 + ...son => MC4_4_faulty_TestValsetHalves.json} | 576 +- .../MC4_4_faulty_TestValsetHalves.tla | 552 + .../MC50_2_faulty_TestFailure.json | 4775 ++ .../single_step/MC50_2_faulty_TestFailure.tla | 2592 + .../MC50_2_faulty_TestSuccess.json | 13451 ++++++ .../single_step/MC50_2_faulty_TestSuccess.tla | 2958 ++ ...4_4_faulty_Test2NotEnoughTrustFailure.json | 1196 + ..._4_faulty_Test2NotEnoughTrustSuccess.json} | 407 +- ..._4_faulty_Test3NotEnoughTrustFailure.json} | 479 +- ...4_4_faulty_Test3NotEnoughTrustSuccess.json | 1344 + .../_MC4_4_faulty_TestFailure.json | 744 + .../_MC4_4_faulty_TestHeaderFromFuture.json | 327 + .../_MC4_4_faulty_TestSuccess.json | 1436 + ..._4_faulty_TestUntrustedBeforeTrusted.json} | 99 +- ..._4_faulty_TestValsetDifferentAllSteps.json | 870 + .../_less_than_one_third_nil_votes.json | 287 - .../_more_than_two_third_vals_sign.json | 287 - .../commit/one_third_vals_dont_sign.json | 248 - .../commit/wrong_commit_height.json | 170 - .../sequential/commit/wrong_header_hash.json | 170 - .../commit/wrong_vote_signature.json | 170 - .../header/non_monotonic_bft_time.json | 170 - .../header/non_monotonic_header_height.json | 170 - .../sequential/header/wrong_chain_id.json | 170 - .../header/wrong_header_timestamp.json | 170 - .../header/wrong_last_block_id.json | 170 - .../header/wrong_last_commit_hash.json | 170 - .../header/wrong_next_valset_hash.json | 170 - .../sequential/header/wrong_valset_hash.json | 170 - .../validator_set/_128_validators.json | 5123 -- .../validator_set/_1_validator.json | 170 - .../validator_set/_8_validators.json | 443 - .../validator_set/_half_valset_changes.json | 451 - .../_less_than_one_third_valset_changes.json | 451 - .../_more_than_two_thirds_valset_changes.json | 451 - .../_one_third_valset_changes.json | 388 - .../_two_thirds_valset_changes.json | 388 - .../validator_set/_valset_changes_fully.json | 514 - .../validator_set/_valset_size_doubles.json | 391 - .../validator_set/_valset_size_halves.json | 385 - .../validator_set/faulty_signer.json | 263 - .../validator_set/wrong_valset.json | 248 - .../_more_than_two_third_vals_sign.json | 287 - .../more_signatures_than_validators.json | 254 - .../skipping/commit/no_signatures.json | 163 - .../commit/one_third_vals_dont_sign.json | 248 - .../skipping/header/header_from_future.json | 170 - .../header/out_of_trusting_period.json | 170 - .../validator_set/_skip_five_blocks.json | 248 - .../validator_set/_skip_one_block.json | 248 - ..._valset_changes_less_than_trust_level.json | 287 - ..._valset_changes_more_than_trust_level.json | 287 - .../voting_power/1_empty_signatures.json | 3 +- .../2_1_all_signatures_absent.json | 3 +- .../voting_power/2_2_all_signatures_nil.json | 3 +- .../3_1_one_invalid_signature.json | 3 +- .../3_2_all_signatures_invalid.json | 3 +- .../7_signatures_from_diff_valset.json | 3 +- light-node/src/rpc.rs | 7 +- proto-compiler/Cargo.toml | 8 +- proto-compiler/build.rs | 41 - proto-compiler/src/constants.rs | 140 + proto-compiler/src/functions.rs | 139 + proto-compiler/src/main.rs | 91 +- proto/Cargo.toml | 9 + proto/src/lib.rs | 39 +- proto/src/prost/google.protobuf.rs | 882 + proto/src/prost/tendermint.abci.rs | 21 +- proto/src/prost/tendermint.consensus.rs | 4 +- proto/src/prost/tendermint.crypto.rs | 18 +- proto/src/prost/tendermint.evidence.rs | 12 +- proto/src/prost/tendermint.libs.bits.rs | 1 + proto/src/prost/tendermint.mempool.rs | 8 +- proto/src/prost/tendermint.state.rs | 2 +- proto/src/prost/tendermint.types.rs | 201 +- proto/src/prost/tendermint.version.rs | 3 + proto/src/protobuf.rs | 55 + proto/src/serializers.rs | 54 + .../src/serializers/bytes.rs | 34 +- proto/src/serializers/evidence.rs | 50 + .../src/serializers/from_str.rs | 0 proto/src/serializers/nullable.rs | 23 + proto/src/serializers/option_timestamp.rs | 115 + proto/src/serializers/optional.rs | 20 + .../src/serializers/time_duration.rs | 0 proto/src/serializers/txs.rs | 38 + rpc/Cargo.toml | 6 +- rpc/src/client/transport/mock.rs | 2 + rpc/src/client/transport/websocket.rs | 5 +- rpc/src/endpoint/abci_info.rs | 34 +- rpc/src/endpoint/abci_query.rs | 1 + rpc/src/endpoint/net_info.rs | 2 +- rpc/src/endpoint/status.rs | 11 +- rpc/src/lib.rs | 9 +- rpc/tests/parse_response.rs | 61 +- rpc/tests/support/abci_info.json | 8 +- rpc/tests/support/abci_query.json | 2 +- rpc/tests/support/block.json | 2 +- rpc/tests/support/blockchain.json | 40 +- rpc/tests/support/genesis.json | 6 +- tendermint/Cargo.toml | 4 +- tendermint/src/abci/responses.rs | 2 +- tendermint/src/abci/transaction.rs | 71 +- tendermint/src/abci/transaction/hash.rs | 4 +- tendermint/src/account.rs | 18 +- tendermint/src/block.rs | 118 +- tendermint/src/block/commit.rs | 81 +- tendermint/src/block/commit_sig.rs | 117 +- tendermint/src/block/header.rs | 128 +- tendermint/src/block/height.rs | 7 +- tendermint/src/block/id.rs | 9 +- tendermint/src/block/meta.rs | 42 +- tendermint/src/block/parts.rs | 23 +- tendermint/src/block/round.rs | 19 +- tendermint/src/block/signed_header.rs | 48 +- tendermint/src/block/size.rs | 30 + tendermint/src/chain/id.rs | 4 +- tendermint/src/config/priv_validator_key.rs | 2 +- tendermint/src/consensus/params.rs | 108 + tendermint/src/consensus/state.rs | 3 +- tendermint/src/error.rs | 82 +- tendermint/src/evidence.rs | 192 +- tendermint/src/genesis.rs | 23 +- tendermint/src/hash.rs | 49 +- tendermint/src/merkle/proof.rs | 52 +- tendermint/src/net.rs | 4 +- tendermint/src/private_key.rs | 2 +- tendermint/src/proposal.rs | 18 +- tendermint/src/public_key.rs | 68 +- tendermint/src/public_key/pub_key_response.rs | 39 + tendermint/src/serializers.rs | 56 +- tendermint/src/serializers/apphash.rs | 24 + tendermint/src/serializers/custom.rs | 66 - tendermint/src/serializers/hash.rs | 24 + tendermint/src/serializers/option_hash.rs | 25 + tendermint/src/serializers/raw_commit_sig.rs | 62 - tendermint/src/serializers/tests.rs | 175 - tendermint/src/serializers/time.rs | 25 + tendermint/src/signature.rs | 22 - tendermint/src/time.rs | 21 +- tendermint/src/trust_threshold.rs | 2 +- tendermint/src/validator.rs | 174 +- tendermint/src/vote.rs | 32 +- tendermint/src/vote/canonical_vote.rs | 34 +- tendermint/src/vote/power.rs | 70 +- tendermint/src/vote/sign_vote.rs | 45 +- tendermint/src/vote/validator_index.rs | 19 +- tendermint/tests/integration.rs | 8 +- testgen/jsonatr-lib/apalache-tendermint.json | 6 + .../jsonatr-lib/apalache_to_lite_test.json | 6 + testgen/src/commit.rs | 33 +- testgen/src/consensus.rs | 3 + testgen/src/header.rs | 8 +- testgen/src/light_block.rs | 10 +- testgen/src/tester.rs | 24 +- testgen/src/validator.rs | 21 +- testgen/src/vote.rs | 22 +- 271 files changed, 142835 insertions(+), 19738 deletions(-) rename light-client/tests/support/model_based/{Blockchain_002_draft.tla => Blockchain_003_draft.tla} (97%) rename light-client/tests/support/model_based/{Lightclient_002_draft.tla => Lightclient_003_draft.tla} (98%) create mode 100644 light-client/tests/support/model_based/MC100_2_faulty.json create mode 100644 light-client/tests/support/model_based/MC100_2_faulty.tla create mode 100644 light-client/tests/support/model_based/MC10_3_faulty.json create mode 100644 light-client/tests/support/model_based/MC10_3_faulty.tla create mode 100644 light-client/tests/support/model_based/MC50_2_faulty.json create mode 100644 light-client/tests/support/model_based/MC50_2_faulty.tla create mode 100644 light-client/tests/support/model_based/single_step/MC100_2_faulty_TestFailure.json create mode 100644 light-client/tests/support/model_based/single_step/MC100_2_faulty_TestFailure.tla create mode 100644 light-client/tests/support/model_based/single_step/MC100_2_faulty_TestSuccess.json create mode 100644 light-client/tests/support/model_based/single_step/MC100_2_faulty_TestSuccess.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitEmptyValset.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitEmptyValset.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitNonEmptyValset.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitNonEmptyValset.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestFailure.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestFailure.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChanges.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChanges.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictSuccess.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictSuccess.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderFromFuture.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderFromFuture.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderNotWithinTrustingPeriod.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderNotWithinTrustingPeriod.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanThirdValsetChanges.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanThirdValsetChanges.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanTwoThirdsSign.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanTwoThirdsSign.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsSign.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsSign.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsValsetChanges.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsValsetChanges.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestNonMonotonicHeight.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestNonMonotonicHeight.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestOneThirdValsetChanges.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestOneThirdValsetChanges.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestSuccess.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestSuccess.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestTwoThirdsValsetChanges.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestTwoThirdsValsetChanges.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestUntrustedBeforeTrusted.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestUntrustedBeforeTrusted.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetChangesFully.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetChangesFully.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDifferentAllSteps.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDifferentAllSteps.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDoubles.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDoubles.tla create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetHalves.json create mode 100644 light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetHalves.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitEmptyValset.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitEmptyValset.tla rename light-client/tests/support/model_based/single_step/{MC4_4_faulty_TestHeaderFromFuture.json => MC4_4_faulty_TestEmptyCommitNonEmptyValset.json} (58%) create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitNonEmptyValset.tla delete mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChanges.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChanges.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictSuccess.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictSuccess.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderNotWithinTrustingPeriod.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderNotWithinTrustingPeriod.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanThirdValsetChanges.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanThirdValsetChanges.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanTwoThirdsSign.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanTwoThirdsSign.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestMoreThanTwoThirdsSign.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestMoreThanTwoThirdsSign.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestNonMonotonicHeight.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestNonMonotonicHeight.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestOneThirdValsetChanges.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestOneThirdValsetChanges.tla create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetChangesFully.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetChangesFully.tla delete mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDoubles.json create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDoubles.tla rename light-client/tests/support/model_based/single_step/{MC4_4_faulty_Test3NotEnoughTrustFailure.json => MC4_4_faulty_TestValsetHalves.json} (52%) create mode 100644 light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetHalves.tla create mode 100644 light-client/tests/support/model_based/single_step/MC50_2_faulty_TestFailure.json create mode 100644 light-client/tests/support/model_based/single_step/MC50_2_faulty_TestFailure.tla create mode 100644 light-client/tests/support/model_based/single_step/MC50_2_faulty_TestSuccess.json create mode 100644 light-client/tests/support/model_based/single_step/MC50_2_faulty_TestSuccess.tla create mode 100644 light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test2NotEnoughTrustFailure.json rename light-client/tests/support/model_based/single_step/{MC4_4_faulty_Test2NotEnoughTrustSuccess.json => _MC4_4_faulty_Test2NotEnoughTrustSuccess.json} (54%) rename light-client/tests/support/model_based/single_step/{MC4_4_faulty_Test3NotEnoughTrustSuccess.json => _MC4_4_faulty_Test3NotEnoughTrustFailure.json} (58%) create mode 100644 light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test3NotEnoughTrustSuccess.json create mode 100644 light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestFailure.json create mode 100644 light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestHeaderFromFuture.json create mode 100644 light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestSuccess.json rename light-client/tests/support/model_based/single_step/{MC4_4_faulty_TestUntrustedBeforeTrusted.json => _MC4_4_faulty_TestUntrustedBeforeTrusted.json} (69%) create mode 100644 light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestValsetDifferentAllSteps.json delete mode 100644 light-client/tests/support/single_step/sequential/commit/_less_than_one_third_nil_votes.json delete mode 100644 light-client/tests/support/single_step/sequential/commit/_more_than_two_third_vals_sign.json delete mode 100644 light-client/tests/support/single_step/sequential/commit/one_third_vals_dont_sign.json delete mode 100644 light-client/tests/support/single_step/sequential/commit/wrong_commit_height.json delete mode 100644 light-client/tests/support/single_step/sequential/commit/wrong_header_hash.json delete mode 100644 light-client/tests/support/single_step/sequential/commit/wrong_vote_signature.json delete mode 100644 light-client/tests/support/single_step/sequential/header/non_monotonic_bft_time.json delete mode 100644 light-client/tests/support/single_step/sequential/header/non_monotonic_header_height.json delete mode 100644 light-client/tests/support/single_step/sequential/header/wrong_chain_id.json delete mode 100644 light-client/tests/support/single_step/sequential/header/wrong_header_timestamp.json delete mode 100644 light-client/tests/support/single_step/sequential/header/wrong_last_block_id.json delete mode 100644 light-client/tests/support/single_step/sequential/header/wrong_last_commit_hash.json delete mode 100644 light-client/tests/support/single_step/sequential/header/wrong_next_valset_hash.json delete mode 100644 light-client/tests/support/single_step/sequential/header/wrong_valset_hash.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_128_validators.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_1_validator.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_8_validators.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_half_valset_changes.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_less_than_one_third_valset_changes.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_more_than_two_thirds_valset_changes.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_one_third_valset_changes.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_two_thirds_valset_changes.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_valset_changes_fully.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_valset_size_doubles.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/_valset_size_halves.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/faulty_signer.json delete mode 100644 light-client/tests/support/single_step/sequential/validator_set/wrong_valset.json delete mode 100644 light-client/tests/support/single_step/skipping/commit/_more_than_two_third_vals_sign.json delete mode 100644 light-client/tests/support/single_step/skipping/commit/more_signatures_than_validators.json delete mode 100644 light-client/tests/support/single_step/skipping/commit/no_signatures.json delete mode 100644 light-client/tests/support/single_step/skipping/commit/one_third_vals_dont_sign.json delete mode 100644 light-client/tests/support/single_step/skipping/header/header_from_future.json delete mode 100644 light-client/tests/support/single_step/skipping/header/out_of_trusting_period.json delete mode 100644 light-client/tests/support/single_step/skipping/validator_set/_skip_five_blocks.json delete mode 100644 light-client/tests/support/single_step/skipping/validator_set/_skip_one_block.json delete mode 100644 light-client/tests/support/single_step/skipping/validator_set/_valset_changes_less_than_trust_level.json delete mode 100644 light-client/tests/support/single_step/skipping/validator_set/_valset_changes_more_than_trust_level.json delete mode 100644 proto-compiler/build.rs create mode 100644 proto-compiler/src/constants.rs create mode 100644 proto-compiler/src/functions.rs create mode 100644 proto/src/protobuf.rs create mode 100644 proto/src/serializers.rs rename {tendermint => proto}/src/serializers/bytes.rs (67%) create mode 100644 proto/src/serializers/evidence.rs rename {tendermint => proto}/src/serializers/from_str.rs (100%) create mode 100644 proto/src/serializers/nullable.rs create mode 100644 proto/src/serializers/option_timestamp.rs create mode 100644 proto/src/serializers/optional.rs rename {tendermint => proto}/src/serializers/time_duration.rs (100%) create mode 100644 proto/src/serializers/txs.rs create mode 100644 tendermint/src/public_key/pub_key_response.rs create mode 100644 tendermint/src/serializers/apphash.rs delete mode 100644 tendermint/src/serializers/custom.rs create mode 100644 tendermint/src/serializers/hash.rs create mode 100644 tendermint/src/serializers/option_hash.rs delete mode 100644 tendermint/src/serializers/raw_commit_sig.rs delete mode 100644 tendermint/src/serializers/tests.rs create mode 100644 tendermint/src/serializers/time.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 72bbc5518..f6bf38101 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,24 @@ ## Unreleased +### BREAKING CHANGES: + +- `[tendermint]` - Direct serialization capabilities have been removed from the + domain types. They are temporarily available in the `protos` crate. **NB: + this is unstable and is planned to change again in v0.17.0-rc3**. ([#639]) +- `[tendermint]` - Work has started on making it compulsory to construct domain + types by way of their constructors to ensure validity. This work is scheduled + for completion in v0.17.0-rc3. ([#639]) + ### BUG FIXES: - `[light-client]` Fix bug where a commit with only absent signatures would be deemed valid instead of invalid ([#650]) +- `[light-client]` Revert a change introduced in [#652] that would enable DoS attacks, + where full nodes could spam the light client with massive commits (eg. 10k validators). -[#652]: https://github.com/informalsystems/tendermint-rs/issues/650 +[#650]: https://github.com/informalsystems/tendermint-rs/issues/650 +[#652]: https://github.com/informalsystems/tendermint-rs/pulls/652 +[#639]: https://github.com/informalsystems/tendermint-rs/pull/639 ## v0.17.0-rc1 diff --git a/light-client/Cargo.toml b/light-client/Cargo.toml index c4b1e36fc..a44c1bef2 100644 --- a/light-client/Cargo.toml +++ b/light-client/Cargo.toml @@ -44,6 +44,8 @@ thiserror = "1.0.15" tokio = "0.2.20" [dev-dependencies] +tendermint-testgen = { path = "../testgen"} + serde_json = "1.0.51" gumdrop = "0.8.0" -tendermint-testgen = { path = "../testgen"} +rand = "0.7.3" diff --git a/light-client/src/builder/light_client.rs b/light-client/src/builder/light_client.rs index fdb1091b8..e70da0c12 100644 --- a/light-client/src/builder/light_client.rs +++ b/light-client/src/builder/light_client.rs @@ -134,7 +134,7 @@ impl LightClientBuilder { let trusted_state = self .light_store .latest_trusted_or_verified() - .ok_or_else(|| error::Kind::NoTrustedStateInStore)?; + .ok_or(error::Kind::NoTrustedStateInStore)?; self.trust_light_block(trusted_state) } diff --git a/light-client/src/components/io.rs b/light-client/src/components/io.rs index 8de2ad377..18b3ac961 100644 --- a/light-client/src/components/io.rs +++ b/light-client/src/components/io.rs @@ -155,7 +155,7 @@ mod prod { let res = block_on(self.timeout, async move { client.validators(height).await })?; match res { - Ok(response) => Ok(TMValidatorSet::new(response.validators)), + Ok(response) => Ok(TMValidatorSet::new_simple(response.validators)), Err(err) => Err(IoError::RpcError(err)), } } diff --git a/light-client/src/light_client.rs b/light-client/src/light_client.rs index 5e5f0530a..f3de21f87 100644 --- a/light-client/src/light_client.rs +++ b/light-client/src/light_client.rs @@ -173,7 +173,7 @@ impl LightClient { let trusted_state = state .light_store .latest_trusted_or_verified() - .ok_or_else(|| ErrorKind::NoInitialTrustedState)?; + .ok_or(ErrorKind::NoInitialTrustedState)?; if target_height < trusted_state.height() { bail!(ErrorKind::TargetLowerThanTrustedState { diff --git a/light-client/src/operations/voting_power.rs b/light-client/src/operations/voting_power.rs index f979052a2..e5ea3c3d3 100644 --- a/light-client/src/operations/voting_power.rs +++ b/light-client/src/operations/voting_power.rs @@ -10,7 +10,7 @@ use serde::{Deserialize, Serialize}; use std::collections::HashSet; use std::fmt; -use std::convert::{TryFrom, TryInto}; +use std::convert::TryFrom; use tendermint::block::CommitSig; use tendermint::trust_threshold::TrustThreshold as _; use tendermint::vote::{SignedVote, ValidatorIndex, Vote}; @@ -211,7 +211,7 @@ fn non_absent_vote( Some(Vote { vote_type: tendermint::vote::Type::Precommit, height: commit.height, - round: commit.round.try_into().unwrap(), + round: commit.round, block_id, timestamp: Some(timestamp), validator_address, diff --git a/light-client/src/predicates.rs b/light-client/src/predicates.rs index 263d6c8f5..1e422804b 100644 --- a/light-client/src/predicates.rs +++ b/light-client/src/predicates.rs @@ -261,13 +261,6 @@ pub fn verify( &trusted.signed_header.header, )?; - // Verify that more than 2/3 of the validators correctly committed the block. - vp.has_sufficient_signers_overlap( - &untrusted.signed_header, - &untrusted.validators, - voting_power_calculator, - )?; - let trusted_next_height = trusted.height().increment(); if untrusted.height() == trusted_next_height { @@ -292,5 +285,12 @@ pub fn verify( )?; } + // Verify that more than 2/3 of the validators correctly committed the block. + vp.has_sufficient_signers_overlap( + &untrusted.signed_header, + &untrusted.validators, + voting_power_calculator, + )?; + Ok(()) } diff --git a/light-client/src/predicates/errors.rs b/light-client/src/predicates/errors.rs index 01a306c5d..6631c26f9 100644 --- a/light-client/src/predicates/errors.rs +++ b/light-client/src/predicates/errors.rs @@ -16,8 +16,10 @@ pub enum VerificationError { #[error("header from the future: header_time={header_time} now={now}")] HeaderFromTheFuture { /// Time in the header + #[serde(with = "tendermint::serializers::time")] header_time: Time, /// Current time + #[serde(with = "tendermint::serializers::time")] now: Time, }, @@ -52,8 +54,10 @@ pub enum VerificationError { #[error("invalid commit value: header_hash={header_hash} commit_hash={commit_hash}")] InvalidCommitValue { /// Header hash + #[serde(with = "tendermint::serializers::hash")] header_hash: Hash, /// Commit hash + #[serde(with = "tendermint::serializers::hash")] commit_hash: Hash, }, @@ -61,8 +65,10 @@ pub enum VerificationError { #[error("invalid next validator set: header_next_validators_hash={header_next_validators_hash} next_validators_hash={next_validators_hash}")] InvalidNextValidatorSet { /// Next validator set hash + #[serde(with = "tendermint::serializers::hash")] header_next_validators_hash: Hash, /// Validator set hash + #[serde(with = "tendermint::serializers::hash")] next_validators_hash: Hash, }, @@ -70,8 +76,10 @@ pub enum VerificationError { #[error("invalid validator set: header_validators_hash={header_validators_hash} validators_hash={validators_hash}")] InvalidValidatorSet { /// Hash of validator set stored in header + #[serde(with = "tendermint::serializers::hash")] header_validators_hash: Hash, /// Actual hash of validator set in header + #[serde(with = "tendermint::serializers::hash")] validators_hash: Hash, }, diff --git a/light-client/src/supervisor.rs b/light-client/src/supervisor.rs index b79b6964e..c596a1076 100644 --- a/light-client/src/supervisor.rs +++ b/light-client/src/supervisor.rs @@ -216,7 +216,7 @@ impl Supervisor { Ok(verified_block) => { let trusted_block = primary .latest_trusted() - .ok_or_else(|| ErrorKind::NoTrustedState(Status::Trusted))?; + .ok_or(ErrorKind::NoTrustedState(Status::Trusted))?; // Perform fork detection with the highest verified block and the trusted block. let outcome = self.detect_forks(&verified_block, &trusted_block)?; diff --git a/light-client/src/tests.rs b/light-client/src/tests.rs index 6f5b32f1d..86099cb4c 100644 --- a/light-client/src/tests.rs +++ b/light-client/src/tests.rs @@ -38,6 +38,7 @@ pub struct Initial { pub signed_header: SignedHeader, pub next_validator_set: ValidatorSet, pub trusting_period: DurationStr, + #[serde(with = "tendermint::serializers::time")] pub now: Time, } @@ -48,6 +49,7 @@ pub struct TestBisection { pub primary: Provider, pub witnesses: Vec>, pub height_to_verify: HeightStr, + #[serde(with = "tendermint::serializers::time")] pub now: Time, pub expected_output: Option, pub expected_num_of_bisections: usize, diff --git a/light-client/src/types.rs b/light-client/src/types.rs index 14dd3c6a6..9fad01c2b 100644 --- a/light-client/src/types.rs +++ b/light-client/src/types.rs @@ -127,9 +127,11 @@ pub struct LatestStatus { /// The latest height we are trusting. pub height: Option, /// The latest block hash we are trusting. + #[serde(with = "tendermint::serializers::option_hash")] pub block_hash: Option, /// The latest validator set we are trusting. /// Note that this potentially did not yet sign a header yet. + #[serde(with = "tendermint::serializers::option_hash")] pub valset_hash: Option, /// The list of fullnodes we are connected to, primary and witnesses. pub connected_nodes: Vec, diff --git a/light-client/tests/light_client.rs b/light-client/tests/light_client.rs index 945e90f86..d14c4dc52 100644 --- a/light-client/tests/light_client.rs +++ b/light-client/tests/light_client.rs @@ -11,8 +11,8 @@ use tendermint_light_client::{ light_client::{LightClient, Options}, state::State, store::{memory::MemoryStore, LightStore}, - tests::{Trusted, *}, - types::{LightBlock, Status, TrustThreshold}, + tests::*, + types::{LightBlock, Status}, }; use std::convert::TryInto; @@ -85,51 +85,6 @@ fn run_bisection_test(tc: TestBisection) -> BisectionTestResult { } } -fn single_step_test(tc: TestCase) { - let tc: TestCase = tc.into(); - let mut latest_trusted = Trusted::new( - tc.initial.signed_header.clone(), - tc.initial.next_validator_set.clone(), - ); - - let expects_err = match &tc.expected_output { - Some(eo) => eo.eq("error"), - None => false, - }; - - // For testing, it makes it easier to have smaller clock drift - // Same is done in Go - clock_drift is set to 1 sec for these tests - // Once we switch to the proposer based timestamps, it will probably be a consensus parameter - let clock_drift = Duration::from_secs(1); - - let trusting_period: Duration = tc.initial.trusting_period.into(); - let now = tc.initial.now; - - for input in tc.input.iter() { - match verify_single( - latest_trusted.clone(), - input.clone(), - TrustThreshold::default(), - trusting_period, - clock_drift, - now, - ) { - Ok(new_state) => { - let expected_state = input; - - assert_eq!(new_state.height(), expected_state.height()); - assert_eq!(&new_state, expected_state); - assert!(!expects_err); - - latest_trusted = Trusted::new(new_state.signed_header, new_state.next_validators); - } - Err(_) => { - assert!(expects_err); - } - } - } -} - fn bisection_test(tc: TestBisection) { let tc: TestBisection = tc.into(); let expect_error = match &tc.expected_output { @@ -187,14 +142,6 @@ fn bisection_lower_test(tc: TestBisection) { } } -#[test] -fn run_single_step_tests() { - let mut tester = Tester::new("single_step", TEST_FILES_PATH); - tester.add_test("single-step test", single_step_test); - tester.run_foreach_in_dir("single_step"); - tester.finalize(); -} - #[test] fn run_bisection_tests() { let mut tester = Tester::new("bisection", TEST_FILES_PATH); diff --git a/light-client/tests/model_based.rs b/light-client/tests/model_based.rs index 605e097cd..93e1239db 100644 --- a/light-client/tests/model_based.rs +++ b/light-client/tests/model_based.rs @@ -1,11 +1,27 @@ +use rand::Rng; use serde::{Deserialize, Serialize}; +use std::convert::TryFrom; +use std::str::FromStr; use std::time::Duration; use tendermint_light_client::components::verifier::Verdict; +use tendermint_light_client::types::ValidatorSet; use tendermint_light_client::{ tests::{Trusted, *}, types::{LightBlock, Time, TrustThreshold}, }; -use tendermint_testgen::{apalache::*, jsonatr::*, Command, TestEnv, Tester}; +use tendermint_testgen::{ + apalache::*, jsonatr::*, light_block::TMLightBlock, validator::generate_validators, Command, + Generator, LightBlock as TestgenLightBlock, TestEnv, Tester, Validator, Vote, +}; + +fn testgen_to_anon(tm_lb: TMLightBlock) -> AnonLightBlock { + AnonLightBlock { + signed_header: tm_lb.signed_header, + validators: tm_lb.validators, + next_validators: tm_lb.next_validators, + provider: tm_lb.provider, + } +} #[derive(Deserialize, Clone, Debug, PartialEq)] pub enum LiteTestKind { @@ -45,26 +61,388 @@ pub struct SingleStepTestCase { #[derive(Serialize, Deserialize, Clone, Debug)] pub struct BlockVerdict { block: AnonLightBlock, + testgen_block: TestgenLightBlock, + #[serde(with = "tendermint::serializers::time")] now: Time, verdict: LiteVerdict, } +/// A primitive fuzzer that mutates one of the test case input blocks +trait SingleStepTestFuzzer { + fn fuzz(tc: &SingleStepTestCase) -> Option { + let mut fuzz = tc.clone(); + if let Some((i, input)) = Self::fuzzable_input(&mut fuzz) { + let (what, invalid_verdict) = Self::fuzz_input(input); + if invalid_verdict { + input.verdict = LiteVerdict::Invalid; + } + fuzz.input.truncate(i + 1); + fuzz.description = format!("Fuzzed {} for {}", what, &fuzz.description); + return Some(fuzz); + } + None + } + + /// Fuzzes the input block and returns the pair consisting of: + /// - the description of what has been changed + /// - whether the verdict should be changed to `Invalid` + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool); + + /// Get a random hash value + fn random_hash() -> tendermint::hash::Hash { + // not really random, but should be different from whatever hash is there + tendermint::hash::Hash::from_str( + "AAAAAAAAAA1BA22917BBE036BA9D58A40918E93983B57BD0DC465301E10B5419", + ) + .unwrap() + } + + /// get the block to mutate, if possible + fn fuzzable_input(tc: &mut SingleStepTestCase) -> Option<(usize, &mut BlockVerdict)> { + let mut indices = Vec::new(); + for (i, input) in tc.input.iter_mut().enumerate() { + if input.verdict != LiteVerdict::Invalid { + indices.push(i) + } + } + if indices.is_empty() { + None + } else { + let mut rng = rand::thread_rng(); + let i = rng.gen_range(0, indices.len()); + Some((i, tc.input.get_mut(i).unwrap())) + } + } +} + +struct HeaderVersionFuzzer {} +impl SingleStepTestFuzzer for HeaderVersionFuzzer { + // TODO: rehash the header and re-compute commit with it + // TODO: Unlike in tendermint-go, we don't assert for a particular version in rust + // TODO: Either add this check in verification or remove this test because otherwise there's no point of it + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let mut rng = rand::thread_rng(); + + let version = &input.block.signed_header.header.version; + let mut block = version.block; + while block == version.block { + block = rng.gen(); + } + let mut app = version.app; + while app == version.app { + app = rng.gen(); + } + + input.block.signed_header.header.version = + tendermint::block::header::Version { block, app }; + (String::from("header version"), true) + } +} + +struct HeaderChainIdFuzzer {} +impl SingleStepTestFuzzer for HeaderChainIdFuzzer { + // TODO: again, we do not check for a valid chain id in verification + // TODO: this would fail on `header_matches_commit` because header isn't rehashed + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + input.block.signed_header.header.chain_id = + tendermint::chain::Id::from_str("AAAAAAAAAAAAAAAAAA").unwrap(); + (String::from("header chain_id"), true) + } +} + +struct HeaderHeightFuzzer {} +impl SingleStepTestFuzzer for HeaderHeightFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let mut rng = rand::thread_rng(); + let h: u64 = input.block.signed_header.header.height.into(); + let mut height: u64 = rng.gen_range(0u64, i64::MAX as u64); + while height == h { + height = rng.gen(); + } + input.block.signed_header.header.height = + tendermint::block::Height::try_from(height).unwrap(); + (String::from("header height"), true) + } +} + +struct HeaderTimeFuzzer {} +impl SingleStepTestFuzzer for HeaderTimeFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let mut rng = rand::thread_rng(); + let secs = tendermint::Time::now() + .duration_since(tendermint::Time::unix_epoch()) + .unwrap() + .as_secs(); + let rand_secs = rng.gen_range(0, secs); + input.block.signed_header.header.time = + tendermint::Time::unix_epoch() + std::time::Duration::from_secs(rand_secs); + // TODO: the fuzzing below fails with one of: + // - 'overflow when adding duration to instant', src/libstd/time.rs:549:31 + // - 'No such local time', + // /home/andrey/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.11/src/ + // offset/mod.rs:173:34 + // let secs: u64 = rng.gen(); + // input.block.signed_header.header.time = tendermint::Time::unix_epoch() + + // std::time::Duration::from_secs(secs); + (String::from("header time"), true) + } +} + +struct HeaderLastBlockIdFuzzer {} +impl SingleStepTestFuzzer for HeaderLastBlockIdFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + // NOTE: fuzzing with just the header fields will most likely produce an + // InvalidCommitValue error because now the header.hash() and commit.header_hash + // don't match. And so, this always fails on "header_matches_commit" predicate + // For better testing of the actual fuzzed value, we need to do better here :) + // TODO! + input.block.signed_header.header.last_block_id = Some(tendermint::block::Id { + hash: Self::random_hash(), + part_set_header: Default::default(), + }); + (String::from("header last_block_id"), true) + } +} + +struct HeaderLastCommitHashFuzzer {} +impl SingleStepTestFuzzer for HeaderLastCommitHashFuzzer { + // TODO: Do we need this? because we don't even validate `last_commit_hash` + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + input.block.signed_header.header.last_commit_hash = Some(Self::random_hash()); + (String::from("header last_commit_hash"), true) + } +} + +struct HeaderDataHashFuzzer {} +impl SingleStepTestFuzzer for HeaderDataHashFuzzer { + // TODO: Do we need this? because we don't even validate `data_hash` + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + input.block.signed_header.header.data_hash = Some(Self::random_hash()); + (String::from("header data_hash"), true) + } +} + +struct HeaderValHashFuzzer {} +impl SingleStepTestFuzzer for HeaderValHashFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let vals = [ + Validator::new("1"), + Validator::new("2"), + Validator::new("3"), + ]; + let valset = ValidatorSet::new_simple(generate_validators(&vals).unwrap()); + + input.block.validators = valset; + (String::from("header validators_hash"), true) + } +} + +struct HeaderNextValHashFuzzer {} +impl SingleStepTestFuzzer for HeaderNextValHashFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let vals = [ + Validator::new("1"), + Validator::new("2"), + Validator::new("3"), + ]; + let valset = ValidatorSet::new_simple(generate_validators(&vals).unwrap()); + + input.block.next_validators = valset; + (String::from("header next_validators_hash"), true) + } +} + +struct HeaderConsensusHashFuzzer {} +impl SingleStepTestFuzzer for HeaderConsensusHashFuzzer { + // TODO: Do we need this? because we don't even validate `consensus_hash` + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + input.block.signed_header.header.consensus_hash = Self::random_hash(); + (String::from("header consensus_hash"), true) + } +} + +struct HeaderAppHashFuzzer {} +impl SingleStepTestFuzzer for HeaderAppHashFuzzer { + // TODO: Do we need this? because we don't even validate `app_hash` + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + input.block.signed_header.header.app_hash = + tendermint::hash::AppHash::try_from(vec![0, 1, 2, 3, 4, 5]).unwrap(); + (String::from("header app_hash"), true) + } +} + +struct HeaderLastResultsHashFuzzer {} +impl SingleStepTestFuzzer for HeaderLastResultsHashFuzzer { + // TODO: Do we need this? because we don't even validate `last_results_hash` + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + input.block.signed_header.header.last_results_hash = Some(Self::random_hash()); + (String::from("header last_results_hash"), true) + } +} + +struct HeaderEvidenceHashFuzzer {} +impl SingleStepTestFuzzer for HeaderEvidenceHashFuzzer { + // TODO: Do we need this? because we don't even validate `evidence_hash` + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + input.block.signed_header.header.evidence_hash = Some(Self::random_hash()); + (String::from("header evidence_hash"), true) + } +} + +struct HeaderProposerAddressFuzzer {} +impl SingleStepTestFuzzer for HeaderProposerAddressFuzzer { + // TODO: Do we need this? because we don't even validate `proposer_address` + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let val = Validator::new("AAAAAAAAAAAAAAAA"); + input.block.signed_header.header.proposer_address = val.generate().unwrap().address; + (String::from("header proposer_address"), true) + } +} + +#[allow(dead_code)] // TODO: Remove when we enable this fuzzer +struct CommitHeightFuzzer {} +impl SingleStepTestFuzzer for CommitHeightFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let mut rng = rand::thread_rng(); + let h: u64 = input.block.signed_header.commit.height.into(); + let mut height: u64 = h - 2; // rng.gen_range(0u64, i64::MAX as u64); + while height == h { + height = rng.gen(); + } + input.block.signed_header.commit.height = tendermint::block::Height::try_from(h).unwrap(); + (String::from("commit height"), true) + } +} + +#[allow(dead_code)] // TODO: Remove when we enable this fuzzer +struct CommitRoundFuzzer {} +impl SingleStepTestFuzzer for CommitRoundFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let mut rng = rand::thread_rng(); + let r: u32 = input.block.signed_header.commit.round.value(); + let mut round: u32 = rng.gen(); + while round == r { + round = rng.gen(); + } + input.block.signed_header.commit.round = (round as u16).into(); + (format!("commit round from {} into {}", r, round), true) + } +} + +struct CommitBlockIdFuzzer {} +impl SingleStepTestFuzzer for CommitBlockIdFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + input.block.signed_header.commit.block_id = tendermint::block::Id { + hash: Self::random_hash(), + part_set_header: Default::default(), + }; + (String::from("commit block_id"), true) + } +} + +struct CommitSigFuzzer {} +// Replaces test `less_than_one_third_nil_votes.json` +impl SingleStepTestFuzzer for CommitSigFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let mut votes = input.testgen_block.commit.clone().unwrap().votes.unwrap(); + let validators_len = input.testgen_block.validators.clone().unwrap().len(); + let enough_votes = votes.len() > 3; + let enough_vp = 7 * votes.len() > 6 * validators_len; + if enough_votes && enough_vp { + votes[0].is_nil = Some(()); + + // change the vote to nil + let mut commit = input.testgen_block.commit.clone().unwrap(); + commit.votes = Some(votes); + + input.block.signed_header.commit = commit.generate().unwrap(); + + (String::from("commit sig type"), false) + } else { + (String::from("nothing"), false) + } + } +} + +struct VoteSignatureFuzzer {} +// Replaces test `wrong_vote_signature.json` +impl SingleStepTestFuzzer for VoteSignatureFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let mut commit = input.testgen_block.commit.clone().unwrap(); + let mut header = commit.header.clone().unwrap(); + + let h: u64 = commit.clone().header.unwrap().height.unwrap(); + header.height = Some(h + 3); + commit.header = Some(header); + + input.testgen_block.commit = Some(commit); + input.block = testgen_to_anon(input.testgen_block.generate().unwrap()); + + (String::from("vote signature"), true) + } +} + +struct ValidatorSetFuzzer {} +impl SingleStepTestFuzzer for ValidatorSetFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let mut commit = input.testgen_block.commit.clone().unwrap(); + let mut header = commit.header.clone().unwrap(); + let mut validators = header.validators.unwrap(); + + if !validators.is_empty() { + let faulty_val = Validator::new("faulty"); + validators[0] = faulty_val; + + header.validators = Some(validators); + commit.header = Some(header); + + commit.votes = None; + + input.block.signed_header.commit = commit.generate().unwrap(); + input.block.signed_header.commit.block_id.hash = + input.block.signed_header.header.hash(); + } + + (String::from("validator set"), true) + } +} + +struct SignaturesFuzzer {} +impl SingleStepTestFuzzer for SignaturesFuzzer { + fn fuzz_input(input: &mut BlockVerdict) -> (String, bool) { + let header = input.testgen_block.header.clone().unwrap(); + let mut commit = input.testgen_block.commit.clone().unwrap(); + let mut votes = commit.votes.clone().unwrap(); + + let mut rng = rand::thread_rng(); + let random_num: u32 = rng.gen(); + if random_num % 2 == 0 { + let faulty_val = Validator::new("faulty"); + let vote = Vote::new(faulty_val, header); + + votes.push(vote); + commit.votes = Some(votes); + + input.block.signed_header.commit = commit.generate().unwrap(); + } else { + input.block.signed_header.commit.signatures = vec![]; + } + + (String::from("signatures"), true) + } +} + fn single_step_test( tc: SingleStepTestCase, _env: &TestEnv, _root_env: &TestEnv, output_env: &TestEnv, ) { - output_env.clear_log(); - println!( - " > running static model-based single-step test: {}", - &tc.description - ); let mut latest_trusted = Trusted::new( tc.initial.signed_header.clone(), tc.initial.next_validator_set.clone(), ); - let clock_drift = Duration::from_secs(1); + let clock_drift = Duration::from_secs(0); let trusting_period: Duration = tc.initial.trusting_period.into(); for (i, input) in tc.input.iter().enumerate() { output_env.logln(&format!(" > step {}, expecting {:?}", i, input.verdict)); @@ -99,6 +477,71 @@ fn single_step_test( } } +fn fuzz_single_step_test( + tc: SingleStepTestCase, + _env: &TestEnv, + _root_env: &TestEnv, + output_env: &TestEnv, +) { + output_env.clear_log(); + let run_test = |tc: SingleStepTestCase| { + output_env.logln(&format!( + " > running static model-based single-step test: {}", + &tc.description + )); + + // TODO: Talk to Greg about ser/de once serialization updates are merged + // serialize + let serialized = serde_json::to_string(&tc); + assert!( + serialized.is_ok(), + "serialization error {}", + serialized.err().unwrap() + ); + + //deserialize + let serialized = serialized.unwrap(); + + let deserialized = serde_json::from_str::(&serialized); + assert!( + deserialized.is_ok(), + "deserialization error {}", + deserialized.err().unwrap() + ); + let deserialized = deserialized.unwrap(); + + // test + single_step_test(deserialized, _env, _root_env, output_env); + Some(()) + }; + run_test(tc.clone()); + HeaderVersionFuzzer::fuzz(&tc).and_then(run_test); + HeaderChainIdFuzzer::fuzz(&tc).and_then(run_test); + HeaderHeightFuzzer::fuzz(&tc).and_then(run_test); + HeaderTimeFuzzer::fuzz(&tc).and_then(run_test); + HeaderLastBlockIdFuzzer::fuzz(&tc).and_then(run_test); + HeaderLastCommitHashFuzzer::fuzz(&tc).and_then(run_test); + HeaderDataHashFuzzer::fuzz(&tc).and_then(run_test); + HeaderValHashFuzzer::fuzz(&tc).and_then(run_test); + HeaderNextValHashFuzzer::fuzz(&tc).and_then(run_test); + HeaderConsensusHashFuzzer::fuzz(&tc).and_then(run_test); + HeaderAppHashFuzzer::fuzz(&tc).and_then(run_test); + HeaderLastResultsHashFuzzer::fuzz(&tc).and_then(run_test); + HeaderEvidenceHashFuzzer::fuzz(&tc).and_then(run_test); + HeaderProposerAddressFuzzer::fuzz(&tc).and_then(run_test); + // The two tests below fail -- seems that there is not enough validation between the header and + // the commit + // Commenting them for now - see issue #637 + // TODO: uncomment once we figure a fix! + // CommitHeightFuzzer::fuzz(&tc).and_then(run_test); + // CommitRoundFuzzer::fuzz(&tc).and_then(run_test); + CommitBlockIdFuzzer::fuzz(&tc).and_then(run_test); + CommitSigFuzzer::fuzz(&tc).and_then(run_test); + VoteSignatureFuzzer::fuzz(&tc).and_then(run_test); + ValidatorSetFuzzer::fuzz(&tc).and_then(run_test); + SignaturesFuzzer::fuzz(&tc).and_then(run_test); +} + fn model_based_test( test: ApalacheTestCase, env: &TestEnv, @@ -137,8 +580,8 @@ fn model_based_test( output_env.logln(" failed to find necessary programs; consider adding them to your PATH. skipping the test"); return; } - env.copy_file_from_env(root_env, "Lightclient_002_draft.tla"); - env.copy_file_from_env(root_env, "Blockchain_002_draft.tla"); + env.copy_file_from_env(root_env, "Lightclient_003_draft.tla"); + env.copy_file_from_env(root_env, "Blockchain_003_draft.tla"); env.copy_file_from_env(root_env, "LightTests.tla"); env.copy_file_from_env(root_env, &test.model); @@ -166,7 +609,7 @@ fn model_based_test( let mut tc: SingleStepTestCase = env.parse_file("test.json").unwrap(); tc.description = json_test.clone(); output_env.write_file(json_test, &serde_json::to_string_pretty(&tc).unwrap()); - single_step_test(tc, env, root_env, output_env); + fuzz_single_step_test(tc, env, root_env, output_env); } fn model_based_test_batch(batch: ApalacheTestBatch) -> Vec<(String, String)> { @@ -186,9 +629,10 @@ fn model_based_test_batch(batch: ApalacheTestBatch) -> Vec<(String, String)> { const TEST_DIR: &str = "./tests/support/model_based"; #[test] +#[ignore] fn run_model_based_single_step_tests() { let mut tester = Tester::new("test_run", TEST_DIR); - tester.add_test_with_env("static model-based single-step test", single_step_test); + tester.add_test_with_env("static model-based single-step test", fuzz_single_step_test); tester.add_test_with_env("full model-based single-step test", model_based_test); tester.add_test_batch(model_based_test_batch); tester.run_foreach_in_dir(""); diff --git a/light-client/tests/support/bisection/multi_peer/conflicting_headers.json b/light-client/tests/support/bisection/multi_peer/conflicting_headers.json index 91c1b5012..9a7a40300 100644 --- a/light-client/tests/support/bisection/multi_peer/conflicting_headers.json +++ b/light-client/tests/support/bisection/multi_peer/conflicting_headers.json @@ -94,7 +94,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -125,7 +126,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -210,7 +212,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -241,7 +244,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -326,7 +330,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -357,7 +362,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -442,7 +448,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -491,7 +498,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -606,7 +614,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -655,7 +664,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } } ] @@ -748,7 +758,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -779,7 +790,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -864,7 +876,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -895,7 +908,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -980,7 +994,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1011,7 +1026,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1096,7 +1112,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1145,7 +1162,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -1260,7 +1278,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1309,7 +1328,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } } ] diff --git a/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_one_of_the_witnesses.json b/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_one_of_the_witnesses.json index fca2166f4..06f2d4734 100644 --- a/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_one_of_the_witnesses.json +++ b/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_one_of_the_witnesses.json @@ -94,7 +94,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -125,7 +126,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -210,7 +212,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -241,7 +244,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -326,7 +330,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -357,7 +362,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -442,7 +448,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -473,7 +480,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -558,7 +566,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -589,7 +598,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -674,7 +684,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -705,7 +716,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -790,7 +802,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -821,7 +834,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -906,7 +920,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -937,7 +952,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1022,7 +1038,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1053,7 +1070,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1138,7 +1156,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1169,7 +1188,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1254,7 +1274,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1285,7 +1306,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } } ] @@ -1378,7 +1400,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1409,7 +1432,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -1494,7 +1518,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1525,7 +1550,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1610,7 +1636,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1641,7 +1668,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1726,7 +1754,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1757,7 +1786,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1842,7 +1872,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1873,7 +1904,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1958,7 +1990,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1989,7 +2022,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2074,7 +2108,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2105,7 +2140,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2190,7 +2226,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2221,7 +2258,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2306,7 +2344,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2337,7 +2376,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2422,7 +2462,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2453,7 +2494,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2538,7 +2580,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2569,7 +2612,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } } ] @@ -2662,7 +2706,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2693,7 +2738,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -2778,7 +2824,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2809,7 +2856,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2894,7 +2942,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2925,7 +2974,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -3010,7 +3060,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -3041,7 +3092,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -3126,7 +3178,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -3157,7 +3210,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -3242,7 +3296,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -3273,7 +3328,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -3358,7 +3414,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -3389,7 +3446,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -3474,7 +3532,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -3505,7 +3564,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -3590,7 +3650,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -3621,7 +3682,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -3706,7 +3768,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -3737,7 +3800,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -3822,7 +3886,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -3853,7 +3918,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } } ] diff --git a/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_the_only_witness.json b/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_the_only_witness.json index 86b3cdb2d..55d93fcb2 100644 --- a/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_the_only_witness.json +++ b/light-client/tests/support/bisection/multi_peer/conflicting_valid_commits_from_the_only_witness.json @@ -94,7 +94,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -125,7 +126,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -210,7 +212,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -241,7 +244,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -326,7 +330,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -357,7 +362,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -442,7 +448,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -473,7 +480,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -558,7 +566,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -589,7 +598,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -674,7 +684,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -705,7 +716,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -790,7 +802,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -821,7 +834,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -906,7 +920,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -937,7 +952,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1022,7 +1038,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1053,7 +1070,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1138,7 +1156,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1169,7 +1188,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1254,7 +1274,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1285,7 +1306,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } } ] @@ -1378,7 +1400,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1409,7 +1432,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -1494,7 +1518,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1525,7 +1550,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1610,7 +1636,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1641,7 +1668,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1726,7 +1754,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1757,7 +1786,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1842,7 +1872,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1873,7 +1904,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1958,7 +1990,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1989,7 +2022,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2074,7 +2108,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2105,7 +2140,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2190,7 +2226,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2221,7 +2258,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2306,7 +2344,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2337,7 +2376,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2422,7 +2462,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2453,7 +2494,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2538,7 +2580,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2569,7 +2612,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } } ] diff --git a/light-client/tests/support/bisection/multi_peer/malicious_validator_set.json b/light-client/tests/support/bisection/multi_peer/malicious_validator_set.json index 32274e895..a373856ca 100644 --- a/light-client/tests/support/bisection/multi_peer/malicious_validator_set.json +++ b/light-client/tests/support/bisection/multi_peer/malicious_validator_set.json @@ -94,7 +94,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -125,7 +126,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -210,7 +212,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -241,7 +244,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -326,7 +330,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -357,7 +362,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -442,7 +448,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -473,7 +480,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -558,7 +566,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -589,7 +598,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -674,7 +684,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -705,7 +716,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -790,7 +802,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -821,7 +834,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -906,7 +920,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -937,7 +952,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1022,7 +1038,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1053,7 +1070,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1138,7 +1156,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1169,7 +1188,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1254,7 +1274,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1285,7 +1306,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } } ] @@ -1378,7 +1400,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1409,7 +1432,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -1494,7 +1518,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1525,7 +1550,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1610,7 +1636,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1641,7 +1668,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1726,7 +1754,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1757,7 +1786,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1842,7 +1872,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1873,7 +1904,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1958,7 +1990,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1989,7 +2022,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2074,7 +2108,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2105,7 +2140,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2190,7 +2226,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2221,7 +2258,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2306,7 +2344,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2337,7 +2376,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2422,7 +2462,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2453,7 +2494,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2538,7 +2580,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2569,7 +2612,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } } ] diff --git a/light-client/tests/support/bisection/single_peer/header_out_of_trusting_period.json b/light-client/tests/support/bisection/single_peer/header_out_of_trusting_period.json index d7b2f87de..0729057be 100644 --- a/light-client/tests/support/bisection/single_peer/header_out_of_trusting_period.json +++ b/light-client/tests/support/bisection/single_peer/header_out_of_trusting_period.json @@ -94,7 +94,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -125,7 +126,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -210,7 +212,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -241,7 +244,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -326,7 +330,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -357,7 +362,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -442,7 +448,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -473,7 +480,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -558,7 +566,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -589,7 +598,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -674,7 +684,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -705,7 +716,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -790,7 +802,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -821,7 +834,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -906,7 +920,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -937,7 +952,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1022,7 +1038,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1053,7 +1070,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1138,7 +1156,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1169,7 +1188,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1254,7 +1274,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1285,7 +1306,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } } ] @@ -1378,7 +1400,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1409,7 +1432,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" } }, { @@ -1494,7 +1518,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1525,7 +1550,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1610,7 +1636,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1641,7 +1668,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1726,7 +1754,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1757,7 +1786,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1842,7 +1872,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1873,7 +1904,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -1958,7 +1990,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1989,7 +2022,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2074,7 +2108,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2105,7 +2140,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2190,7 +2226,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2221,7 +2258,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2306,7 +2344,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2337,7 +2376,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2422,7 +2462,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2453,7 +2494,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } }, { @@ -2538,7 +2580,8 @@ }, "voting_power": "50", "proposer_priority": "0" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -2569,7 +2612,8 @@ }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" } } ] diff --git a/light-client/tests/support/bisection/single_peer/not_enough_commits.json b/light-client/tests/support/bisection/single_peer/not_enough_commits.json index 90a636f17..40b3ce101 100644 --- a/light-client/tests/support/bisection/single_peer/not_enough_commits.json +++ b/light-client/tests/support/bisection/single_peer/not_enough_commits.json @@ -124,7 +124,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -173,7 +174,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" } }, { @@ -288,7 +290,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -337,7 +340,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -452,7 +456,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -501,7 +506,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -616,7 +622,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -665,7 +672,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -780,7 +788,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -829,7 +838,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -944,7 +954,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -993,7 +1004,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } } ] @@ -1116,7 +1128,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1165,7 +1178,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" } }, { @@ -1280,7 +1294,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1329,7 +1344,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -1444,7 +1460,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1493,7 +1510,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -1608,7 +1626,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1657,7 +1676,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -1772,7 +1792,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1821,7 +1842,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } }, { @@ -1936,7 +1958,8 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -1985,7 +2008,8 @@ }, "voting_power": "50", "proposer_priority": "-150" - } + }, + "total_voting_power": "0" } } ] diff --git a/light-client/tests/support/model_based/Blockchain_002_draft.tla b/light-client/tests/support/model_based/Blockchain_003_draft.tla similarity index 97% rename from light-client/tests/support/model_based/Blockchain_002_draft.tla rename to light-client/tests/support/model_based/Blockchain_003_draft.tla index f2ca5aba5..3981afadb 100644 --- a/light-client/tests/support/model_based/Blockchain_002_draft.tla +++ b/light-client/tests/support/model_based/Blockchain_003_draft.tla @@ -1,4 +1,4 @@ ------------------------- MODULE Blockchain_002_draft ----------------------------- +------------------------ MODULE Blockchain_003_draft ----------------------------- (* This is a high-level specification of Tendermint blockchain that is designed specifically for the light client. @@ -110,7 +110,7 @@ FaultAssumption(pFaultyNodes, pNow, pBlockchain) == (* Can a block be produced by a correct peer, or an authenticated Byzantine peer *) IsLightBlockAllowedByDigitalSignatures(ht, block) == \/ block.header = blockchain[ht] \* signed by correct and faulty (maybe) - \/ block.Commits \subseteq Faulty /\ block.header.height = ht /\ block.header.time >= 0 \* signed only by faulty + \/ block.Commits \subseteq Faulty /\ block.header.time >= 0 \* signed only by faulty (* Initialize the blockchain to the ultimate height right in the initial states. diff --git a/light-client/tests/support/model_based/LightTests.tla b/light-client/tests/support/model_based/LightTests.tla index d22b3f10e..0b44616b0 100644 --- a/light-client/tests/support/model_based/LightTests.tla +++ b/light-client/tests/support/model_based/LightTests.tla @@ -1,6 +1,6 @@ ------------------------- MODULE LightTests --------------------------- -EXTENDS Lightclient_002_draft +EXTENDS Lightclient_003_draft (* The light client history, which is the function mapping states 0..nprobes to the record with fields: - verified: the latest verified block in the previous state @@ -29,6 +29,13 @@ NextTest == ELSE history[n] ] +\* Some useful operators for writing tests + +LightBlock(st) == history[st].current +Height(st) == history[st].current.header.height +ValSet(st) == LightBlock(st).header.VS +ValCommits(st) == LightBlock(st).Commits + \* Test an execution that finishes with failure TestFailure == /\ state = "finishedFailure" @@ -78,6 +85,93 @@ Test3NotEnoughTrustFailure == /\ state = "finishedFailure" /\ ThreeNotEnoughTrust +TestNonMonotonicHeight == + /\ \E s \in DOMAIN history : + \* this is wrong + /\ history[s].current.header.height <= history[s].verified.header.height + \* everything else is correct + /\ history[s].current.header /= history[s].verified.header + /\ history[s].current.header.time > history[s].verified.header.time + /\ history[s].current.header.time < history[s].now + /\ history[s].verified.header.time + TRUSTING_PERIOD > history[s].now + /\ history[s].current.Commits /= ({} <: {STRING}) + /\ history[s].current.Commits \subseteq history[s].current.header.VS + +(* +Following three tests have been disabled for now, +please refer issue: https://github.com/informalsystems/tendermint-rs/issues/659 +TestEmptyCommitEmptyValset == + /\ \E s \in DOMAIN history : + \* this is wrong + /\ history[s].current.Commits = ({} <: {STRING}) + /\ ValSet(s) = ({} <: {STRING}) + \* everything else is correct + /\ history[s].current.header /= history[s].verified.header + /\ history[s].current.header.height > history[s].verified.header.height + /\ history[s].current.header.time > history[s].verified.header.time + /\ history[s].current.header.time < history[s].now + /\ history[s].verified.header.time + TRUSTING_PERIOD > history[s].now + +TestEmptyCommitNonEmptyValset == + /\ \E s \in DOMAIN history : + \* this is wrong + /\ history[s].current.Commits = ({} <: {STRING}) + /\ ValSet(s) /= ({} <: {STRING}) + \* everything else is correct + /\ history[s].current.header /= history[s].verified.header + /\ history[s].current.header.height > history[s].verified.header.height + /\ history[s].current.header.time > history[s].verified.header.time + /\ history[s].current.header.time < history[s].now + /\ history[s].verified.header.time + TRUSTING_PERIOD > history[s].now + +TestLessThanTwoThirdsCommit == + /\ \E s \in DOMAIN history : + \* this is wrong + LET CMS == history[s].current.Commits + UVS == history[s].current.header.VS + TVS == history[s].verified.header.VS + IN + /\ history[s].current.header.height > history[s].verified.header.height + 1 + /\ CMS /= ({} <: {STRING}) + /\ CMS \subseteq UVS + /\ 3 * Cardinality(CMS) < 2 * Cardinality(UVS) + /\ 3 * Cardinality(CMS \intersect TVS) < Cardinality(TVS) + \* everything else is correct + /\ history[s].current.header /= history[s].verified.header + /\ history[s].current.header.height > history[s].verified.header.height + /\ history[s].current.header.time > history[s].verified.header.time + /\ history[s].current.header.time < history[s].now + /\ history[s].verified.header.time + TRUSTING_PERIOD > history[s].now +*) +\* Time-related tests + +\* Test an execution where a header is received from the future +TestHeaderFromFuture == + /\ \E s \in DOMAIN history : + /\ history[s].now < history[s].current.header.time + /\ history[s].now < history[s].verified.header.time + TRUSTING_PERIOD + +\* Test an execution where the untrusted header time is before the trusted header time +TestUntrustedBeforeTrusted == + /\ \E s \in DOMAIN history : + LET CMS == history[s].current.Commits + UVS == history[s].current.header.VS + IN + /\ history[s].current.header.time < history[s].verified.header.time + /\ history[s].now < history[s].verified.header.time + TRUSTING_PERIOD + /\ CMS /= ({} <: {STRING}) + /\ UVS /= ({} <: {STRING}) + /\ Cardinality(CMS) < Cardinality(UVS) + +\* Test an execution where a header is outside the trusting period +TestHeaderNotWithinTrustingPeriod == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s \in DOMAIN history : + /\ history[s].now > history[s].verified.header.time + TRUSTING_PERIOD + /\ history[s].current.header.time < history[s].now + +\* Validator set tests + \* Test an execution where the validator sets differ at each step TestValsetDifferentAllSteps == /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT @@ -85,18 +179,127 @@ TestValsetDifferentAllSteps == s1 /= s2 => history[s1].current.header.VS /= history[s2].current.header.VS +TestHalfValsetChanges == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ Cardinality(ValSet(s1)) >= 3 + /\ 2 * Cardinality(ValSet(s1) \intersect ValSet(s2)) < Cardinality(ValSet(s1)) -\* Time-related tests +TestHalfValsetChangesVerdictSuccess == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ history[s2].verdict = "SUCCESS" + /\ Cardinality(ValSet(s1)) >= 3 + /\ 2 * Cardinality(ValSet(s1) \intersect ValSet(s2)) < Cardinality(ValSet(s1)) -\* Test an execution where a header is received from the future -TestHeaderFromFuture == +TestHalfValsetChangesVerdictNotEnoughTrust == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ history[s2].verdict = "NOT_ENOUGH_TRUST" + /\ Cardinality(ValSet(s1)) >= 3 + /\ 2 * Cardinality(ValSet(s1) \intersect ValSet(s2)) < Cardinality(ValSet(s1)) + +TestValsetDoubles == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ Cardinality(ValSet(s1)) >= 2 + /\ Cardinality(ValSet(s2)) = 2 * Cardinality(ValSet(s1)) + +TestValsetHalves == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ Cardinality(ValSet(s1)) >= 4 + /\ Cardinality(ValSet(s1)) = 2 * Cardinality(ValSet(s2)) + +TestValsetChangesFully == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ Cardinality(ValSet(s1)) >= 2 + /\ ValSet(s1) \intersect ValSet(s2) = ({} <: {STRING}) + +TestLessThanThirdValsetChanges == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ Cardinality(ValSet(s1)) >= 4 + /\ ValSet(s2) /= ValSet(s1) + /\ 3 * Cardinality(ValSet(s2) \ ValSet(s1)) < Cardinality(ValSet(s1)) + +TestMoreThanTwoThirdsValsetChanges == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ Cardinality(ValSet(s1)) >= 4 + /\ 3 * Cardinality(ValSet(s2) \ ValSet(s1)) > 2 * Cardinality(ValSet(s1)) + +TestOneThirdValsetChanges == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ Cardinality(ValSet(s1)) >= 3 + /\ 3 * Cardinality(ValSet(s2) \ ValSet(s1)) = Cardinality(ValSet(s1)) + +TestTwoThirdsValsetChanges == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ Cardinality(ValSet(s1)) >= 3 + /\ 3 * Cardinality(ValSet(s2) \ ValSet(s1)) = 2 * Cardinality(ValSet(s1)) + +TestLessThanTwoThirdsSign == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT /\ \E s \in DOMAIN history : - history[s].now < history[s].current.header.time + /\ history[s].verified.header.time + TRUSTING_PERIOD > history[s].now + \* this is wrong + /\ \E commits \in SUBSET AllNodes: + \E block \in BC!LightBlocks: + /\ 3 * Cardinality(commits) < 2 * Cardinality(ValSet(s)) + /\ CopyLightBlockFromChain(block, Height(s)) + /\ LightBlock(s) = [ block EXCEPT !.Commits = commits] -\* Test an execution where the untrusted header time is before the trusted header time -TestUntrustedBeforeTrusted == +TestMoreThanTwoThirdsSign == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT /\ \E s \in DOMAIN history : - history[s].current.header.time < history[s].verified.header.time + 3 * Cardinality(ValCommits(s)) >= 2 * Cardinality(ValSet(s)) ============================================================================ + + \* When Apalache is fixed to work with operator params, we should rewrite the validator set tests as shown below + +\* A configurable test for two neighbor valsets +TestNeighborValsets(test(_,_)) == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ test(ValSet(s1), ValSet(s2)) + +\* A configurable test for two neighbor valsets and expected verdict +TestNeighborValsetsVerdict(test(_,_), want_verdict) == + /\ Cardinality(DOMAIN fetchedLightBlocks) = TARGET_HEIGHT + /\ \E s1, s2 \in DOMAIN history : + /\ s2 = s1 + 1 + /\ test(ValSet(s1), ValSet(s2)) + /\ history[s2].verdict = want_verdict + +HalfValsetChanges(vs1, vs2) == + /\ Cardinality(vs1) >= 3 + /\ 2 * Cardinality(vs1 \intersect vs2) < Cardinality(vs1) + +TestHalfValsetChanges == TestNeighborValsets(HalfValsetChanges) +TestHalfValsetChangesVerdictSuccess == TestNeighborValsetsVerdict(HalfValsetChanges, "SUCCESS") +TestHalfValsetChangesVerdictNotEnoughTrust == TestNeighborValsetsVerdict(HalfValsetChanges, "NOT_ENOUGH_TRUST") + +ValsetDoubles(vs1, vs2) == + /\ Cardinality(vs1) >= 2 + /\ Cardinality(vs2) = 2 * Cardinality(vs1) + +TestValsetDoubles == TestNeighborValsets(ValsetDoubles) +TestValsetDoublesVerdictSuccess == TestNeighborValsetsVerdict(ValsetDoubles, "SUCCESS") +TestValsetDoublesVerdictNotEnoughTrust == TestNeighborValsetsVerdict(ValsetDoubles, "NOT_ENOUGH_TRUST") diff --git a/light-client/tests/support/model_based/Lightclient_002_draft.tla b/light-client/tests/support/model_based/Lightclient_003_draft.tla similarity index 98% rename from light-client/tests/support/model_based/Lightclient_002_draft.tla rename to light-client/tests/support/model_based/Lightclient_003_draft.tla index 32c807f6e..c4b238893 100644 --- a/light-client/tests/support/model_based/Lightclient_002_draft.tla +++ b/light-client/tests/support/model_based/Lightclient_003_draft.tla @@ -1,8 +1,8 @@ --------------------------- MODULE Lightclient_002_draft ---------------------------- +-------------------------- MODULE Lightclient_003_draft ---------------------------- (** * A state-machine specification of the lite client, following the English spec: * - * https://github.com/informalsystems/tendermint-rs/blob/master/docs/spec/lightclient/verification.md + * https://github.com/tendermint/spec/blob/master/rust-spec/lightclient/verification/verification.md *) EXTENDS Integers, FiniteSets @@ -71,7 +71,7 @@ bcvars == <> *) ULTIMATE_HEIGHT == TARGET_HEIGHT + 1 -BC == INSTANCE Blockchain_002_draft WITH +BC == INSTANCE Blockchain_003_draft WITH now <- now, blockchain <- blockchain, Faulty <- Faulty (************************** Lite client ************************************) @@ -461,5 +461,6 @@ Complexity == *) ============================================================================= \* Modification History +\* Last modified Fri Oct 16 15:10:35 CEST 2020 by andrey \* Last modified Fri Jun 26 12:08:28 CEST 2020 by igor \* Created Wed Oct 02 16:39:42 CEST 2019 by igor diff --git a/light-client/tests/support/model_based/MC100_2_faulty.json b/light-client/tests/support/model_based/MC100_2_faulty.json new file mode 100644 index 000000000..2237a6fd1 --- /dev/null +++ b/light-client/tests/support/model_based/MC100_2_faulty.json @@ -0,0 +1,9 @@ +{ + "description": "Tests for 100 validators, target height 2, with faulty primary", + "model": "MC100_2_faulty.tla", + "timeout": 300, + "tests": [ + "TestSuccess", + "TestFailure" + ] +} diff --git a/light-client/tests/support/model_based/MC100_2_faulty.tla b/light-client/tests/support/model_based/MC100_2_faulty.tla new file mode 100644 index 000000000..b24a32802 --- /dev/null +++ b/light-client/tests/support/model_based/MC100_2_faulty.tla @@ -0,0 +1,28 @@ +------------------------- MODULE MC100_2_faulty --------------------------- + +AllNodes == { + "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9", "n10", + "n11", "n12", "n13", "n14", "n15", "n16", "n17", "n18", "n19", "n20", + "n21", "n22", "n23", "n24", "n25", "n26", "n27", "n28", "n29", "n30", + "n31", "n32", "n33", "n34", "n35", "n36", "n37", "n38", "n39", "n40", + "n41", "n42", "n43", "n44", "n45", "n46", "n47", "n48", "n49", "n50", + "n51", "n52", "n53", "n54", "n55", "n56", "n57", "n58", "n59", "n60", + "n61", "n62", "n63", "n64", "n65", "n66", "n67", "n68", "n69", "n70", + "n71", "n72", "n73", "n74", "n75", "n76", "n77", "n78", "n79", "n80", + "n81", "n82", "n83", "n84", "n85", "n86", "n87", "n88", "n89", "n90", + "n91", "n92", "n93", "n94", "n95", "n96", "n97", "n98", "n99", "n100" +} +TRUSTED_HEIGHT == 1 +TARGET_HEIGHT == 2 +TRUSTING_PERIOD == 1400 \* two weeks, one day is 100 time units :-) +IS_PRIMARY_CORRECT == FALSE + +VARIABLES + state, nextHeight, fetchedLightBlocks, lightBlockStatus, latestVerified, + nprobes, now, blockchain, Faulty, + prevVerified, prevCurrent, prevNow, prevVerdict, + history + +INSTANCE LightTests + +============================================================================ diff --git a/light-client/tests/support/model_based/MC10_3_faulty.json b/light-client/tests/support/model_based/MC10_3_faulty.json new file mode 100644 index 000000000..dd063bf64 --- /dev/null +++ b/light-client/tests/support/model_based/MC10_3_faulty.json @@ -0,0 +1,26 @@ +{ + "description": "Tests for 10 validators, target height 3, with faulty primary", + "model": "MC10_3_faulty.tla", + "timeout": 150, + "tests": [ + "TestSuccess", + "TestFailure", + "TestNonMonotonicHeight", + "TestHeaderFromFuture", + "TestUntrustedBeforeTrusted", + "TestHeaderNotWithinTrustingPeriod", + "TestValsetDifferentAllSteps", + "TestHalfValsetChanges", + "TestHalfValsetChangesVerdictSuccess", + "TestHalfValsetChangesVerdictNotEnoughTrust", + "TestValsetDoubles", + "TestValsetHalves", + "TestValsetChangesFully", + "TestLessThanThirdValsetChanges", + "TestMoreThanTwoThirdsValsetChanges", + "TestOneThirdValsetChanges", + "TestTwoThirdsValsetChanges", + "TestLessThanTwoThirdsSign", + "TestMoreThanTwoThirdsSign" + ] +} diff --git a/light-client/tests/support/model_based/MC10_3_faulty.tla b/light-client/tests/support/model_based/MC10_3_faulty.tla new file mode 100644 index 000000000..e40188154 --- /dev/null +++ b/light-client/tests/support/model_based/MC10_3_faulty.tla @@ -0,0 +1,17 @@ +------------------------- MODULE MC10_3_faulty --------------------------- + +AllNodes == {"n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9", "n10"} +TRUSTED_HEIGHT == 1 +TARGET_HEIGHT == 3 +TRUSTING_PERIOD == 1400 \* two weeks, one day is 100 time units :-) +IS_PRIMARY_CORRECT == FALSE + +VARIABLES + state, nextHeight, fetchedLightBlocks, lightBlockStatus, latestVerified, + nprobes, now, blockchain, Faulty, + prevVerified, prevCurrent, prevNow, prevVerdict, + history + +INSTANCE LightTests + +============================================================================ diff --git a/light-client/tests/support/model_based/MC4_4_faulty.json b/light-client/tests/support/model_based/MC4_4_faulty.json index cbb8a6abf..321d27cc5 100644 --- a/light-client/tests/support/model_based/MC4_4_faulty.json +++ b/light-client/tests/support/model_based/MC4_4_faulty.json @@ -9,8 +9,20 @@ "Test2NotEnoughTrustFailure", "Test3NotEnoughTrustSuccess", "Test3NotEnoughTrustFailure", - "TestValsetDifferentAllSteps", + "TestNonMonotonicHeight", "TestHeaderFromFuture", - "TestUntrustedBeforeTrusted" + "TestUntrustedBeforeTrusted", + "TestHeaderNotWithinTrustingPeriod", + "TestValsetDifferentAllSteps", + "TestHalfValsetChanges", + "TestHalfValsetChangesVerdictSuccess", + "TestHalfValsetChangesVerdictNotEnoughTrust", + "TestValsetDoubles", + "TestValsetHalves", + "TestValsetChangesFully", + "TestLessThanThirdValsetChanges", + "TestOneThirdValsetChanges", + "TestLessThanTwoThirdsSign", + "TestMoreThanTwoThirdsSign" ] } diff --git a/light-client/tests/support/model_based/MC50_2_faulty.json b/light-client/tests/support/model_based/MC50_2_faulty.json new file mode 100644 index 000000000..63c21cd8a --- /dev/null +++ b/light-client/tests/support/model_based/MC50_2_faulty.json @@ -0,0 +1,9 @@ +{ + "description": "Tests for 50 validators, target height 2, with faulty primary", + "model": "MC50_2_faulty.tla", + "timeout": 150, + "tests": [ + "TestSuccess", + "TestFailure" + ] +} diff --git a/light-client/tests/support/model_based/MC50_2_faulty.tla b/light-client/tests/support/model_based/MC50_2_faulty.tla new file mode 100644 index 000000000..761f7d31e --- /dev/null +++ b/light-client/tests/support/model_based/MC50_2_faulty.tla @@ -0,0 +1,23 @@ +------------------------- MODULE MC50_2_faulty --------------------------- + +AllNodes == { + "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9", "n10", + "n11", "n12", "n13", "n14", "n15", "n16", "n17", "n18", "n19", "n20", + "n21", "n22", "n23", "n24", "n25", "n26", "n27", "n28", "n29", "n30", + "n31", "n32", "n33", "n34", "n35", "n36", "n37", "n38", "n39", "n40", + "n41", "n42", "n43", "n44", "n45", "n46", "n47", "n48", "n49", "n50" +} +TRUSTED_HEIGHT == 1 +TARGET_HEIGHT == 2 +TRUSTING_PERIOD == 1400 \* two weeks, one day is 100 time units :-) +IS_PRIMARY_CORRECT == FALSE + +VARIABLES + state, nextHeight, fetchedLightBlocks, lightBlockStatus, latestVerified, + nprobes, now, blockchain, Faulty, + prevVerified, prevCurrent, prevNow, prevVerdict, + history + +INSTANCE LightTests + +============================================================================ diff --git a/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestFailure.json b/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestFailure.json new file mode 100644 index 000000000..0eb022d1f --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestFailure.json @@ -0,0 +1,6494 @@ +{ + "description": "MC100_2_faulty_TestFailure.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "043E6934A5E887D08CE06A090F61F0EDA9A7A74F36DAF4F2A0D3EF8735A0E74F", + "next_validators_hash": "C1C1BC759CF9FD0AEEA9E393AD2CDAB4262F9C03B10927707BE05B0D9B49E030", + "consensus_hash": "043E6934A5E887D08CE06A090F61F0EDA9A7A74F36DAF4F2A0D3EF8735A0E74F", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "869A4F22FB823BC11C2E14C8883BA5C6D3BB28B584492BB8380391048E22CE0A", + "part_set_header": { + "total": 1, + "hash": "869A4F22FB823BC11C2E14C8883BA5C6D3BB28B584492BB8380391048E22CE0A" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "CntcBqNehaljsyGIZak8KWEkvpKPLgn5BNbsxe3eY0piSg54PYg7TZhPJi/GIwUwqpel4fSugDlL9WxHFNy4AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "04CA9AA40B76FF67B56D5A9285CB9AE5ED2F3247", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "oPnNyM9FvZSfGkh84+i9UuTJje8iXr8Yz8yf68STjeAjvyqUf2YzLi7Ou9+zVSKZRobL9F9QW/wwv8hCznFlBw==" + }, + { + "block_id_flag": 2, + "validator_address": "050E6732CEC76C71C0CF6784EB4A4E2CEE8C23B0", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ytPEr9ewoPaF2VMCBJCqmdPVbF59AEvAaQDrrQK05tuHdnxj4gv2AxEXAwauRJhnYPtArT4rnjOsp9nTHrWuBA==" + }, + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "OT2nvO/iU3EFXa8LpHGB1nritueGzD1KMabQt8I74b1Otw+iuKky8+qKj3MRJ1+MJpjoosZk+hMRDem16S46BA==" + }, + { + "block_id_flag": 2, + "validator_address": "0C7A21D9023613B0F814882F40694D07FB508388", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "aVPj4RzGyQV3md5kGLl/6RaOAbd9V3fB/3fM47OLyC+Ol+81ZHUT/7SMbUB2QHYY5XfViXfky4kTESt2UDlHBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TzoEz+fLTUk9J0EzjCa6WzxSgZcUXxG07dceWrjOdBxtDUSl6knKMFugJRn6k7a48i4bX3KXucQMiXONtObCBA==" + }, + { + "block_id_flag": 2, + "validator_address": "239D1ACB182F9EC413D6AD8BED3A13447318B95F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "vQRFM55KQ9cpUEDVfmvU66QmgYn2BAOLyyOw9eBM8DNcWuIxxko0ZbvoaBrB9xBAVc945cxLTbVZSuDc4kV6Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "23A53F06EAAF2B827B9AF8B6866DEAADE5A5CAA3", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2KHrqTnwCNZKuuIIte/XHqZoCYRMbpTUHJ/UGpmSa/jp6DDSC9PFXLKUa9x2m+1WzXQeFcR4uQ2ngHqRwi09Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "26E91E700545D79E8A18092C393DB76294DF393A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "sSuBAgA1Wn7+BKFYFUY+LTfeXQtRclnOgdlFzhEczK6FvqawQPUy/VoXOJdwOvuJJ0iSWF19mxpT01YxtXPVAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "M0AooZuYojfi22V+/E9H2tcnxNDSxXGMf4CKtp+TqB+s7YDQsRT9M70ONsdrMHOBlOv9fRcQaIOuiZQAAzK1Bg==" + }, + { + "block_id_flag": 2, + "validator_address": "2D963CD0FA15D15C1C200D578CCDC2C692B72036", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "7sIR6Y2yEfvaGg7HTLiyBJs2Cv0o/ggHJALr5wPXnnqJPGE/DlOlYfJ/96E8P2smrHxb4GHbHwuCjcn2qLhACQ==" + }, + { + "block_id_flag": 2, + "validator_address": "31580E874C4F84AA5EB5F986FA70B74F8D1865BE", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Xz14x8NUBRIAq96j+Bj1tcsRfUMnSRejEnBmftG3pmg8m3G+/p4kiVbbSPkO/IXeJ6l/IAnkdkskWiVRqC9mDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "319549CEC8B9DADB70C7E8DBBC8FE5D550398506", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "SlGm1I+QoFIwr6rGPEo849rcthDLgtza88tTHuZggdymghkb5vSdka7DQ3UMxRMZcTHbys23LPIDV4mZar11DQ==" + }, + { + "block_id_flag": 2, + "validator_address": "361491162A6178776B903E57AB7C4D909394B4B4", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "mfurv4gbxic3/9FZtimKpL81oOi7dBb0nSzczKRBGLmZlAgs8GxRidMsibSE9k7s4vRrL3t+UVePFMHFU8wBBw==" + }, + { + "block_id_flag": 2, + "validator_address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "R30QBw85/RGy9qOFcEj+dxUiKmTHT2xJrVgRn573wT2r9JA5VAZsKlf0CMoTf9WULGeoUaH5LpRyJVTePLoMDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "GYB/ouVtnohYZcItjrUAqmhkeD9tsmauM9l9YhScLKeQJGAIMfmB8vcrriMrHCtzn2+NxYsAUztKP+qNmPr9Cg==" + }, + { + "block_id_flag": 2, + "validator_address": "3C733B78F612FB791744711958D8BC4A3D1B54BF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "MedLETb3WJIj3+j3XpTIMOwaAspZ7mUTiYRCfRjMRXBbnTggHWKQKSn4uSLDXY3/a4TU49HyIeimYUWk1Y5KAg==" + }, + { + "block_id_flag": 2, + "validator_address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "UhY0z8LzlVn/PczUeXy5KohUgVVRlReAkC61FyjO+GkcmFwjLrKjnI7HtHmFCw+SuKThiScy0MLGSBpIE9nBCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "3D7E3723C921B1D35B52921B8511142BF5976863", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "U4SrDKrDvvpe5z9hz0Scl/jAT6hP/4S+NzX/GSE4JcBQjqFDXV9ytqIk5hET6MkifPTme68oNLnPaeyKV9LHAw==" + }, + { + "block_id_flag": 2, + "validator_address": "400C0199DEC08A2DBFDF5D081AC15FD6685E8870", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9r9sFBb3as12MdLpiDhnSXJSd3YCADygBJNoJDk/6LVLrzmtxrAddNAiGV36DZWtXwZUcd3Q44mfnph2PiHeCg==" + }, + { + "block_id_flag": 2, + "validator_address": "416A8E60A478C20CEB021A84425D8B457558D4E9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QZP6S9mW1N32UlhWAgpnw+URthJfyOUrGyogkLqubBphDq9c5XeQ4W1DnBo9VzLiBplSJ1vm07k59ZnOQ7FEDA==" + }, + { + "block_id_flag": 2, + "validator_address": "42D162EDB46B7C1FEA616810A7617A6369958ADE", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "s++HZjbMOZGDjRmElOpI5AEGfK36S0/iVI4UTCZ3Q9EFj13dIs2ggYkadDoPnYvi9DNGUj8sNovjzm6L6/93Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NVboYEV1y4/3jwfYUdEbCl9bsYqRhOhReQJzCjfqC09wMW9WDc3pE0k2dCF7IosnOF/DUBqzApEwr29ZZz5UDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "wprH9jfJHIzhL3KpJ5Urrm3eu0smVXeXrUQrn75jE0Lq94GDSPJHdM3XJ5tay2GFw7N/9Q4nPTVwP59ek7xRCg==" + }, + { + "block_id_flag": 2, + "validator_address": "4D9FD26B2372FBFE05C0452D534C6014C4D7F887", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8lZm01qGqYVENhi0M6/0ZlhpDdYMexfC2TqVL9CeSESrm8tTcpdPc4NwUbjnJoRfEeKcUUtcH7fqlljrAOtYCw==" + }, + { + "block_id_flag": 2, + "validator_address": "55027F5FDE2DFC9F1C956D4700A0E60E47BC8126", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "fABMR6DDTLCdfRwFrfhkPEArAkgy1NXJQMiYH2fyCejYH24wlPWBDNPK56udiPDZWcj9BIRF5J/p4q0pqkb2DA==" + }, + { + "block_id_flag": 2, + "validator_address": "5AE3C3EDDD4C4F12E0A45618C9A7EE302BF0C466", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FiB9Aun/kr3v9yfeGBB9KiRs6/ZV9YbNMNFCS/YYDyumjcx4mscEfcWPYGu4fisoOY/uBvsgjKUvt6gNHA4qBA==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "tJ1ruH84NdbIz7XzolfhmYmKuuJrQ+i8bAjfp6fAMdf04WmSjGsAvzBsvF4WBe+7GCK5mC7wRv+YlmAOzDmqAA==" + }, + { + "block_id_flag": 2, + "validator_address": "627231A077D55F34733997ECD928CE2C511F126C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "dUH2uezgUtJbMRYmimPaqWd+JiAHGyzdeo0+fRxq2WQMVbitj3Wbg2jidrca8a0qP6kQmqsQFyPgsFyo0BJeCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "62B738D2DFB76A0938F116B001D4AD686B75F700", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "UeiUZufruneLMwaenj0avAXpjQtQcH1cBpJyoBraxeOOm9YNkICizS0llC1bCVPG9KoZTUl+D650O/SF9zvQDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "635206EBFDCCCE8AE040DE2FF07F1508929F3ED7", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Rel93eZ8e7c31V3E5d1cS2l0B6qY+jbBN2BRes2MqTfNDMiBqEmu69dY9fDN2wBPboF4xGz/E3lmhH3QxMuqAA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "iwltquWINGuZcB8CWf8XURg9Bs4bnnylAF48v+mPR3FWtYW0ogDpUBAyfbIPcUkfPiVxkvNHp0L4y+j/N3YECQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "GQD1vitOq+1J/6AkDI6S8LS29pMMAML88Hb6Vds27ZunMYeDoBvQmJHBlpxa0boqGG/sQ8XOnCZ5mXljays9Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "6D4B3D65AD9A81CD7AE83EA598B6FD2818F7F6D1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TcC/9sjTg4UMJAihT8ivKEYzccIuDojD6IzeBIN2Gk6h9rgoAKZuQx0JRgKmxGn417bndEVGb/KKVFX7L7RyCA==" + }, + { + "block_id_flag": 2, + "validator_address": "6DC5F977934E65C23231DDC30BF273F22FF5454E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ueyYsOigQM8mPczTXfxljfaCUujvtzQURbWiCsgsyMeDICBD1JW5IzIUknJS21g3EYO9MI5E+83l1HCxlytbCw==" + }, + { + "block_id_flag": 2, + "validator_address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "hVg9zNH5QWdWFHaUryd6UeJX6AgncGISXhx5lJjNwI2kQ2Bavv14qp6TDt6GXG8DXGdvbxVslEvrV9Trj5DyAg==" + }, + { + "block_id_flag": 2, + "validator_address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ha2MlL2iJ4S+159L71y4S8KsBvB6lMODUyBUBC4+ZgxOvQa2WpLJ46GxZw1LOMws7Yd08t6AsMzmlYgK5QdKAA==" + }, + { + "block_id_flag": 2, + "validator_address": "74830E4D56CD8E0ECC47E508CBA279042A3882C9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "iSkjdyj6gY0GquO9OaPdqEzjCGYklQNg+trr6cS0M9t/iuVi/DhAvjpn3lafh+C3FOADtxI8joV2SpndPF8fBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "74C2BE39F07B51E72003D4C437535A797D2774BA", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "vXFfCf7wfKyCVk41B8He9MYrZtTknLgeucf0dmi/DA7t1Yx+TJ3atYxuDLw4b1TNyyXMXHt2jR1FftfFYqSoAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "766BE28A48C243E4F9AC3FA6B5505B6208EF4494", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "fT+oo6xLGS/PbEbMPNZBgFLy3Owwso/R+yazjieY5vpq2q/IArksTv1IbOok2OE+cw7OaLm9m2PlU+ExL88aAA==" + }, + { + "block_id_flag": 2, + "validator_address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NG5qhJBSzB3djM08WZbsOMO5ZsuLkDjz6zMFM7S66Rh/ZGShC8gdvMXMftXAmFTBXYiSRRw9wKZ8hMWNGZN3Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "7D5B8447A0C1D5E85E095C885947C4EF180BA676", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "hUhHOwEQgMTFYdQ71mwR0agxQcbnhr2zKiMKa8bru5HRvZEStp54QFgz1CywuZfRi37Wkl1gEUno3m5sfFSXDg==" + }, + { + "block_id_flag": 2, + "validator_address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "pniF2chyy0rTX4rsVUjywgVg7+jZvejVK8i4nIs6exfTtqsjApfBege+JsKzkpLgHDp/H3sl7NzTUMz+lUy0Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "wvTmZDfzpLQb0RMAnSHnYi7X8lIuYkRLfLum8BTD+qBm1U1UVeccIGKCOteQ+kKJgquyBzN0XS4QfvFeXZhaAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "BUCujDmOEVaGIP3e5W9ZNFuPI34+pNht3p0HZaIyDNV/xFtjjKeqLuEp8HSVFSvSUSv2OqCEVfjdbC6jPrH6Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4+yMFVZWOSnaSf6Qzlvx/QyEW6TwT/ZpBXEMkjsF36qU0wJBAbL1+W8IXkJmtL3kSiE2yRoU4A7Sggz+cgaCBw==" + }, + { + "block_id_flag": 2, + "validator_address": "822D9296BE1DAF413AB15B489C002F4CEAD426D7", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "E5+hLqmL9SGuogAm9Peqk929+SLZJMEtGhqjeMQsPzv0g5sYy8JBBPkI884lDMwwBhTo28EL/dqzboTVekt/BA==" + }, + { + "block_id_flag": 2, + "validator_address": "82FB9EE4538CEAA9C808E862C8D47D36C143E0DB", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "7Ej4QOxS8h5fnooRg/zWFhvzvIDOBVcqHamlniCFFDY8o32hg2rajw10tsCchXe9YE4AGOi9rKKVZ8ix19Z0Cg==" + }, + { + "block_id_flag": 2, + "validator_address": "8301D560188D8CA97B5D373B6423292FA7A1C414", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Ru8NoluUPpXswj/uSwia49huu4tpc1Evwrz9ViUTL+Yr/KN+cBSvOxOhczqkHdVGHx168GCmCzS68mFKm1V6BA==" + }, + { + "block_id_flag": 2, + "validator_address": "890C8588FAE1C90E164BFF1917A3EC93FF7AE8EF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Gs4YsqeJVLBhAAo4kvJBD++az6ZDGrV4Tfe/RTPyNnMIsaBYeXOnUTD5er0W2rwiU+qLah713Zar992VYA65Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PSTV3rxBKbAgP/JUIRou8s7yRsHBG4UYGb3cnEZUD4jjxruAbXpVQgvgkCu6AKjfG8cwxYlPdr5eqG+fF3LFAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8A0B5C8CE8B72985C325F02B580C4DBFC527EB9C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "mtCZXHm4yIcJW2Qp/NyCUAUmh37ZSofp9SS+DrUVviPkAkvFYr543Kwcm3K4ot5KIFyqQe8yL7SZSD85NZz4Cw==" + }, + { + "block_id_flag": 2, + "validator_address": "8B730D99A94FEA0729980BDBB4585DC2B7E932D3", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "lckXCUYSAPXtDtpVjra5ISeRWRSD0GUr+WC9LVUTQqKeEIohEWgOYu+QykM1gwiAkMebD8aQqLZqrnKDX6E8AA==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "KQOeZbRzKZ/O/bUlJqPsZ+g1xuCOko4zOks2FZUKVYhpgyoNO6Q/KxdZdqWegvIRJOh40mX+eOOyecU4CA4/BQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "7FAmIjurFxFgvYYqs2bpLi/CMYW503kr+r/MCUd6vGvpY7GqpjF2bPK8JaeTPMv+kW59z+MQjDaO5uGj10sqDA==" + }, + { + "block_id_flag": 2, + "validator_address": "92932AD7E082B90296C192F3113710CD6F99432E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "rZUWfNGmYsr6mePv1m3HEriol4oonYiJETaGUidKeL2RUdBNaUSXSUDC1fIy9R1+5zkVMHX32eEAUUoLvesiCA==" + }, + { + "block_id_flag": 2, + "validator_address": "93597B2726E0FDD812E38163799427FA2FF684A8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Z2E7QPHVKk3qbcZmt/Fb0M2LEsEyMY/S6zxqdxo4BPL357xlEtnEN/DD849A9aqwnDzkjP0Bk7iOdEOpi1LBDA==" + }, + { + "block_id_flag": 2, + "validator_address": "9562DE62254FB0C58E70196412E5F3C9D30B80AA", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "I2OXnmS4AjJqsARhyiAHivwq9ijy/LiRYDwSRZ4m1ZmlpUq/XW6mVTLOfW+s+WR41h6JBOtEza57aqLP9XEsDg==" + }, + { + "block_id_flag": 2, + "validator_address": "990CDD32CD8EF97E5EC9D3E9F8C25543A7EDAA33", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "OTdB0pY6tZ8k/W2yHjKZBGqpUlyhVrDEx0JHywfO3gf1ot+rRy2MDBrsBFLU1GU2SDiKsAb+YFJ4AZUMYZPCDA==" + }, + { + "block_id_flag": 2, + "validator_address": "9AE69E7D6961BB4CDAA74F99BB45A9EE25B02288", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "qO8fkE0DEtSDsXCu0Hrzez+t1h/jfFhUOPCuvlnd1bCMcnxzeUyZuY7HQuF9uie0PPHbwAiCSs31ErhdJit5Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "89CFcA34UXo5OYHvVEhAyHFhOq113GIkGSgz3sCeqXpS2gk3qGxdqH42KXLUVo3iWnHTY2VLqw8h7dIoFg+MBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9oQztI57slO6b3TxmmINOyhdC/lCJpFA5eZWFgcm8YmnwNO72joRGvmHWJmZPhDtfSUwePGmBvKcshxqbfzKDA==" + }, + { + "block_id_flag": 2, + "validator_address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5/zlU7S/zXkqQ/+9224PJSymtybsxzpArwrlKoJMapDiI7B5MLhEPruWi81JwlFQYmOta7bM4D39DryoP88uDg==" + }, + { + "block_id_flag": 2, + "validator_address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "zOx/q14lDbQPQ4yE2OJVQAq3wMVkrQ8NlDktPk+cbKEJZSLnDkY3O4A56JA/yRFX6lez8e1HT4M6wEr9LhUqBA==" + }, + { + "block_id_flag": 2, + "validator_address": "A67BF23C710F87B158BC3369684A3033D3C8112E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "wI/Jfck6yfPfNop3oe5FzfFAhZQZLrRPMaY55cduJ1zHwQSB32M0xdyBeySD1UJ6rQXVM84njE2wEAyuSMJnBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "bcB792LtSTeM3YKaUtVxI5UAXa6x++XDCvuA/OG0V9cuGgnUxl4wTcb6N1/jcpwUI21wct7DtPwDrUuaM3Z6Cw==" + }, + { + "block_id_flag": 2, + "validator_address": "AD28DEF4048F1BC51A8800A26E697A7771A6AF40", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "UODDUikOGnL1l6wR6ptpn8yCh17nrqzsOrJdDF/cltrdfup01YAoREPSuWTbXlEmqt8nRkJlazS7EZWEN+xnCw==" + }, + { + "block_id_flag": 2, + "validator_address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "G7cJ8sy3YpsdI5rYhXLrNucC/3NYMr7vksUtKt7r5LduzhNzFbmCtfRamDMDWKWka+o3zSUc+DscE6DyKJZDDA==" + }, + { + "block_id_flag": 2, + "validator_address": "AFBD6E8C17284683A951FB263DDCB856AB61A176", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "lgcuncxTM2bygVvzD3oyoG2Z7zsh3M6QsQA9EEPPTHilagD4rFJpg4gQuWZYvUs1+zQfTJ4PuxP3cBhOd+o7CQ==" + }, + { + "block_id_flag": 2, + "validator_address": "B058604741DFB193660713A02366D5A6CF1EF016", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "hbUqzCZwI/FgNWeuJ/FIH71LkRSXbdatnbvkFkpK+yawRaq7IwX3CEbX1emaxqehYAP/CjO/gzQJdFwlujEIBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "pypI4pT4wvKZEZ6wjsjh0W75s7X+h04Fwxkp/VhBW9Okn2K2sI8tkF8PV9Iw5zeq51R/3uWyXuidt65mkiSzCw==" + }, + { + "block_id_flag": 2, + "validator_address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "jCK1jRd7aBfDGH+e8fMNbA2HRIicFrQMC/ff+7TWCCHH6PrMWmRXcvSvNpyibY+kgkcvFie1T7f+J6tEyuSmCw==" + }, + { + "block_id_flag": 2, + "validator_address": "B99E8C85A4BB4886BA6E3043B3A7553A481FB9C0", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "cJw8m+IFeJ6U3oDu2fQ1QuICgh6X6AwbpdgIHt6ey8MAUwtD0msybnn6TWJDiOulE2BW5j+fw3+KdwpIc8HjAA==" + }, + { + "block_id_flag": 2, + "validator_address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "SKwzp5XsgHITHIH4tWtWRAqnSdm+9Q7aNPfqT8M/8Lb4UTlOGyifgeI2Iu+AllLlmOjSPhQhRbK4DGWezhiSBA==" + }, + { + "block_id_flag": 2, + "validator_address": "C1A12367BC4BD69AF83B436A15D33703F381375E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "VuL4AOP4FkLFVItbW1J8Z1zmktchWCgsHh8ArZ9JbPY/eGtU23lO4l4BTKV23fi4DCLdn9a4rRmSdpMdU6RNCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C453130417F90DCAE44D28978DE1FB987507E6E1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Fnco1KGkoJUsViz7pXtrb1qzgjfbj5/I7t3EHajduVPhKGPR/bhvTw4BGVWWVJiSz4obgpNMtYONSNaY3SA9Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FY+5StcNfUXdM/wJNvCrmNMum+ER3D1+/o3L4w6/YG6JkLZoUdGfHxM7t8PoWpLNVn8FVU2L5JgN+vEgm/qTCA==" + }, + { + "block_id_flag": 2, + "validator_address": "C56B6E67680CEB8BF11B0B5FCAE3987EB930188E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gyN+XhrM4YINfghgKPbnY6BJCQlTU3+T8CYbCL4ce/hrVJ0Os7zQvtOv1HcFbTj4+cL+LCjzG+DezadVl6ieBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Azf4RciJTqEKic0H7JzPfgHuhWFRNx2ouVyUJCIhypB2DLu7BlNy6UAsFDjU0PF+PduXgAsi5RskcvF4+BUuDw==" + }, + { + "block_id_flag": 2, + "validator_address": "CA6211FB7B017D171FB7C5E46269AB49C9A1A135", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "giAJRDO1Cgeset+ZRLGmFwGqaTi/rPEoO7ODkLNGxyTX3j8dnrhf7FKSACJPWErY9HBhBGWMU3f4vCb/z/ofAg==" + }, + { + "block_id_flag": 2, + "validator_address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "hAfHg3KKFCnl+72+XrFkul/+sNSnjWxmDGYMsZpuQ4njvWrUN45Sh279p2ckEnIASyGdf0ZfLhpECoWYYQXqBw==" + }, + { + "block_id_flag": 2, + "validator_address": "D281629B8289556EC5E1C9C2A78FEB2B0A18B4EC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "s/JC0sUJKlvgBQ93+lRWYth7fmJsmdTpe/nexXsUBEggBviLg8nhxXMtYiwPOYTSoCd4oqIdLp8bS+2ai5+bAw==" + }, + { + "block_id_flag": 2, + "validator_address": "D361FCD15625DF4EA62DB0021C8D67C6083C8735", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "o50Gi0klKfryyIC+DLbRA5+zlTrj7SlOCvx2fAkP9962gZVVIqL7b6IwP46P6a2SRp8PMKKaYP3Y8a32DZ2EBw==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "HyxFR6hoFDuYv7U7IuFCzPC3p6oQQzePlpWRCKShHGruYZ3cQlee0oD2M3Fmlil6m+yKHTMmdPWvssxWZjmCCg==" + }, + { + "block_id_flag": 2, + "validator_address": "D447195654516BE994064E03868856302AEAF1D1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "tCELsjSuT6a1TudK7cPMAuXSC+O0H38YSri/SbX8JBvwaP8aNsjE0pSOX/zDumhuA8s3Q8DEmdYcSuc82oLJAw==" + }, + { + "block_id_flag": 2, + "validator_address": "D6BAFC0943840D65A80FCABC03BED8BE3FA7A8D3", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "q4VCUUqzyFdvut7UiUpT0yWd836Y3+CGdGQAOj16CUaETgGOTd546aMnDssT8thhpKG32jFFMAUOPVEKmFDcAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "R3cPfezumrboZo0Dr45tZYgRHm7/b2CCJExNAZF6ESFaZ9pTZ3l8tSoeKCmNEM9PdEgylLCAjdN0i8fLr9d9CQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAA78817A47B08F3022C756FA3BDE8E3CE14F761", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "3ARjMkCrZkEXOj+mnle9bKksIrxD3riegplRyubjJEWbQQ8VF5fmkqsm/cO9xilHOhAbUR3bAihJqpBKJfU9Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "bQU2i1bSy8MK+iXpFC62MNf/Fz0FzrJv7D5hIgLAaNmhSOeUPeMX2tGBArbAjIIW5iXdnX7aXWwtXzWV4l6JCg==" + }, + { + "block_id_flag": 2, + "validator_address": "EB8F0269F7A03728DD8D57D1484545B68DA6697C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "03WExDWl4L2MYnIF10rM9CfoYH/OzVVPG3LssvXJZFbHZ2fJZuhiJ8FrM5E9Yd/Pqmbe5YmRqn0GvLPvnRxIAw==" + }, + { + "block_id_flag": 2, + "validator_address": "EBBE61282EC27BF8D06D96C2992040450DD2C1B6", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8UXbGD6Gi5xgnbuLSKKiPLoGN8nCt7YOQrY27kVP0hD6+3ZddWMvWC0hJOzwL8aqjjwMGcLy9bYf5Vb098T7Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "ED245292B061110D52CFD7AE6D02919E6C3480F7", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Gxhrnp/2TOZ0Cd7uhAxar1IJOgW/haUk0Nrv5R+iC5xre9Gn/4GSIO9vD8MnPwTPOSfPb0XNVJoy42rNDt+KBg==" + }, + { + "block_id_flag": 2, + "validator_address": "EED08060959B8BC09DF99BB8A51A08C8D6F1663D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "zom4JAWDjyHnkDkW2nsyK/kP2xIGxzUOLmRG7cTQ5ZdprtYM3ruPhSODl+J4ZAr1dCoCjugJVlxbW5/aoJ0hBA==" + }, + { + "block_id_flag": 2, + "validator_address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2Fh6JtEj27bpeoddOa1X/V9ICaQbnRgO9Qk+DVLRECHFm9433oLnH4clLeUrKuaYZ6iQtM9AqJTsmKbeRPPLDg==" + }, + { + "block_id_flag": 2, + "validator_address": "EFE8CD307C19FE1E9C437B59A0066EDD97F45E9D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "zCjm34Q8mogQ2Y9FoxEfoDU0Ncm2C3/3qhT6rv0FgKZda1j3oDhKI2DhWkyPdEUt/fK6hBhhTOWh5bNwd17dAw==" + }, + { + "block_id_flag": 2, + "validator_address": "F08432D4BD305E8D18FBA52D3B1D351C486B9217", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "/8YhzNiUpO73z8WuL9XpFe36nhXnPYUU3UnILyoLtnoL8vkEianBRhhneKNKSQprzE3POr29zeR7WTrWKn5/Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "F1DA81336F50B87982CF10581D308080031406C6", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "rPCnWJ8p+Od7rerFhTdQElx4ymOQaIi/GTsJ/CqXOC6UfgKuI9ZT+Bwup52QT7BrbYHqVOPOlq5I2k6P3sTCBA==" + }, + { + "block_id_flag": 2, + "validator_address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "sfuRJeFpKZyRP3/nDDzUS83G0/aRNQSwlVz/6628zEVuyYdzDi2qTLMDi5obFh/+m9hiNm3RqYDU8/bAMVN/AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4+MKIM5Hj8Cdeh4Me8bzKG2v6apEgdlrbRbBRenWKe3I/V+zq8Js3fqFPnyySSuZguxEw95hmpcpFdDmYQgdAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "FFF869AF4555A83882CE6697720536EF9759CF69", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FSCVA6EGtzWmchtZ5VMxlEsAeBl91ZVGk0y8TOXzN2cdSwrLYwYbnGTfeX1ZM4N1wIh8HZWpEdjOiDuAwKbxBw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Kam3xVXv675BD8rZmi4Zs5jdR4+8I8i8ZEZU0gs9Bp4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "23A53F06EAAF2B827B9AF8B6866DEAADE5A5CAA3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WPAEO3zKMIbXTkPCa/Wg+s/eR7w6Wea1a6Xuzk1RTag=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "31580E874C4F84AA5EB5F986FA70B74F8D1865BE", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "scpN1hLNChIB1QuRHojxUwl59cPP2KpwzilLU10JViM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R1rD/692T348fL4cA0mvvbK9aANwT0vBNAT5B9+p+rw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C733B78F612FB791744711958D8BC4A3D1B54BF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dul9CqXgrwNXGlWp4ya6mulGjKJok/Q2RYqITOGgYro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Spb0BakJqr3uNaAEqdaGbv77bQEwym0/6cl/tnCdkGM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "416A8E60A478C20CEB021A84425D8B457558D4E9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6P6otvJpi36GOMprEbFwzth4AjleE/ThQMksZ2Wgh3k=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "42D162EDB46B7C1FEA616810A7617A6369958ADE", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "U4HzaR1kBj9HGcZU1I3rIZMwMoikUmYQyIMZktuBOF0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "M5rP8lPaJdES+Bd4oWI/va2sRUvbJiYINzOpUdiuO8Q=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "55027F5FDE2DFC9F1C956D4700A0E60E47BC8126", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "zfSXZ7DLwIeRwhbsE/Pr7cSaQZTmySpuXmGEnNRUZpc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "627231A077D55F34733997ECD928CE2C511F126C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UaISVfdgdm5p0+bwCbeatoNYfJP6LzW5k4DoL8++t4U=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6D4B3D65AD9A81CD7AE83EA598B6FD2818F7F6D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dHIiP4b5najkXBsEsplzaD8hQubhKlOrUEVOZ+NY+8A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "IPoyPEpBWphJbDnocj0x7bFbIX0grHlypAkknLjia3E=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Pfy3anXtYHMFjDLvM+5jJN3iS5Ypz9NMJ1KTNVjfJ7I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UGBPzd5VtGwtUkXOkCgJuzUO6s7Zk0RGKCo/Csdlqf4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "93597B2726E0FDD812E38163799427FA2FF684A8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8nCk/jO6oTXElCrzQ4YOdQkE6Rxj2AHMf9qxMPItnwQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "9562DE62254FB0C58E70196412E5F3C9D30B80AA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "s8MeP7HuqZOi9/wCl1Su1+R/kmhSvWx0BQiXog6CM8A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "9AE69E7D6961BB4CDAA74F99BB45A9EE25B02288", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PbgEtU7KS/td42OxA7Aq7C49zcWVgbG7+pn5mjRBrqA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Hm8gqT6zv3BHDTjlY1nLMK2U4gte/cducumkYBgvXig=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEXsZIGASOuKR3SQn2cakTAkulEbm2kElVjj50W2oJw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A67BF23C710F87B158BC3369684A3033D3C8112E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "E3+y8GQu99AUysuGJfmtQxKYWRp7lvMPUoH67bt9k+8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B058604741DFB193660713A02366D5A6CF1EF016", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uktjN/4JpMiNcfX4GYir212W5zPhi4LVM+28oObD4ac=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ct8qHvpO82bPqzj2YxHkFgE+fmxVF0q7fTuvXzsK6Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZDJSsUONDbWTaQATQjuhqxsQFTnSyzSburJRflWe6ro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "55KLg7eVl0IyiFhu7r38WGQizm6hglE4rsAo68dGK28=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K+cn+8TPKo7d9dNhdj999tu1T108JCxecojB0pkssl0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EED08060959B8BC09DF99BB8A51A08C8D6F1663D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "qBJDd/Wkt0KQfBUw4+wsWIpaqpSiUAQjGsTKfoz8IF4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EFE8CD307C19FE1E9C437B59A0066EDD97F45E9D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ov8G5YKHc1hjCBM/HT5k+MswEwXf+UZfP33bKi1prO8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F08432D4BD305E8D18FBA52D3B1D351C486B9217", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "T66D+MDA5XJsSmlca6yAEADfkNnERoNTzWdQ/q5y/Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F1DA81336F50B87982CF10581D308080031406C6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TCNu3Qckfx5+zXKvDTIHAFd/FZgbk013UFYIZqWl7w8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F4d36ebIiyCzz/pk4sGrxYnls8XuzOfMRh/lF2LTdA4=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T11:27:37.160466205Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "D69E2322967B4EA664917DD45DDAA82461E1004388CF950B101FB70D1C246892", + "next_validators_hash": "4D3CAB6B77CC4B9857103C576C6A343AD950EB3BF924B6F3B012C3CFFE62D49F", + "consensus_hash": "D69E2322967B4EA664917DD45DDAA82461E1004388CF950B101FB70D1C246892", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "B5F8C40C3F73AD1E245698FDF34FC119BED6B0C2B1C30934934680D28A8E8165", + "part_set_header": { + "total": 1, + "hash": "B5F8C40C3F73AD1E245698FDF34FC119BED6B0C2B1C30934934680D28A8E8165" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "tQymq4DFkG6EO6dnfwIGgxvD67WEdLKMx490E2uuo6w/DTj3VZfzhH4RNwyEBh5tr3a8Digea1A8FzYoXYTtBw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "31580E874C4F84AA5EB5F986FA70B74F8D1865BE", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "waEigMbo5nja6ZZApqltywa3UEX9cNixpsaqV4clxOzrRnEQn4luVis5dzLamxw54mahdTqk+3JPMtKE3T7mBA==" + }, + { + "block_id_flag": 2, + "validator_address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "llx/lynsumpurTaEmb8e0+zXcFVTJ5dNoGm/b2Or248ZS9PqSk6qShCxlrsRoxIJRxWMlGXr7JYXAdsxSq+BAA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "9hoZQdT5E8dIY968D7oFNACWyppDvfw5VAFl7Mc+6SQ+CpF2XfscI5y8ofKW67pw7bVpkCtjN9b/vZZvxcZbCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "3D7E3723C921B1D35B52921B8511142BF5976863", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "t+3hIMEzKrv90sQzSuXCnkZPq5HEe3Ii33RVXy9pHFb1smpWq6zl98CpAbpN/D8s3TyVqaoo+65enITfqJlMDQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "635206EBFDCCCE8AE040DE2FF07F1508929F3ED7", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "ROqz016UsC6dIPbdqJLVhtKEuRGsrzcO+iCSK8mfAWn+6VJ9RXBUtn38ryyzU60HostBMUf7uzlZ3s7QlEauAA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "0IYKSVk4LngvQ7WxNo41Tpnmlb7dCkNBzqBf5xwZ/FoRpfkF6NMJyuHkbk2yPJFbpz+Sluc+o9tNHuO4fmbmBg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "9AE69E7D6961BB4CDAA74F99BB45A9EE25B02288", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "GF7XDDAVa2hGXld0+EDOT3S6fUccHeRtIm5ggpfCMb6mn7+n+zr5B9mbH4LTlzXDtAVsQc9JyjW+WPJ8klOnDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "9BcmBh5p99ajxRzazZtnrqjcWnRed5LOE/gSJ2hy/EudHF+lPBgO6jbgb3y9vj9NEM1pfdeKHlKrWNV5AVWnBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "q7ptspzRRteuSXaCHczH9Wa/A89Eay7DivK5+FjbaDgtTKnvf+s6Js7gw9UyB3kNs9xuuuZEAWeto0Yz0yErDA==" + }, + { + "block_id_flag": 2, + "validator_address": "A67BF23C710F87B158BC3369684A3033D3C8112E", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "jfsJSzGKOS4dAzOf/HU2iifs4FPcUpxX3qb92lMJRqgYslrAQw/RagtAt7ZdaMI/HgI/f/r1ZSOU2EKZpKB4Ag==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "aH4sLtLR2+IEBxQhMXDJMJjwQSiI5rX/kxB4LrcrQc4cx1YXhZk5H58fJPBn6Ot7wVV8Dj1r2EMwgyB+5bCXBA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C1A12367BC4BD69AF83B436A15D33703F381375E", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "oQ7dPFm9nQAiejKOy69SI7uhOdXkYwNSMi3+PKBQlcu9OCarhlG7l4exg3owFtUqTWWmcQqFxRf979ZBqrIHBA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "D447195654516BE994064E03868856302AEAF1D1", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "386aOuUzNCdlcqE70pFeGKZtXQMaaZQH4+vrrhNAN7VSqUdalzfp8xJKmuuSpMEcCXB7IFuGQHEcnOMYHqAICQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "EBBE61282EC27BF8D06D96C2992040450DD2C1B6", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "N1aLI0lBSBjneDreQzoBmx0BaExk34C5kXLQdjcVs0BwH8rDmf93hd039T5jnCuzG5ZBKlYlsInMlYbrBx6mBA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C733B78F612FB791744711958D8BC4A3D1B54BF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dul9CqXgrwNXGlWp4ya6mulGjKJok/Q2RYqITOGgYro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Spb0BakJqr3uNaAEqdaGbv77bQEwym0/6cl/tnCdkGM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "416A8E60A478C20CEB021A84425D8B457558D4E9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6P6otvJpi36GOMprEbFwzth4AjleE/ThQMksZ2Wgh3k=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "M5rP8lPaJdES+Bd4oWI/va2sRUvbJiYINzOpUdiuO8Q=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "627231A077D55F34733997ECD928CE2C511F126C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UaISVfdgdm5p0+bwCbeatoNYfJP6LzW5k4DoL8++t4U=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6D4B3D65AD9A81CD7AE83EA598B6FD2818F7F6D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dHIiP4b5najkXBsEsplzaD8hQubhKlOrUEVOZ+NY+8A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "IPoyPEpBWphJbDnocj0x7bFbIX0grHlypAkknLjia3E=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "9562DE62254FB0C58E70196412E5F3C9D30B80AA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "s8MeP7HuqZOi9/wCl1Su1+R/kmhSvWx0BQiXog6CM8A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEXsZIGASOuKR3SQn2cakTAkulEbm2kElVjj50W2oJw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AD28DEF4048F1BC51A8800A26E697A7771A6AF40", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "L7pTIdyDJ9DHXRXMGcDeLxQ7KUP3AKiPpggq385vkrA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZDJSsUONDbWTaQATQjuhqxsQFTnSyzSburJRflWe6ro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "55KLg7eVl0IyiFhu7r38WGQizm6hglE4rsAo68dGK28=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K+cn+8TPKo7d9dNhdj999tu1T108JCxecojB0pkssl0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F08432D4BD305E8D18FBA52D3B1D351C486B9217", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "T66D+MDA5XJsSmlca6yAEADfkNnERoNTzWdQ/q5y/Cw=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Kam3xVXv675BD8rZmi4Zs5jdR4+8I8i8ZEZU0gs9Bp4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "0C7A21D9023613B0F814882F40694D07FB508388", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "yVRzgrYNJ4G1uy85dJseiG2K9/ofD/6kObbAfvK1E5I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R1rD/692T348fL4cA0mvvbK9aANwT0vBNAT5B9+p+rw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "400C0199DEC08A2DBFDF5D081AC15FD6685E8870", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "y+sL3o3wbcoAx67HqR8BNzJVokJrYGI5pflGS8GMSv0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JqkfZ01ZvkPHj9ohj0F2Saa5t6KIX5uq1bhHS7YAyxk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4D9FD26B2372FBFE05C0452D534C6014C4D7F887", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "mGpmR8PNc6w2cUzPwAQhkSadkyGOuKMl68Nji5E3h5o=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "635206EBFDCCCE8AE040DE2FF07F1508929F3ED7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VcBAfhXKgDF4pSdLRo3dWX1v+q8PSRMTXKNrU9QPQC4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GR4akX9jBcU4iFUBqB3NGwD3CuSTGPHiaWofAhCjCiE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6DC5F977934E65C23231DDC30BF273F22FF5454E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RQYSRBpF1ESzlpakxi9woi1sM2EiMYBxsf88soDQrKg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7D5B8447A0C1D5E85E095C885947C4EF180BA676", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "f6tNu5SZs7uu6h6e6g+ymxhOmJM09hbiT4mcoopbMx8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "9AE69E7D6961BB4CDAA74F99BB45A9EE25B02288", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PbgEtU7KS/td42OxA7Aq7C49zcWVgbG7+pn5mjRBrqA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "z7XkAAZ+x6klleinW1VTrsMLnAwNF9LHBFprFx1E4bA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A67BF23C710F87B158BC3369684A3033D3C8112E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "E3+y8GQu99AUysuGJfmtQxKYWRp7lvMPUoH67bt9k+8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6lcuin9eD6uwAu9qjsoRjtd+uCtVUZbn//5UqLng9mI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AFBD6E8C17284683A951FB263DDCB856AB61A176", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "0b2pdpqDMNKqBqZUpwLNqh6s/hblF4PaXJQLO1XZIs0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C453130417F90DCAE44D28978DE1FB987507E6E1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Cyw/3K8X71s0tFS0kFJb1HxaDdqcfodHQD4HXZ1p/rQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D361FCD15625DF4EA62DB0021C8D67C6083C8735", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7Zs1DiFznmkmW6Yh0lh1nT2fRdcrm+2rFwUillbFS+w=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EB8F0269F7A03728DD8D57D1484545B68DA6697C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7wsvbzutFAAQReO+Jq7L4Drc37uLg6IKafptL9ofTOg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EED08060959B8BC09DF99BB8A51A08C8D6F1663D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "qBJDd/Wkt0KQfBUw4+wsWIpaqpSiUAQjGsTKfoz8IF4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "CkWTr7zqfXcDHuTn961EfHkJv82Ql1oibFWbfROfbCc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F08432D4BD305E8D18FBA52D3B1D351C486B9217", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "T66D+MDA5XJsSmlca6yAEADfkNnERoNTzWdQ/q5y/Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F1DA81336F50B87982CF10581D308080031406C6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TCNu3Qckfx5+zXKvDTIHAFd/FZgbk013UFYIZqWl7w8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FFF869AF4555A83882CE6697720536EF9759CF69", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bZexjZwa8waNh2TSQjSenvvyjtNS0j98rRHUKdsvRxY=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n63", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestFailure.tla b/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestFailure.tla new file mode 100644 index 000000000..55be89e4f --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestFailure.tla @@ -0,0 +1,4288 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC100_2_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n1", + "n11", + "n17", + "n19", + "n20", + "n27", + "n28", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n41", + "n49", + "n70", + "n71", + "n74", + "n76", + "n78", + "n79", + "n8", + "n81", + "n83", + "n84", + "n85", + "n86", + "n87", + "n89", + "n90", + "n95", + "n96" } +/\ blockchain = 1 + :> [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n12", + "n13", + "n16", + "n25", + "n34", + "n36", + "n43", + "n5", + "n55", + "n6", + "n61", + "n71", + "n81", + "n82", + "n84", + "n89", + "n9", + "n94", + "n99" }, + VS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + height |-> 2, + lastCommit |-> + { "n10", + "n11", + "n12", + "n15", + "n16", + "n19", + "n2", + "n20", + "n22", + "n23", + "n24", + "n25", + "n28", + "n29", + "n3", + "n30", + "n32", + "n33", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n56", + "n57", + "n58", + "n59", + "n6", + "n62", + "n63", + "n66", + "n67", + "n68", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n78", + "n79", + "n80", + "n82", + "n85", + "n88", + "n9", + "n91", + "n95", + "n97", + "n98", + "n99" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n12", + "n13", + "n16", + "n25", + "n34", + "n36", + "n43", + "n5", + "n55", + "n6", + "n61", + "n71", + "n81", + "n82", + "n84", + "n89", + "n9", + "n94", + "n99" }, + height |-> 3, + lastCommit |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n2", + "n20", + "n21", + "n22", + "n26", + "n27", + "n35", + "n4", + "n42", + "n45", + "n57", + "n58", + "n6", + "n66", + "n7", + "n74", + "n86", + "n89", + "n9", + "n91", + "n98", + "n99" }, + time |-> 3] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = { "n1", + "n11", + "n17", + "n19", + "n20", + "n27", + "n28", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n41", + "n49", + "n70", + "n71", + "n74", + "n76", + "n78", + "n79", + "n8", + "n81", + "n83", + "n84", + "n85", + "n86", + "n87", + "n89", + "n90", + "n95", + "n96" } +/\ blockchain = 1 + :> [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n12", + "n13", + "n16", + "n25", + "n34", + "n36", + "n43", + "n5", + "n55", + "n6", + "n61", + "n71", + "n81", + "n82", + "n84", + "n89", + "n9", + "n94", + "n99" }, + VS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + height |-> 2, + lastCommit |-> + { "n10", + "n11", + "n12", + "n15", + "n16", + "n19", + "n2", + "n20", + "n22", + "n23", + "n24", + "n25", + "n28", + "n29", + "n3", + "n30", + "n32", + "n33", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n56", + "n57", + "n58", + "n59", + "n6", + "n62", + "n63", + "n66", + "n67", + "n68", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n78", + "n79", + "n80", + "n82", + "n85", + "n88", + "n9", + "n91", + "n95", + "n97", + "n98", + "n99" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n12", + "n13", + "n16", + "n25", + "n34", + "n36", + "n43", + "n5", + "n55", + "n6", + "n61", + "n71", + "n81", + "n82", + "n84", + "n89", + "n9", + "n94", + "n99" }, + height |-> 3, + lastCommit |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n2", + "n20", + "n21", + "n22", + "n26", + "n27", + "n35", + "n4", + "n42", + "n45", + "n57", + "n58", + "n6", + "n66", + "n7", + "n74", + "n86", + "n89", + "n9", + "n91", + "n98", + "n99" }, + time |-> 3] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> + { "n1", + "n11", + "n20", + "n28", + "n31", + "n41", + "n49", + "n71", + "n79", + "n84", + "n86", + "n89", + "n90", + "n95", + "n96" }, + header |-> + [NextVS |-> + { "n13", + "n16", + "n25", + "n29", + "n33", + "n34", + "n36", + "n43", + "n5", + "n55", + "n56", + "n6", + "n60", + "n61", + "n68", + "n70", + "n71", + "n76", + "n8", + "n81", + "n82", + "n84", + "n89", + "n9", + "n94", + "n95", + "n99" }, + VS |-> + { "n11", + "n12", + "n15", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n26", + "n4", + "n42", + "n5", + "n56", + "n57", + "n58", + "n63", + "n7", + "n8", + "n9", + "n91", + "n98" }, + height |-> 2, + lastCommit |-> + { "n11", + "n12", + "n16", + "n20", + "n22", + "n23", + "n24", + "n28", + "n29", + "n33", + "n37", + "n39", + "n43", + "n45", + "n46", + "n47", + "n48", + "n49", + "n50", + "n51", + "n54", + "n56", + "n57", + "n58", + "n59", + "n6", + "n62", + "n65", + "n67", + "n68", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n79", + "n80", + "n85", + "n88", + "n95", + "n97", + "n98" }, + time |-> 2]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> + { "n1", + "n11", + "n20", + "n28", + "n31", + "n41", + "n49", + "n71", + "n79", + "n84", + "n86", + "n89", + "n90", + "n95", + "n96" }, + header |-> + [NextVS |-> + { "n13", + "n16", + "n25", + "n29", + "n33", + "n34", + "n36", + "n43", + "n5", + "n55", + "n56", + "n6", + "n60", + "n61", + "n68", + "n70", + "n71", + "n76", + "n8", + "n81", + "n82", + "n84", + "n89", + "n9", + "n94", + "n95", + "n99" }, + VS |-> + { "n11", + "n12", + "n15", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n26", + "n4", + "n42", + "n5", + "n56", + "n57", + "n58", + "n63", + "n7", + "n8", + "n9", + "n91", + "n98" }, + height |-> 2, + lastCommit |-> + { "n11", + "n12", + "n16", + "n20", + "n22", + "n23", + "n24", + "n28", + "n29", + "n33", + "n37", + "n39", + "n43", + "n45", + "n46", + "n47", + "n48", + "n49", + "n50", + "n51", + "n54", + "n56", + "n57", + "n58", + "n59", + "n6", + "n62", + "n65", + "n67", + "n68", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n79", + "n80", + "n85", + "n88", + "n95", + "n97", + "n98" }, + time |-> 2]], + now |-> 1400, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateFailed" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> + { "n1", + "n11", + "n20", + "n28", + "n31", + "n41", + "n49", + "n71", + "n79", + "n84", + "n86", + "n89", + "n90", + "n95", + "n96" }, + header |-> + [NextVS |-> + { "n13", + "n16", + "n25", + "n29", + "n33", + "n34", + "n36", + "n43", + "n5", + "n55", + "n56", + "n6", + "n60", + "n61", + "n68", + "n70", + "n71", + "n76", + "n8", + "n81", + "n82", + "n84", + "n89", + "n9", + "n94", + "n95", + "n99" }, + VS |-> + { "n11", + "n12", + "n15", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n26", + "n4", + "n42", + "n5", + "n56", + "n57", + "n58", + "n63", + "n7", + "n8", + "n9", + "n91", + "n98" }, + height |-> 2, + lastCommit |-> + { "n11", + "n12", + "n16", + "n20", + "n22", + "n23", + "n24", + "n28", + "n29", + "n33", + "n37", + "n39", + "n43", + "n45", + "n46", + "n47", + "n48", + "n49", + "n50", + "n51", + "n54", + "n56", + "n57", + "n58", + "n59", + "n6", + "n62", + "n65", + "n67", + "n68", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n79", + "n80", + "n85", + "n88", + "n95", + "n97", + "n98" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n100", + "n11", + "n15", + "n16", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n35", + "n37", + "n39", + "n4", + "n41", + "n42", + "n45", + "n5", + "n56", + "n57", + "n58", + "n59", + "n6", + "n63", + "n66", + "n7", + "n71", + "n74", + "n8", + "n84", + "n86", + "n88", + "n89", + "n9", + "n91", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + state = "finishedFailure" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 2 + +================================================================================ +\* Created by Apalache on Fri Nov 06 11:26:27 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestSuccess.json b/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestSuccess.json new file mode 100644 index 000000000..a93c222a5 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestSuccess.json @@ -0,0 +1,39244 @@ +{ + "description": "MC100_2_faulty_TestSuccess.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "043E6934A5E887D08CE06A090F61F0EDA9A7A74F36DAF4F2A0D3EF8735A0E74F", + "next_validators_hash": "BC492F0AFF570D1428A460930EBA8B2613FE6553180A3C937985E8C8C34BAD29", + "consensus_hash": "043E6934A5E887D08CE06A090F61F0EDA9A7A74F36DAF4F2A0D3EF8735A0E74F", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "61D9FA1D7EF4BB6B5551474AD0D3B791836DA05B2279C81D9BF9445EE0ACA957", + "part_set_header": { + "total": 1, + "hash": "61D9FA1D7EF4BB6B5551474AD0D3B791836DA05B2279C81D9BF9445EE0ACA957" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "UWmBvFW59bLawXwYs7OiuHHpwmp3Y/6TzrZevlvqw9y8g5+ijxS9WTRnOBt55dtvoM1lN21IAbvsYD9kism8Bw==" + }, + { + "block_id_flag": 2, + "validator_address": "04CA9AA40B76FF67B56D5A9285CB9AE5ED2F3247", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "fOJFlhxP2X+gs25r3nJryaYhvvdzoYsja3yB5pXfqSt5x4+CL2/pK69oKwwP1DdgT/6V9NOyQtRiU3eSa/H9AA==" + }, + { + "block_id_flag": 2, + "validator_address": "050E6732CEC76C71C0CF6784EB4A4E2CEE8C23B0", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZvaaiWZ4n5O8NUClpbG3IEY6v+Ycm2ajqYIa1u2b+JZiXwXoLQxJs3un6liU/BhNxt5ibkGkJxg3Lts/ozviDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5nFt0ubQAONIM14Ia5Ooq6yMaPpZQWKuSKFpmGkgS3ewtLWWFpPNN3d2HH8ky6QWoQlmoIA249X8tFiNL1fDDg==" + }, + { + "block_id_flag": 2, + "validator_address": "0C7A21D9023613B0F814882F40694D07FB508388", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "1laACKDuYDJOIg1Xr2UAQZkao165V0m6WdfM2R6Azn3OeCOT6EJRN0vQKQOeotx/XvsVM1a1jEGLMbfd6YOsCg==" + }, + { + "block_id_flag": 2, + "validator_address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "jRzHR5z4W1ZGiXaTf0fNO3ZF8YbAxxIVi5xB96DovCGFnbEWHZ+glslz8MfZBf3+XY4BClCou+0+8PHKVcoSCg==" + }, + { + "block_id_flag": 2, + "validator_address": "239D1ACB182F9EC413D6AD8BED3A13447318B95F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "cDvWkK6W1BfUfCsnuG+Jh+MTsYVaNe+I1oJYMZ6SpBR22mDxC4ux/aD2JfclnTN8Zzl0zUQzYkRWv6FUXS2HAg==" + }, + { + "block_id_flag": 2, + "validator_address": "23A53F06EAAF2B827B9AF8B6866DEAADE5A5CAA3", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "KSHn9IAnU37ugvI6XnuqD378pxJa7V93r2vuHbroNzT6u7WGKnhCIhNC+uLN3nGBVFznLMpuhB5KKwAglcVWDA==" + }, + { + "block_id_flag": 2, + "validator_address": "26E91E700545D79E8A18092C393DB76294DF393A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "YLleFdBfm2tOcsMOx0SKT6+VJhbPdUi7eXgzZWMJ13908+Sh4e1CN77NrxMO+Hldq64fVG2ctDhzM0mBEverCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "+0PzufrcjFr7Xe2m1hW1TM+rhFp93M6wWowi35K1AmPYpDO87ejunex4qcbpLTUz7kGbhklf5jFVtJ/iHUZXDA==" + }, + { + "block_id_flag": 2, + "validator_address": "2D963CD0FA15D15C1C200D578CCDC2C692B72036", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "qsFZ8ouG0z4Fa0gk87JprOra/1e4d4PvzWVy0KG3jBdDh/Qzs2CXWnqhmgzpw8aH5W01a5YCCfQi5um6Rr4PAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "31580E874C4F84AA5EB5F986FA70B74F8D1865BE", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "IsQfyVHrwgNcBvAdTyXVA1EYFgDgdvDd6nOuQdTaA0gxXLNCnguIv9Q5hPU59m99lrvCQ7mXsHHs93+yFEBdCA==" + }, + { + "block_id_flag": 2, + "validator_address": "319549CEC8B9DADB70C7E8DBBC8FE5D550398506", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "cM6L7jiH/hYo3MWhFfQkG0WdRN8LwqXAnMgHJlGT4+Hch7ovg5D4owBHPWpoBmCYENXLtMNHlH5ry1KcqLecBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "361491162A6178776B903E57AB7C4D909394B4B4", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "usUqh2LGVYmWcF+qXVJ34MKXlRob5+0u14h9KR1cMOKUiAxBOwFvTClDCbKV6D5EUzsTpmf2BGZWMf77AtaBAA==" + }, + { + "block_id_flag": 2, + "validator_address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "nrOjVHatZaHGBwgtYszITX7ELcbX6EtekxbsPOifCVmULeYbilD+W8SpPlCkYGWviOjwrzgvIhsYC7ctt8ETBw==" + }, + { + "block_id_flag": 2, + "validator_address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "KMJiYHgsr5xz58j31CGDbeH4yQO3cU/Pyv/Z1wSLUiH7KDCVyBGDu1JpP33SN4zKIGafSVmbKM+T2Fpm/DXTDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "3C733B78F612FB791744711958D8BC4A3D1B54BF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "nmg5dtvWl2PjtS9gXYzmI2sVqtpQdVf+sIGh+KAhPTHABvY0liwOi655orCnLeORuidE6uPbnU+JcFFFclrrCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "T93v4ovwbO/+RBgKYW9r4omeAeEPsfWcNcUQjXo3SjH7KMt9ePA2F6Ugx4sh6TRtYmQEpndIOYPe2PcJ/wcfCg==" + }, + { + "block_id_flag": 2, + "validator_address": "3D7E3723C921B1D35B52921B8511142BF5976863", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "KISWMe9QIDg3W+YMvG9QnTcsaIkVGZ6zT8Tbjk5dc434CekavUhKUI2xx93BhG8hsnXDjAJt6RWee1hiaIQKBw==" + }, + { + "block_id_flag": 2, + "validator_address": "400C0199DEC08A2DBFDF5D081AC15FD6685E8870", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "kKIZPSWy9A0dxjZZJgezHESzBIZH+c6XdGnXxm8iPFTrNa9in93Aqwzyg/M4SS6ujX0+bAIwQ76I+E6GshQ0DQ==" + }, + { + "block_id_flag": 2, + "validator_address": "416A8E60A478C20CEB021A84425D8B457558D4E9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TgO6oV1oXKhIlMLVVp2Lv3AgaW3VaVrsfwHMF6/IR585Zsgjjthg80dXTmG0ccug6HRcYzPVpkxzbpkdQGzsDw==" + }, + { + "block_id_flag": 2, + "validator_address": "42D162EDB46B7C1FEA616810A7617A6369958ADE", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "mYsPOxABCamq8Nv9kF3626g3cyjTiuZAN9SzT/7NWPRx23Tk8AMjciPbVM4BHLsk0LYZTv2TZ0NsZgNCTiXWBg==" + }, + { + "block_id_flag": 2, + "validator_address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "DLalGgPTrwuF3KV8G/TRcVZlG1r1M462PAIPR85wDlHKLIHqIJgXon3LOQILCiAu6FCFAGRsWX0Pxd2ye/gjCA==" + }, + { + "block_id_flag": 2, + "validator_address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "aj1rv52z9q8exXLrNBzGq72p9SddON0iXjuViTp5EAQs1JuMf1a1l1eCsP3tH8xP8hdiswX/0GcCts/rn5ljDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "4D9FD26B2372FBFE05C0452D534C6014C4D7F887", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "eTXGsTzxkK9686ISxwF5hVQ4llVWA0e40hgfZx8duFEbuoTKVJPfHmN2218gsF/d+93oxJk5yJ2qlUhXAqzvAg==" + }, + { + "block_id_flag": 2, + "validator_address": "55027F5FDE2DFC9F1C956D4700A0E60E47BC8126", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "/oQyvNSDcmewP0wPijvCgt8t+XRyMaHxowHlgWM7tmyY1A5mddSsk6kpM/8erljC7RAQV3Jm6qbD08FzZnzmCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5AE3C3EDDD4C4F12E0A45618C9A7EE302BF0C466", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "+XQZY71uryEzBah2bohssetEWTwGqvo+AcpMcAZhGBxY1ohn9R5Bk1N0hTVIvz18lG+3nvFMjNevgYERvEqCDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "k60uK5ROsbGPR8i3vtgnYgqM+SPhuxZmzCUINNoTJ3j6A/4Kvfx3fq4K1u3bkP/MG8PHq5MIlgB9R3S162cEDg==" + }, + { + "block_id_flag": 2, + "validator_address": "627231A077D55F34733997ECD928CE2C511F126C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9jfskAJAofMU9JuJYp5TCz8Cl+kOSTg33wkZbpcDk1FPhbMGg8AXcf1zJ+Fomk42wDaGBtnnDq1/cNx/RAKxBw==" + }, + { + "block_id_flag": 2, + "validator_address": "62B738D2DFB76A0938F116B001D4AD686B75F700", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "HWOMVSP1T2ghykmkxZ2rUf2c4GJKmEWpIfjltRHeXMDXYUPD22CCfuK3vjEUgaN9tCN2gR2/wWT2RcKL1uLpDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "635206EBFDCCCE8AE040DE2FF07F1508929F3ED7", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Xbdic9r0tKQ+romrgKthvhC1PYdakEcVnmGiB2s746e6mxBJ2V1jCIyELNvpipGX/5hrRS3djeZNX0rgkxw+CA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "1TEYZTpX4OkMbiSE7jifyDzIFG4KvI+M7ezcsjiWxxW2OESvJLy+XP5pRMVhWp8Ct1Kb5tmP/ahRqb37sPGGAg==" + }, + { + "block_id_flag": 2, + "validator_address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Q6mlKbLrnco5nRRNnGQwtQliHkX0hBOW/zOwlAzbS7YUTluIMHVvNyuP3xEoP5iDF2/J1NyHkE8w9qaRZcrGBA==" + }, + { + "block_id_flag": 2, + "validator_address": "6D4B3D65AD9A81CD7AE83EA598B6FD2818F7F6D1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "lBcTDwI0UJFy+ZDwLwJLopAYxmqG3BaIoAsRZ3JvgHBVrioDtLnyTXsaSqFo8CnyjW7MLotFzyYGyoXThNg/Bg==" + }, + { + "block_id_flag": 2, + "validator_address": "6DC5F977934E65C23231DDC30BF273F22FF5454E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PvOfP7HJmrpnbNiKgsFV/NzwJh/p0yAvfN7iUZyUJ2X6Rzbu4QThmAgq2fqRHc3prMT6y/w5Unl8oqY4jSFQAg==" + }, + { + "block_id_flag": 2, + "validator_address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "C6UBizNYtBVxCq/ZNRCdOteI+Fap7uZozY4REmV0OFv3VniBUSqAcD7gnKlVrmpbEx9H/4YePZdXH9Z9+KRwCA==" + }, + { + "block_id_flag": 2, + "validator_address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9Y5xh5uLyFTjNkivn0NGr5v+ONx2svjt+5Tbyj5PEBep7Ck60nE04gsc+0C9FeIw9O8qNFLqpvaeJAqYXoQ3Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "74830E4D56CD8E0ECC47E508CBA279042A3882C9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "7qv9437yosIFgNNBIkyhN8EBlqNgEd7NFL9Tvj+tZr6R7myLr51+/GpSm7aaXWk7qM0Pq3Gl3iBNEADfx/2XBw==" + }, + { + "block_id_flag": 2, + "validator_address": "74C2BE39F07B51E72003D4C437535A797D2774BA", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "G1PSEd8YBPCqaKZ7FJWaz2j2KGgGGNOze1WRxpdcU8FQMq5u+K4BGs4xW3xkIv4eG+SNcHndnVVps9lHVM0IAg==" + }, + { + "block_id_flag": 2, + "validator_address": "766BE28A48C243E4F9AC3FA6B5505B6208EF4494", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Bvy/Y9Dn67ea2zMh5L+wtl2tvywqerZhh5fWtoUhtX9KeVDREnXaFm6eb6qJDHtVnxO22T2dzOmocwREpk1xCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5wscUcdCa0g2HUqj/mr3Yn9SEVwbbJBMhAGSu1yhrA3pRadUOJc8QwvjJSUs+3+0+z+6qjTD8QFTavRhycVLAw==" + }, + { + "block_id_flag": 2, + "validator_address": "7D5B8447A0C1D5E85E095C885947C4EF180BA676", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QFoKPax1eNB4ckq7/ps3Z1Pgr0+JIhGfHMnSK0Kt7iqufmKaXLnob/kiFRpC8y+uQuCdqSID9M1MJAEO28TSDg==" + }, + { + "block_id_flag": 2, + "validator_address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2YOGbq6utLz4cPfQFZd4YNwgQKzYa/uEWBKWKL1GRRbylpc4+ntzWbz6KEQGWjs8x7ah35ge0pF+UMYWti9aAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "dWMvZoj6qit7Tuqpk7jFsCBuR6BLPDr1OWlmF50AU42/aTnV1bhUTgZkwZCgNaMcjQNSmXHSAPyCSyKa46H8DQ==" + }, + { + "block_id_flag": 2, + "validator_address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5Dik/GhdPUFTus8Lktm+YeTXdSB2SY/pR9xml6NVRhfbhf0PXGaqhx9XbUP1BGiFe9rBc6iI1EIyZ8vLbpyxCw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "3Cq5CQCahuVXIXtCqVTA7IgVp5dVsgCliFrD91E6N1ZfpfJeOTNJan6k2XNeJBr0u2XAYDXSLq/EzAH7uF+aDA==" + }, + { + "block_id_flag": 2, + "validator_address": "822D9296BE1DAF413AB15B489C002F4CEAD426D7", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "IvU55LgOKBvP1RXYAv5Houwe7zy6uYTATcDhwNKMc2SHp3xfiX/4ZFhSA91kGW+lh5oKkzfyir8Jlh5WR+l5CA==" + }, + { + "block_id_flag": 2, + "validator_address": "82FB9EE4538CEAA9C808E862C8D47D36C143E0DB", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "tZ8l5/JFzu7GUrv2QTFMOr6bSnAuqhGv4aCuZIXYMY8lEfs440Q8CHxO/iwFOi7r5SY53I6PTj73XjQDY+GrAA==" + }, + { + "block_id_flag": 2, + "validator_address": "8301D560188D8CA97B5D373B6423292FA7A1C414", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "jIrcuRGfD+khSh+nzDCDZIUUxRzEvlngcgBKiGOQe6VaOpk/eA61+Tjb0STgbgFFME3/mVl7SP63xJ5HvraXDw==" + }, + { + "block_id_flag": 2, + "validator_address": "890C8588FAE1C90E164BFF1917A3EC93FF7AE8EF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "f0slQE8475HHGSkAs67O7OkVW0xr8DkD6SxGGsVQKcc/mjEzCi7H++3pzC6AANixwbkQ/IkN/FMKouvpTHAXCA==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "eN8vvtHVqUhSAyb7x/GdlNlxujzIZ8FIr5AzCAPYsN/OhZyLIalw33HptWMIFu/3XuDdDQTiAT9WQUtHVmT5AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8A0B5C8CE8B72985C325F02B580C4DBFC527EB9C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PEX41WM7jwS5+9MXxr9hyKXY9AG2f1hEdFQQZEAtamT34vauhjRMRwcJFhNSXVFEua6PNJS98BteNW/O6bCvCg==" + }, + { + "block_id_flag": 2, + "validator_address": "8B730D99A94FEA0729980BDBB4585DC2B7E932D3", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "1adtsqz0tx3Jv8WDeTm6A5EVzA1E++aAG1Q20gXXIyKU7MUcp/tMLHAob/bys9jZ8nBhgy4KeIRUK4LJr5AtCA==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4OM65RMW8fuZva6rw4mU2U3QU2XbHqi7cBp3S4zctykRrbX3Lw7Y/3whBX/lOqZ/oo1uy+EAOffZjOyydNzADA==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ekLtdx9x+H+0hhu9JBE2JfgB4wcpgoiDssfFRZGPan+IZR7Uei6Zike8Gqsx+GpCYv2JDCZP1xWkbih5fMFlDg==" + }, + { + "block_id_flag": 2, + "validator_address": "92932AD7E082B90296C192F3113710CD6F99432E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "T7tTpMqIgM9rYUiWZSu5UYPqCgGFFWtcpUryC3K/a5eXA8J/TmLxBQGCO/rCLb/DWhR7CiLeV8K9pzySNW+qDA==" + }, + { + "block_id_flag": 2, + "validator_address": "93597B2726E0FDD812E38163799427FA2FF684A8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5UkbBBa5nqH8czwN9YhqoJvl/2f/jzcpmCxWvO3CCNzIz0nciKKRWrmOeFk4ydiF4LxRu63COiaKYYivL77UBw==" + }, + { + "block_id_flag": 2, + "validator_address": "9562DE62254FB0C58E70196412E5F3C9D30B80AA", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "jI+SGSL0j4TUFix4nBko990x8Ohle7A7ruWmgG37eG5aOgPveD+315/K+z4JqvIVBS2VANtuh48sz06MaY1ADw==" + }, + { + "block_id_flag": 2, + "validator_address": "990CDD32CD8EF97E5EC9D3E9F8C25543A7EDAA33", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "no3gebZpYfvzTg/0oReOK8mc05ajEGhLEPudSE+6j5lKI6ZYNCoZn3j3ZurP6+RfAhMuiCKnq5YYbzDC826TCw==" + }, + { + "block_id_flag": 2, + "validator_address": "9AE69E7D6961BB4CDAA74F99BB45A9EE25B02288", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "MBTneNW51UpmSWCoS3xbA6HYTvlzjHArjjgIXOOays5QI02w6KfDfllLzt4jxN2XCg9wYqdRc48VaOBNECx0Cg==" + }, + { + "block_id_flag": 2, + "validator_address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "b3EIsjI/h0v/YqmkOkoomUktuta2LwvN+IjZ1Xnviqm1F1bMJa3RRV0o2PSEh8SQX2MVSDBeO5ORIXymRORRBw==" + }, + { + "block_id_flag": 2, + "validator_address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "bC45+CA4yPXIlFfVmX+ZBDAd8r6XfBAHvL0GPinOJsupJy7KaITlRuF0l+R2CIeZvkXvtN9LcnTBpdmQm0LVCg==" + }, + { + "block_id_flag": 2, + "validator_address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FFa7N1qQc2psOcOo2aqetvsMNbrzPaF5jwfzoxA9qNO3g1CDmhRpxo7K8OU68RzWpRf2kS5QjEie0FwJbN+3Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TWRQZDX++fO1286d6YM2iTCjG0FE5JQ1PZ+hqEas16O5IeQKW7W4I+7UlpN1clg5fuNW6qSgskuS2h5EQnlpBA==" + }, + { + "block_id_flag": 2, + "validator_address": "A67BF23C710F87B158BC3369684A3033D3C8112E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "H4+Hh6cYqrtfdUSFuXUEkQjF6zNGnHxt09OcYmRRkhLyF/VJh3B1qUAqck4zu58ZIAYCHcumEdlcW3N+kQNKCg==" + }, + { + "block_id_flag": 2, + "validator_address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "maaOLZa4upVKQmDhJS9N59oM6FH9zSa+7lZw9wMXfT5PXfwUPWeYo4kjD1hjYtg7TL1jmtVRm5YKbSxK3OCtDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "AD28DEF4048F1BC51A8800A26E697A7771A6AF40", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "enlt75QtnPDFU+WCTPg1uJaiCl93buyjil7hmebJHkrhsgXNyg7XnWsf972Dc6dwDofhjPWiG3B7C++FND1LDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "T+quIsR4rB8+/Wa9FvRGh0Vxj5dIRMsPg/4byMPuaFR8z1F5kTnvKOnGByWNqEh/DuNICL3lkcYz5OjdIno/Cg==" + }, + { + "block_id_flag": 2, + "validator_address": "AFBD6E8C17284683A951FB263DDCB856AB61A176", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "99a0GkaSoeJ1HvTznx6oXOz2MmXNvlb0QGN3uT2Qc4djrOYqU3ax3jFlbgHriVqWrZaY9VKR4zpwnzfuLO2+DQ==" + }, + { + "block_id_flag": 2, + "validator_address": "B058604741DFB193660713A02366D5A6CF1EF016", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "28o7wCrBlyp2qm/boDZnp5JTav0qVY3olbRdMRasfsEiyDeM7jaQC+z1FL6R7lk75ZZNVW2T83cHIc0nNGj/AA==" + }, + { + "block_id_flag": 2, + "validator_address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "AhL4K1cX8eN9c0yfTe0ndn8FrL/ngk5PBGBzXwVi11AnvJjDHwyAPsyNZiNXVpvyJOE5pMi4H+9u4uN1BAajBw==" + }, + { + "block_id_flag": 2, + "validator_address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "G+MLjf/h/s6UMMhfJ+CmpKFXasxKAf9ORYNjkm4DTGrYZZIhktHQGa4sMKrWduYDtQmtjK0DqvvUFPYxe5iBAA==" + }, + { + "block_id_flag": 2, + "validator_address": "B99E8C85A4BB4886BA6E3043B3A7553A481FB9C0", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "VpH805Xr4v9ZYCYk+zXYeR3yJ9YdyX2ZQIyboLaZLlcPQ32s1hsXNS0JGapM9ME0MwVlivgTTYOUf538zB51AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5IoEXGO5gbG0o9NojC7BoTypuVoT5p8aQasXOU129XzZ6m9zWTJSwI7ArnenDNKAXcyW5NGFyH4iGHmJ0AWOAw==" + }, + { + "block_id_flag": 2, + "validator_address": "C1A12367BC4BD69AF83B436A15D33703F381375E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "GvJ0vyEiuCawA2jEAHUgFJmON8kVMRvZI6tHPhVqqoLZQwd9WQ2PQXDP/3753agq4klQYsxg1e9SHz0L7iVKAg==" + }, + { + "block_id_flag": 2, + "validator_address": "C453130417F90DCAE44D28978DE1FB987507E6E1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "y3lMsuA2yFujzRDVPuW7AnakfeazErRucuNi/3l6r20y3/VeGK/BpRIH/YXzEDrbjaDSmUcjHOiUj9K4SLj7Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "OncV8pUFNYARY07zO6eJVLG63NFZKHeWtd+rrP1bdJdRCszMxw0wXOwwPoDkh1nFjQfsaJEPfmbRTYBgWPkdCw==" + }, + { + "block_id_flag": 2, + "validator_address": "C56B6E67680CEB8BF11B0B5FCAE3987EB930188E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NqRNnjMInJIeKLYdpJKUfQGcZvXXP+jQM1LJFFJqBrc75qOAOi5p2OM7oybslKoZ60FDkIZ2K9khtR3M/wiYAg==" + }, + { + "block_id_flag": 2, + "validator_address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "+dahVj/WWxomdSIvF38nAoUCTboau8GlLbxCPkXWj4H+lO3QxXH/AKKxqOOY5bGIe8D95j+JOc5z/UxX13e4BA==" + }, + { + "block_id_flag": 2, + "validator_address": "CA6211FB7B017D171FB7C5E46269AB49C9A1A135", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "OfnrEoVRoI2/oltGswSfjQ76csDpWcnNt6/SXD6HnwcPTeeohgVBnCBuKzoJT1JdklIv9CYN0GNbFYkrD54hAg==" + }, + { + "block_id_flag": 2, + "validator_address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "DCRv+o6GF/iv5xAt+eNX2cyv9cs9ziOqvWuaOQXmkQp8mIFHfVJojsDCjJpdTU/RQhXbqfMnCNlA5SGgLw/TDg==" + }, + { + "block_id_flag": 2, + "validator_address": "D281629B8289556EC5E1C9C2A78FEB2B0A18B4EC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TjsMXUiM6Qnmpkwugvp6pZSVQ5T4bBlVdOaxES57B2UtF1MV7jTPCWKwEkouJNSSDEAIMhJGn2rdkxVKF8egBA==" + }, + { + "block_id_flag": 2, + "validator_address": "D361FCD15625DF4EA62DB0021C8D67C6083C8735", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ce2iViRrdpF9Xyb8AclG2zTU63YWTOAmTI3dCqp2Ya/JPIqI91Y2KNVWpz9JbYIx30mj96+5AKB3JFRdist6Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "uC0YM9cZLrqUREtWvNxSD9W9p0ue5I0tgi4jdiSt4aqDTwAl7cCIFdyejx1lteCJzyzkBPcZlups+wPbNIXwDw==" + }, + { + "block_id_flag": 2, + "validator_address": "D447195654516BE994064E03868856302AEAF1D1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "IdQB65rgeHvSqdEUGdcmyuv1SG5HTHq8qRrSiDUB1lyVPHgZ3saWk6yZEzrXAXYZZDQnhPwd+NpLcuF9HfZbDA==" + }, + { + "block_id_flag": 2, + "validator_address": "D6BAFC0943840D65A80FCABC03BED8BE3FA7A8D3", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZMZu++hxbxY3QojNAS6M6tAR+WXYK/wvQW0ZI8dJUbai4y5NR2JGu0Gk6vYbglgp8sD3RaCkQSh97awNuUITDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QBxseaRCQWeHDY/3IWBWFuqt3141xYK/n3/aFR7ztZA+vpsk9fr8B4dDGzzz9FkZvzHGNL4LlUrg1KDzOaHoDg==" + }, + { + "block_id_flag": 2, + "validator_address": "EAA78817A47B08F3022C756FA3BDE8E3CE14F761", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "N7+xsoZkupPNc7F2oXnKQ5Uz44QjtZ5HH2qeKIoRHRBIV0ZCeHIEXqBQScEVElkSQZeFqy299xy7btwRS/V2Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "xCvg7h/gM3BCQQinF37OcZSPvEIX6+oizpMqElmm/pV0Oy5/9khJ38MNMdot0t+PGpSE6s3SZP4Y5Z3cNUIhCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EB8F0269F7A03728DD8D57D1484545B68DA6697C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "bC09GJ1ICH8NJG4Q+V2fGuAaWo+9r2NK5Q52IqQMyxjMV6xlhpLMPMdDripxvSBY3JT5yBzDmi2XhQLufVPQDw==" + }, + { + "block_id_flag": 2, + "validator_address": "EBBE61282EC27BF8D06D96C2992040450DD2C1B6", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "cOKD7Dlc2zcEnqvGtTkyVfl4WOUv+s/57Vcqg4OKfhDuTCbMoDXTSmW/WxlPjo/PQ6EAiwTmh2OmFM7AKPznCA==" + }, + { + "block_id_flag": 2, + "validator_address": "ED245292B061110D52CFD7AE6D02919E6C3480F7", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2A8XixgNTpUwAEjaYq15W8clflCinsJHOugivak4tZ2K74yEI1gj6vIXuP7TqNLqVT666iEYAkSa9E7moSI4CQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EED08060959B8BC09DF99BB8A51A08C8D6F1663D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "pK9pR3QnCgMgGCdKqrHBtwbCMPc7uU4JQHPrFDTC8za0abIOce6S1w5R+VXpNiuDYt7C8BSt3+N2UGoStLcyAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2kQfU5yUgqjgTKz2kDCtdNpC6EGSA6uFVAThVp/Fq4donJe54nXmn7q/aUYtjKxuZ2n2CLbiEmXpicGLQ77yDg==" + }, + { + "block_id_flag": 2, + "validator_address": "EFE8CD307C19FE1E9C437B59A0066EDD97F45E9D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "m+JnTLm3tNeU8I0fhlGVw9riG+2IG5kxsrThtIzMjh96eF6VHkXE3XAOs5tCdX5gXP/IhaQw342bpEcNfd/FAg==" + }, + { + "block_id_flag": 2, + "validator_address": "F08432D4BD305E8D18FBA52D3B1D351C486B9217", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ucmdsULgWYmPTRLVItHshqFu8yx9RObIySgDljjitTehJhrfD8g0ORfB4Ytvckw9Gfpz8vvJDx5j/k2mfsosBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "F1DA81336F50B87982CF10581D308080031406C6", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "hLr0u8RB7ziamoJ2B/40CGWWh1ntD8fednVAiwvuqcJM0FHTg+W7ZtI65S/SCEAW1sIDPFEu4DF58YI2TzOEAw==" + }, + { + "block_id_flag": 2, + "validator_address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "mCYCtlAKKJIeYVAqr0wYgmjNCvx2UlcXKc6H5flwj/SuLaZyFYw4fMF3b07cEEmEAe8PkJxBI/bbkCWST6J1Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gneDJ3O7w+tDD/FA9PWeO+MnfwJ98vuu35em7xD3GDl0Yb3tNzYYivMlb8ephiUrN/JxlGVxv7W75J/iFxBPCg==" + }, + { + "block_id_flag": 2, + "validator_address": "FFF869AF4555A83882CE6697720536EF9759CF69", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "vB2ap0w8SGoRuD14Oy2CrVGyr4EY3+APTvUARRdR/Mx91gHjg1vQmkHN71Ss7trybrL7t8RmoNbZu0fxPs/wAw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Kam3xVXv675BD8rZmi4Zs5jdR4+8I8i8ZEZU0gs9Bp4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "050E6732CEC76C71C0CF6784EB4A4E2CEE8C23B0", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "b7OxLS/2TcshawP8QjsCuyxOUe9d3566aFczz61UZNc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "0C7A21D9023613B0F814882F40694D07FB508388", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "yVRzgrYNJ4G1uy85dJseiG2K9/ofD/6kObbAfvK1E5I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "239D1ACB182F9EC413D6AD8BED3A13447318B95F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ELiW5vI49RoPS71qjid0QFJM8CZpmLnW7qkmN8lQU8g=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "23A53F06EAAF2B827B9AF8B6866DEAADE5A5CAA3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WPAEO3zKMIbXTkPCa/Wg+s/eR7w6Wea1a6Xuzk1RTag=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "fWMaYDTFwdDo7SVw9hBIraX2GVqvzKhNKEUkr/2ZnEc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "2D963CD0FA15D15C1C200D578CCDC2C692B72036", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Uq1fQj/TXkpg+zP37a//6YC04vQHWraWfYSg88fMHxw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "319549CEC8B9DADB70C7E8DBBC8FE5D550398506", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "iPt9P7DZ9EUBhWssBSvr/qYatOs08WwLCZbfeuW5hds=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "361491162A6178776B903E57AB7C4D909394B4B4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QlwrDiydr8tfRonzwMnML1JYtWUHQZiG6aqhWsXRriA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R1rD/692T348fL4cA0mvvbK9aANwT0vBNAT5B9+p+rw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C733B78F612FB791744711958D8BC4A3D1B54BF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dul9CqXgrwNXGlWp4ya6mulGjKJok/Q2RYqITOGgYro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Spb0BakJqr3uNaAEqdaGbv77bQEwym0/6cl/tnCdkGM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3D7E3723C921B1D35B52921B8511142BF5976863", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "vfycl3VTi9VKc+Fytp4pvbp0+xZKEUTufet65El49EA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JqkfZ01ZvkPHj9ohj0F2Saa5t6KIX5uq1bhHS7YAyxk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5AE3C3EDDD4C4F12E0A45618C9A7EE302BF0C466", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZVXL7nJ5h9ZrCc6K3ZMgqR7HhT36DroxaBN7/kRHRx4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "627231A077D55F34733997ECD928CE2C511F126C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UaISVfdgdm5p0+bwCbeatoNYfJP6LzW5k4DoL8++t4U=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "62B738D2DFB76A0938F116B001D4AD686B75F700", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bgZ8KLzPd4mI0aDX5aRLG7piFzEt59yzsq3djHZMV1s=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "635206EBFDCCCE8AE040DE2FF07F1508929F3ED7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VcBAfhXKgDF4pSdLRo3dWX1v+q8PSRMTXKNrU9QPQC4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GR4akX9jBcU4iFUBqB3NGwD3CuSTGPHiaWofAhCjCiE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6DC5F977934E65C23231DDC30BF273F22FF5454E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RQYSRBpF1ESzlpakxi9woi1sM2EiMYBxsf88soDQrKg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "74830E4D56CD8E0ECC47E508CBA279042A3882C9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KzE4Qyz7He+wo2wMepqCgTD4n10WA1Xafryn9Xgt6I0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "74C2BE39F07B51E72003D4C437535A797D2774BA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "qThLDyok7ht1m6Qj9sMPFfOvXQUIbnJ5PSmBxdnG0Rc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7D5B8447A0C1D5E85E095C885947C4EF180BA676", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "f6tNu5SZs7uu6h6e6g+ymxhOmJM09hbiT4mcoopbMx8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UGBPzd5VtGwtUkXOkCgJuzUO6s7Zk0RGKCo/Csdlqf4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2ekMO1AKawC1gbXty/y6KBVpUfC9RcKyf3sR0ZK7UR8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "822D9296BE1DAF413AB15B489C002F4CEAD426D7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "InuzWLzsYP/6DLHQbmiYe0rtduz2xktozH2FmOKQsZc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8301D560188D8CA97B5D373B6423292FA7A1C414", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "CQgaHk/wmnmnhWq8+vP2baKD2qUhYvNpFfRliGunlJg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "890C8588FAE1C90E164BFF1917A3EC93FF7AE8EF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "espgSJouSR/5l7I0UHcZqkUgByHgtt4yFAYzNbw4UVg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8A0B5C8CE8B72985C325F02B580C4DBFC527EB9C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "OBRlQyOtvKRxxxIF+7gsbA/5d4gI0aVdV+8Qzd42KuQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8B730D99A94FEA0729980BDBB4585DC2B7E932D3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "E2+EA4BJea4XtU/Aahf4t8TpJG2FmJ0yIEP8dpDAABQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "92932AD7E082B90296C192F3113710CD6F99432E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GJlkT7S82nRWW34K5ax6ZCW9EV2nt1E/PF1P5LQgJdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "9AE69E7D6961BB4CDAA74F99BB45A9EE25B02288", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PbgEtU7KS/td42OxA7Aq7C49zcWVgbG7+pn5mjRBrqA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Hm8gqT6zv3BHDTjlY1nLMK2U4gte/cducumkYBgvXig=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQBydj5eqXzfBc++Y+9Q5RaUtEXtQghUR0duadGH9dk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "z7XkAAZ+x6klleinW1VTrsMLnAwNF9LHBFprFx1E4bA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEXsZIGASOuKR3SQn2cakTAkulEbm2kElVjj50W2oJw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A67BF23C710F87B158BC3369684A3033D3C8112E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "E3+y8GQu99AUysuGJfmtQxKYWRp7lvMPUoH67bt9k+8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZHfThztGFsj0VfR6xV1r5ZA09Q6/+np9oYXs8CWY4F8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6lcuin9eD6uwAu9qjsoRjtd+uCtVUZbn//5UqLng9mI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B058604741DFB193660713A02366D5A6CF1EF016", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uktjN/4JpMiNcfX4GYir212W5zPhi4LVM+28oObD4ac=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8f/zBc9sYTK1e73NefD07XG1gA/fqVsf8CZ5EyualYk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B99E8C85A4BB4886BA6E3043B3A7553A481FB9C0", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "9D+mHClSgLhk5LVobp4HPZi5N3+SUrzFKBd9Fz86Ml4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZDJSsUONDbWTaQATQjuhqxsQFTnSyzSburJRflWe6ro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C1A12367BC4BD69AF83B436A15D33703F381375E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QoUOhrmZjUftNo5mXv8nIlT+QXIN3tDR3XOb2phGa0I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C56B6E67680CEB8BF11B0B5FCAE3987EB930188E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "DU+N0lyWiAJ3aUbKUz5q/LOQUDIPTunXAcK78TVKlpk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D361FCD15625DF4EA62DB0021C8D67C6083C8735", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7Zs1DiFznmkmW6Yh0lh1nT2fRdcrm+2rFwUillbFS+w=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D447195654516BE994064E03868856302AEAF1D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u7GVl6wdnCsWjxNSxnOCwxnZTWLYTlaB6to7efS7RWY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D6BAFC0943840D65A80FCABC03BED8BE3FA7A8D3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ze+xQF2/qcTtY9cje/r150eNoXCs4B1Vacf3TPcwquE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K+cn+8TPKo7d9dNhdj999tu1T108JCxecojB0pkssl0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAA78817A47B08F3022C756FA3BDE8E3CE14F761", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "9fJlZL8iH/1ysAI/r+2cSqXOT67uknmJKnfIIaShLww=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EB8F0269F7A03728DD8D57D1484545B68DA6697C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7wsvbzutFAAQReO+Jq7L4Drc37uLg6IKafptL9ofTOg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EBBE61282EC27BF8D06D96C2992040450DD2C1B6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "9nbajKrFkiIL/zv6tNIC2ZVcFQOJDcYa4jOSzpw6qX8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "ED245292B061110D52CFD7AE6D02919E6C3480F7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "O7sRf+YCASDFbn5BaxMC+DcoblK00JYTs8oE5uFMnLA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EFE8CD307C19FE1E9C437B59A0066EDD97F45E9D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ov8G5YKHc1hjCBM/HT5k+MswEwXf+UZfP33bKi1prO8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F1DA81336F50B87982CF10581D308080031406C6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TCNu3Qckfx5+zXKvDTIHAFd/FZgbk013UFYIZqWl7w8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "wqp6kT/3DEZ81E8BAdD802/NccJcCyBWBVrah3EOTFk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FFF869AF4555A83882CE6697720536EF9759CF69", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bZexjZwa8waNh2TSQjSenvvyjtNS0j98rRHUKdsvRxY=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T09:54:36.160465647Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "BC492F0AFF570D1428A460930EBA8B2613FE6553180A3C937985E8C8C34BAD29", + "next_validators_hash": "6C3F18F1E0943D90EDE54A4F9CE43DC2B6CD9B1671F300FF8119A04F1078CC7E", + "consensus_hash": "BC492F0AFF570D1428A460930EBA8B2613FE6553180A3C937985E8C8C34BAD29", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "F58FAE042DB56FB03159F01235CCEE092B8972EF3A7755C7B3AD3E6AEEF5F3D4", + "part_set_header": { + "total": 1, + "hash": "F58FAE042DB56FB03159F01235CCEE092B8972EF3A7755C7B3AD3E6AEEF5F3D4" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "K+HG09Efw6JDExsSDRDk7IPRn5hCcSgoFwc9I71V3V4+RKyT/uoM3b+j972+aSWmRpRQcBmBiwhdGR4Z84e2DA==" + }, + { + "block_id_flag": 2, + "validator_address": "050E6732CEC76C71C0CF6784EB4A4E2CEE8C23B0", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "ELo26oDeKdQtilwfmbEFNo6tZROZQkUwl7aB0cjPOXWgm9pJ2loaT+qodL8wZJvcltvHip38DyV7wVmKOvLRAw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "23A53F06EAAF2B827B9AF8B6866DEAADE5A5CAA3", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Ok6qJxP46+n3GmQHW9SoHkXuqfmOriYjEofqtpZ7rQHgXq1b9sVhm6qtzAaag7lQr1ZR2inmuDHN/AxfLGawAA==" + }, + { + "block_id_flag": 2, + "validator_address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "YVHxhstk1sI9BO4UEeMtrbqJTYz9Reeuxu0MC91kS9sb7XSkF16dRSo2N0Ubm+zN/CDlEVWBAa6thDegFVVPCg==" + }, + { + "block_id_flag": 2, + "validator_address": "2D963CD0FA15D15C1C200D578CCDC2C692B72036", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "tbcDZwu6ZRgcVFTHg5oynyo0d94uptjTLEvXydItSnz4ni/r1VaNkKS7YxFyyKomgki+rjq0PSFceAfIypojDg==" + }, + { + "block_id_flag": 2, + "validator_address": "319549CEC8B9DADB70C7E8DBBC8FE5D550398506", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "oAPECsxK8N5bd5b7kbpWA3+euKadnpB2YsGUxrxnRkavSqBmFMLIlqkkFmjHLPDxNdOJ6mby0Sw4f/K0Ak7YCA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "P7pb8ava0Sp0Ivt6oc9IPt07IK3pSndPlWIFk+VxrKYKVIpe1bh5Yvhb1M7bhW249jjGSj1qCe+IymRkZWUaAg==" + }, + { + "block_id_flag": 2, + "validator_address": "3C733B78F612FB791744711958D8BC4A3D1B54BF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "rTvyN2o/96GSWxGnqVl2gyu/qC1rir4IGeThgBetHB1S9x4CkAy7rY+TzDYEhn3PVYcyMBytR5dG2zb/Dlv5BQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "3D7E3723C921B1D35B52921B8511142BF5976863", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "WvwCld9vyMxn789pn5rpzQV5GYJ+cpdcNIv9rLJ2rOsKJ5V4RHA7dNwjLn2zjUGZIUxS7tcJFq1XVEAYfKHYCQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "5AE3C3EDDD4C4F12E0A45618C9A7EE302BF0C466", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "SvgJ2oKuwsHRPpThIEMtF+tKmiobZs1j7SYtN+vUiPkN0vbJXfCgXwRDyMxwLbHihqjabjJK7sZcSodsiP3kDw==" + }, + { + "block_id_flag": 2, + "validator_address": "627231A077D55F34733997ECD928CE2C511F126C", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "HOFcRrzB8NeQ5CxWDSAGBpwxrlKNvyKZzcTe+KxEnJQm0FFSdGVqoDiUNGL9Oh2E7TwmGdS0usMM9/Z8cBS1BQ==" + }, + { + "block_id_flag": 2, + "validator_address": "62B738D2DFB76A0938F116B001D4AD686B75F700", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "kl4thggf4r0wYpI3iboOHCZk8cKZRTdqoiF6lR1eaSm4K73qBPxExKGg7xQeMQtVRYsuY2hdlMiN0NraBCDqDA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "0TvRYjPj+DL2BldZ/5cuvz5xZOCREhdbRSy3KGwSYhOUy6N6BNXgShfrAXESfBWG/8M0ic5u9whnLNtt4IP1BA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "74830E4D56CD8E0ECC47E508CBA279042A3882C9", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "2NHyN5+iIki2BGrxdo+x4UFuylIUxTWrO2gIgobVMtIISQJSSwGKwg7EL64+gT34T6Jx1BoODZNojSwz1xwbCQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "7D5B8447A0C1D5E85E095C885947C4EF180BA676", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "3mliIQJY5IZufYrWZWFa6fRR2DQ5rhCBJb1we7d5wMlEClg+8V755ce06M3wzriejYRTgJ4fs8xPJQlYWL9hBg==" + }, + { + "block_id_flag": 2, + "validator_address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "y2JifWOCzcsY+advHZvIy9A3nplK7XHXF7DS/KC9JJaHOL12AKHuaHehbwNnFzYaAnRdttLIYx2gSDp3mAYTBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "JokVA1NSzipDLKGRYf7u9oKIzdeRyUknklTaOURjR14i48UFQ37m4CFevTTnw5rVhThetbs1JFrACE1mIQcyAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "822D9296BE1DAF413AB15B489C002F4CEAD426D7", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "7cZMXfnSqwiANXtRjmqYEMUbS3pxz9PZkQAVek9VAafZ2ZOqNjta9ARtcFluELcy1CvaZNwPtmLsQWOxyQrvBQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8A0B5C8CE8B72985C325F02B580C4DBFC527EB9C", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "DLpfEZoMu2mrEeJESMSMzo4Qp1IuEZ6C59G/3IOXH791bOch7jj6N4TQflqDIBSNp2TRwV4zY9aAEzEW9rNoBA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "auhkFLn1Rmyxhv5zocaiwZgyOBXT5VCdIe4vo4w90IXLLKT28t1NrDVm+bZS74QeS1cdBytJ/dw6H4dBJdnkDA==" + }, + { + "block_id_flag": 2, + "validator_address": "92932AD7E082B90296C192F3113710CD6F99432E", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "26EC4zZHVTQ22IgYrXX2P/c1GFdcv38e1nP3acHKQXVM4yjq5npFwSAXjK4ro78PBj/t7AFh1jQLFvDrT5TpDg==" + }, + { + "block_id_flag": 2, + "validator_address": "9AE69E7D6961BB4CDAA74F99BB45A9EE25B02288", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "4buBrb3QwGe+2etunyW94qbGYkH3TLVVZb7BN85MaSpSG4sitedeVqovcNvE6Udc/JD3cTAoj3WDROOOpa2yBA==" + }, + { + "block_id_flag": 2, + "validator_address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "2UNmAifIKRF+aodLTEeAEiuQtX48GuM24beiC/fqTD8+io6KX8tQCoQM8H55HhS2arcAEnTX6E+bktFzc/TfAA==" + }, + { + "block_id_flag": 2, + "validator_address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "GftLxbkPDnUpStORRqVMUFp1lS9ldMZEDBGBWfc22ZRaTyek+8tfY1aFxxPxESQZO0b1WsE+aTaJjik4OtFUDg==" + }, + { + "block_id_flag": 2, + "validator_address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "euVkjnkWMl+r6PICAhFC4HVrb+yQP5yUSEVAPo2cxCwA5aTVDTfsgBXPgh6VLCIcqS08fmpsktYUgKOnS8iGBg==" + }, + { + "block_id_flag": 2, + "validator_address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "/2Cu3Hzc0fcx9+DA3aQ3MeXYF9oOHJ1RrWMiez/sh++DLMsk0vO9Y/DFkBYRR53DOHEnJCwpz9Mmn8UfZJXzDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A67BF23C710F87B158BC3369684A3033D3C8112E", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "LvFUmjJhwwIyG77QV0luVHBWwLebQ5CPCaJmu5KU+ZRujLPQLrl9QF852n9Lz2YbaKnememqJvO1fzx737SDAw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "i2RfZpztKaMDE8bVoSaN8HbUj8wAlWnRmWPDldj83DAHRXYSXUE+w0Ar2w4fCMtxTkClx8AUmqMQs62OngHtAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "B058604741DFB193660713A02366D5A6CF1EF016", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "6dK5L85G1CkcHfh2qtF0Yo/nkvqvZdr3brRbkeqtatjV55TNP0+FOSQwsLQDdF0e5MduKe1ckE2vwbwpKRnJBA==" + }, + { + "block_id_flag": 2, + "validator_address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "4Kj6b/JvVVMWMRNqZlud//OuyTjVizSHIOHYP8h+hR3hyBF53AURr6i++aCi4X1exaDb9sca+3xa+0iOtp1EBA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "L+2iVSM7spwhDtVifleV9Ff3t8usg7ZgBjsVTpGfudIRiRWzanfTEAPfedod4Wkh/emGLoOGiAk0xPKSut26Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "C1A12367BC4BD69AF83B436A15D33703F381375E", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "O6kVFuUVJEy6cv/N9OvG/wkEUEa1Q6w3DCIK/ln6/Kfs2hVFVcVKTpiTZT/8UHO3zlm6UhjNbCXpp/Zu4xxZDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "maH+sB6mxFgHQcg7m3Dc9ExsTrRjaiiz9DH/9QjhqC2FEsfz1zwJCd/amgXvKnF+Pk8ojiyyKKX4p61rPF8xCw==" + }, + { + "block_id_flag": 2, + "validator_address": "C56B6E67680CEB8BF11B0B5FCAE3987EB930188E", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "ExmuXw9zXmjjmWByzMUeWjIFLD9Hh3yQuxrWAsQ7+83hV4rhP5qrlEiZwxoLzr+mBaTGMMURuhnfrVIm0WnxCg==" + }, + { + "block_id_flag": 2, + "validator_address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "ie3+kVeiHVedAjwj4mKaP2XCJa6FTik7IVrWNi9QDHWgwFTzYvgmoCTaXSs9R6ME5Oe46fYGXwK8xRXY8ye1AA==" + }, + { + "block_id_flag": 2, + "validator_address": "D361FCD15625DF4EA62DB0021C8D67C6083C8735", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "hoRISwxr3qtkaI0bALxKzYha8WGkFzWUeovBWXVqMh+E0Gc1jNfz5FlFro1kz8s9lfFddrKwOSZvprhZbs6GDA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "bYXAy7beEnu1fNOcmU4PdYebogM0QYICyKGe80MM2w1FjA5GS7UPs192ziHIEHipuJ5KdkUo4WizLR9Jm2+XCA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "D6BAFC0943840D65A80FCABC03BED8BE3FA7A8D3", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "7E+0LVV8jpEBHTF2kgCPnY9gayPsQiKcJyYtiPokJiz9fosBXmFRSXjgzXM95KxgEpgHMi956gJ3AAR9iu+0Aw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "EAA78817A47B08F3022C756FA3BDE8E3CE14F761", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "HDj4c2IH/n7afw/CQcnXngTM/ozu37j6GrHHZx8DtR+VZgUyps3KFW0cy//0lRtugRLW0wPEVH3EVi5r/SYiDw==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "B1yVOYmPtHH0sB2fYAQsloVbpIo8Z7Hk1vEB1F2XHupCIvNPVYPwLqKTomes34wp/ISdIZu6PZrXEDwsQlP7Dg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "ED245292B061110D52CFD7AE6D02919E6C3480F7", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "XR48jjMtvCCDNIOMo9OuK6VbMR5w12Kt5jW3zyThadIZ+RqtXdzRKy27O9z9sSxE2aZKNZo3ySjbyyrGxF/6CA==" + }, + { + "block_id_flag": 2, + "validator_address": "EFE8CD307C19FE1E9C437B59A0066EDD97F45E9D", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "jqb56o4DAv8UX7ufog/0Cn1Akc9+tldc9S6s9twpiQNwo0FIbON+030wRhjiBwNO09AlTbRm0p9JSwZfJw2ECw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "FFF869AF4555A83882CE6697720536EF9759CF69", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "ECLGhKc/9vu8VfLzDvfDqmKUmLTwOMXbLvrggGu0cuhhzC3RoVURrrSB3yCA43164iHpR4kt6IVMHpINHZbwDQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Kam3xVXv675BD8rZmi4Zs5jdR4+8I8i8ZEZU0gs9Bp4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "050E6732CEC76C71C0CF6784EB4A4E2CEE8C23B0", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "b7OxLS/2TcshawP8QjsCuyxOUe9d3566aFczz61UZNc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "0C7A21D9023613B0F814882F40694D07FB508388", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "yVRzgrYNJ4G1uy85dJseiG2K9/ofD/6kObbAfvK1E5I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "239D1ACB182F9EC413D6AD8BED3A13447318B95F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ELiW5vI49RoPS71qjid0QFJM8CZpmLnW7qkmN8lQU8g=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "23A53F06EAAF2B827B9AF8B6866DEAADE5A5CAA3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WPAEO3zKMIbXTkPCa/Wg+s/eR7w6Wea1a6Xuzk1RTag=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "fWMaYDTFwdDo7SVw9hBIraX2GVqvzKhNKEUkr/2ZnEc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "2D963CD0FA15D15C1C200D578CCDC2C692B72036", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Uq1fQj/TXkpg+zP37a//6YC04vQHWraWfYSg88fMHxw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "319549CEC8B9DADB70C7E8DBBC8FE5D550398506", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "iPt9P7DZ9EUBhWssBSvr/qYatOs08WwLCZbfeuW5hds=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "361491162A6178776B903E57AB7C4D909394B4B4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QlwrDiydr8tfRonzwMnML1JYtWUHQZiG6aqhWsXRriA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R1rD/692T348fL4cA0mvvbK9aANwT0vBNAT5B9+p+rw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C733B78F612FB791744711958D8BC4A3D1B54BF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dul9CqXgrwNXGlWp4ya6mulGjKJok/Q2RYqITOGgYro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Spb0BakJqr3uNaAEqdaGbv77bQEwym0/6cl/tnCdkGM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3D7E3723C921B1D35B52921B8511142BF5976863", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "vfycl3VTi9VKc+Fytp4pvbp0+xZKEUTufet65El49EA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JqkfZ01ZvkPHj9ohj0F2Saa5t6KIX5uq1bhHS7YAyxk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5AE3C3EDDD4C4F12E0A45618C9A7EE302BF0C466", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZVXL7nJ5h9ZrCc6K3ZMgqR7HhT36DroxaBN7/kRHRx4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "627231A077D55F34733997ECD928CE2C511F126C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UaISVfdgdm5p0+bwCbeatoNYfJP6LzW5k4DoL8++t4U=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "62B738D2DFB76A0938F116B001D4AD686B75F700", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bgZ8KLzPd4mI0aDX5aRLG7piFzEt59yzsq3djHZMV1s=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "635206EBFDCCCE8AE040DE2FF07F1508929F3ED7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VcBAfhXKgDF4pSdLRo3dWX1v+q8PSRMTXKNrU9QPQC4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GR4akX9jBcU4iFUBqB3NGwD3CuSTGPHiaWofAhCjCiE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6DC5F977934E65C23231DDC30BF273F22FF5454E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RQYSRBpF1ESzlpakxi9woi1sM2EiMYBxsf88soDQrKg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "74830E4D56CD8E0ECC47E508CBA279042A3882C9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KzE4Qyz7He+wo2wMepqCgTD4n10WA1Xafryn9Xgt6I0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "74C2BE39F07B51E72003D4C437535A797D2774BA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "qThLDyok7ht1m6Qj9sMPFfOvXQUIbnJ5PSmBxdnG0Rc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7D5B8447A0C1D5E85E095C885947C4EF180BA676", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "f6tNu5SZs7uu6h6e6g+ymxhOmJM09hbiT4mcoopbMx8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UGBPzd5VtGwtUkXOkCgJuzUO6s7Zk0RGKCo/Csdlqf4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2ekMO1AKawC1gbXty/y6KBVpUfC9RcKyf3sR0ZK7UR8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "822D9296BE1DAF413AB15B489C002F4CEAD426D7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "InuzWLzsYP/6DLHQbmiYe0rtduz2xktozH2FmOKQsZc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8301D560188D8CA97B5D373B6423292FA7A1C414", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "CQgaHk/wmnmnhWq8+vP2baKD2qUhYvNpFfRliGunlJg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "890C8588FAE1C90E164BFF1917A3EC93FF7AE8EF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "espgSJouSR/5l7I0UHcZqkUgByHgtt4yFAYzNbw4UVg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8A0B5C8CE8B72985C325F02B580C4DBFC527EB9C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "OBRlQyOtvKRxxxIF+7gsbA/5d4gI0aVdV+8Qzd42KuQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8B730D99A94FEA0729980BDBB4585DC2B7E932D3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "E2+EA4BJea4XtU/Aahf4t8TpJG2FmJ0yIEP8dpDAABQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "92932AD7E082B90296C192F3113710CD6F99432E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GJlkT7S82nRWW34K5ax6ZCW9EV2nt1E/PF1P5LQgJdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "9AE69E7D6961BB4CDAA74F99BB45A9EE25B02288", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PbgEtU7KS/td42OxA7Aq7C49zcWVgbG7+pn5mjRBrqA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Hm8gqT6zv3BHDTjlY1nLMK2U4gte/cducumkYBgvXig=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQBydj5eqXzfBc++Y+9Q5RaUtEXtQghUR0duadGH9dk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "z7XkAAZ+x6klleinW1VTrsMLnAwNF9LHBFprFx1E4bA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEXsZIGASOuKR3SQn2cakTAkulEbm2kElVjj50W2oJw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A67BF23C710F87B158BC3369684A3033D3C8112E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "E3+y8GQu99AUysuGJfmtQxKYWRp7lvMPUoH67bt9k+8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZHfThztGFsj0VfR6xV1r5ZA09Q6/+np9oYXs8CWY4F8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6lcuin9eD6uwAu9qjsoRjtd+uCtVUZbn//5UqLng9mI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B058604741DFB193660713A02366D5A6CF1EF016", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uktjN/4JpMiNcfX4GYir212W5zPhi4LVM+28oObD4ac=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8f/zBc9sYTK1e73NefD07XG1gA/fqVsf8CZ5EyualYk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B99E8C85A4BB4886BA6E3043B3A7553A481FB9C0", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "9D+mHClSgLhk5LVobp4HPZi5N3+SUrzFKBd9Fz86Ml4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZDJSsUONDbWTaQATQjuhqxsQFTnSyzSburJRflWe6ro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C1A12367BC4BD69AF83B436A15D33703F381375E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QoUOhrmZjUftNo5mXv8nIlT+QXIN3tDR3XOb2phGa0I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C56B6E67680CEB8BF11B0B5FCAE3987EB930188E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "DU+N0lyWiAJ3aUbKUz5q/LOQUDIPTunXAcK78TVKlpk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D361FCD15625DF4EA62DB0021C8D67C6083C8735", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7Zs1DiFznmkmW6Yh0lh1nT2fRdcrm+2rFwUillbFS+w=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D447195654516BE994064E03868856302AEAF1D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u7GVl6wdnCsWjxNSxnOCwxnZTWLYTlaB6to7efS7RWY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D6BAFC0943840D65A80FCABC03BED8BE3FA7A8D3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ze+xQF2/qcTtY9cje/r150eNoXCs4B1Vacf3TPcwquE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K+cn+8TPKo7d9dNhdj999tu1T108JCxecojB0pkssl0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAA78817A47B08F3022C756FA3BDE8E3CE14F761", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "9fJlZL8iH/1ysAI/r+2cSqXOT67uknmJKnfIIaShLww=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EB8F0269F7A03728DD8D57D1484545B68DA6697C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7wsvbzutFAAQReO+Jq7L4Drc37uLg6IKafptL9ofTOg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EBBE61282EC27BF8D06D96C2992040450DD2C1B6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "9nbajKrFkiIL/zv6tNIC2ZVcFQOJDcYa4jOSzpw6qX8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "ED245292B061110D52CFD7AE6D02919E6C3480F7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "O7sRf+YCASDFbn5BaxMC+DcoblK00JYTs8oE5uFMnLA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EFE8CD307C19FE1E9C437B59A0066EDD97F45E9D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ov8G5YKHc1hjCBM/HT5k+MswEwXf+UZfP33bKi1prO8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F1DA81336F50B87982CF10581D308080031406C6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TCNu3Qckfx5+zXKvDTIHAFd/FZgbk013UFYIZqWl7w8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "wqp6kT/3DEZ81E8BAdD802/NccJcCyBWBVrah3EOTFk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FFF869AF4555A83882CE6697720536EF9759CF69", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bZexjZwa8waNh2TSQjSenvvyjtNS0j98rRHUKdsvRxY=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "01343237335CCFAD102B8BD435D49D3A7E73A0A1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Kam3xVXv675BD8rZmi4Zs5jdR4+8I8i8ZEZU0gs9Bp4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "04CA9AA40B76FF67B56D5A9285CB9AE5ED2F3247", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "/hFZhF/r5QiEeRGVjMZhG0sO0SeqlURltv8wMjkmOG4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "050E6732CEC76C71C0CF6784EB4A4E2CEE8C23B0", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "b7OxLS/2TcshawP8QjsCuyxOUe9d3566aFczz61UZNc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "239D1ACB182F9EC413D6AD8BED3A13447318B95F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ELiW5vI49RoPS71qjid0QFJM8CZpmLnW7qkmN8lQU8g=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "26E91E700545D79E8A18092C393DB76294DF393A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F8xDDGP4gRkFMeuIlULpbOP6aGPdTe5gZT7kCCnAQIY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "fWMaYDTFwdDo7SVw9hBIraX2GVqvzKhNKEUkr/2ZnEc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "2D963CD0FA15D15C1C200D578CCDC2C692B72036", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Uq1fQj/TXkpg+zP37a//6YC04vQHWraWfYSg88fMHxw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "31580E874C4F84AA5EB5F986FA70B74F8D1865BE", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "scpN1hLNChIB1QuRHojxUwl59cPP2KpwzilLU10JViM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "319549CEC8B9DADB70C7E8DBBC8FE5D550398506", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "iPt9P7DZ9EUBhWssBSvr/qYatOs08WwLCZbfeuW5hds=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "etUp4mnEHDdNnJSwu5KW8EMXYt7n94iYZm+y7xa9ym8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R1rD/692T348fL4cA0mvvbK9aANwT0vBNAT5B9+p+rw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C733B78F612FB791744711958D8BC4A3D1B54BF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dul9CqXgrwNXGlWp4ya6mulGjKJok/Q2RYqITOGgYro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3D7E3723C921B1D35B52921B8511142BF5976863", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "vfycl3VTi9VKc+Fytp4pvbp0+xZKEUTufet65El49EA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "400C0199DEC08A2DBFDF5D081AC15FD6685E8870", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "y+sL3o3wbcoAx67HqR8BNzJVokJrYGI5pflGS8GMSv0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "42D162EDB46B7C1FEA616810A7617A6369958ADE", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "U4HzaR1kBj9HGcZU1I3rIZMwMoikUmYQyIMZktuBOF0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JqkfZ01ZvkPHj9ohj0F2Saa5t6KIX5uq1bhHS7YAyxk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "M5rP8lPaJdES+Bd4oWI/va2sRUvbJiYINzOpUdiuO8Q=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4D9FD26B2372FBFE05C0452D534C6014C4D7F887", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "mGpmR8PNc6w2cUzPwAQhkSadkyGOuKMl68Nji5E3h5o=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "55027F5FDE2DFC9F1C956D4700A0E60E47BC8126", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "zfSXZ7DLwIeRwhbsE/Pr7cSaQZTmySpuXmGEnNRUZpc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5AE3C3EDDD4C4F12E0A45618C9A7EE302BF0C466", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZVXL7nJ5h9ZrCc6K3ZMgqR7HhT36DroxaBN7/kRHRx4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "627231A077D55F34733997ECD928CE2C511F126C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UaISVfdgdm5p0+bwCbeatoNYfJP6LzW5k4DoL8++t4U=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "62B738D2DFB76A0938F116B001D4AD686B75F700", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bgZ8KLzPd4mI0aDX5aRLG7piFzEt59yzsq3djHZMV1s=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GR4akX9jBcU4iFUBqB3NGwD3CuSTGPHiaWofAhCjCiE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6D4B3D65AD9A81CD7AE83EA598B6FD2818F7F6D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dHIiP4b5najkXBsEsplzaD8hQubhKlOrUEVOZ+NY+8A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6DC5F977934E65C23231DDC30BF273F22FF5454E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RQYSRBpF1ESzlpakxi9woi1sM2EiMYBxsf88soDQrKg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "r7QqYEO8hh6xOwJMpsH+gYer+oOcuP/UQyG7NNsLLHk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "IPoyPEpBWphJbDnocj0x7bFbIX0grHlypAkknLjia3E=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "74830E4D56CD8E0ECC47E508CBA279042A3882C9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KzE4Qyz7He+wo2wMepqCgTD4n10WA1Xafryn9Xgt6I0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "74C2BE39F07B51E72003D4C437535A797D2774BA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "qThLDyok7ht1m6Qj9sMPFfOvXQUIbnJ5PSmBxdnG0Rc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "766BE28A48C243E4F9AC3FA6B5505B6208EF4494", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PeiNyRBUZ/qNnGl11xmW6b/Ejxq+9hfXdXPBewEzjqo=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Pfy3anXtYHMFjDLvM+5jJN3iS5Ypz9NMJ1KTNVjfJ7I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JgRep5bgxhsdM6EVAEzE/cEaxMsdR6/VtG24KHgHDyc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UGBPzd5VtGwtUkXOkCgJuzUO6s7Zk0RGKCo/Csdlqf4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2ekMO1AKawC1gbXty/y6KBVpUfC9RcKyf3sR0ZK7UR8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "822D9296BE1DAF413AB15B489C002F4CEAD426D7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "InuzWLzsYP/6DLHQbmiYe0rtduz2xktozH2FmOKQsZc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "82FB9EE4538CEAA9C808E862C8D47D36C143E0DB", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QOPk17DOenwtH6MoTdxaW1/+ZUJw8r4QjevWGDpBi1k=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "890C8588FAE1C90E164BFF1917A3EC93FF7AE8EF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "espgSJouSR/5l7I0UHcZqkUgByHgtt4yFAYzNbw4UVg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8B730D99A94FEA0729980BDBB4585DC2B7E932D3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "E2+EA4BJea4XtU/Aahf4t8TpJG2FmJ0yIEP8dpDAABQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "92932AD7E082B90296C192F3113710CD6F99432E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GJlkT7S82nRWW34K5ax6ZCW9EV2nt1E/PF1P5LQgJdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "93597B2726E0FDD812E38163799427FA2FF684A8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8nCk/jO6oTXElCrzQ4YOdQkE6Rxj2AHMf9qxMPItnwQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "9562DE62254FB0C58E70196412E5F3C9D30B80AA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "s8MeP7HuqZOi9/wCl1Su1+R/kmhSvWx0BQiXog6CM8A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "990CDD32CD8EF97E5EC9D3E9F8C25543A7EDAA33", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UseUFPt/FyVO1D19U7tHq4/CAsW/JxWOeTbw/ZftxMM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "9AE69E7D6961BB4CDAA74F99BB45A9EE25B02288", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PbgEtU7KS/td42OxA7Aq7C49zcWVgbG7+pn5mjRBrqA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Hm8gqT6zv3BHDTjlY1nLMK2U4gte/cducumkYBgvXig=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQBydj5eqXzfBc++Y+9Q5RaUtEXtQghUR0duadGH9dk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "z7XkAAZ+x6klleinW1VTrsMLnAwNF9LHBFprFx1E4bA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEXsZIGASOuKR3SQn2cakTAkulEbm2kElVjj50W2oJw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A67BF23C710F87B158BC3369684A3033D3C8112E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "E3+y8GQu99AUysuGJfmtQxKYWRp7lvMPUoH67bt9k+8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZHfThztGFsj0VfR6xV1r5ZA09Q6/+np9oYXs8CWY4F8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AD28DEF4048F1BC51A8800A26E697A7771A6AF40", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "L7pTIdyDJ9DHXRXMGcDeLxQ7KUP3AKiPpggq385vkrA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6lcuin9eD6uwAu9qjsoRjtd+uCtVUZbn//5UqLng9mI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AFBD6E8C17284683A951FB263DDCB856AB61A176", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "0b2pdpqDMNKqBqZUpwLNqh6s/hblF4PaXJQLO1XZIs0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B058604741DFB193660713A02366D5A6CF1EF016", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uktjN/4JpMiNcfX4GYir212W5zPhi4LVM+28oObD4ac=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8f/zBc9sYTK1e73NefD07XG1gA/fqVsf8CZ5EyualYk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ct8qHvpO82bPqzj2YxHkFgE+fmxVF0q7fTuvXzsK6Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B99E8C85A4BB4886BA6E3043B3A7553A481FB9C0", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "9D+mHClSgLhk5LVobp4HPZi5N3+SUrzFKBd9Fz86Ml4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZDJSsUONDbWTaQATQjuhqxsQFTnSyzSburJRflWe6ro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C453130417F90DCAE44D28978DE1FB987507E6E1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Cyw/3K8X71s0tFS0kFJb1HxaDdqcfodHQD4HXZ1p/rQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "55KLg7eVl0IyiFhu7r38WGQizm6hglE4rsAo68dGK28=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CA6211FB7B017D171FB7C5E46269AB49C9A1A135", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Y9W7N4IeYcWu6yvh9XKzt2cHsI/QOAMEQgDhQG79yxQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D281629B8289556EC5E1C9C2A78FEB2B0A18B4EC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "xzIY0miEtnX/3fduBl9vYN2iDEmt7HIGK3Qb0bywdbU=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D361FCD15625DF4EA62DB0021C8D67C6083C8735", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7Zs1DiFznmkmW6Yh0lh1nT2fRdcrm+2rFwUillbFS+w=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D447195654516BE994064E03868856302AEAF1D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u7GVl6wdnCsWjxNSxnOCwxnZTWLYTlaB6to7efS7RWY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D6BAFC0943840D65A80FCABC03BED8BE3FA7A8D3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ze+xQF2/qcTtY9cje/r150eNoXCs4B1Vacf3TPcwquE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K+cn+8TPKo7d9dNhdj999tu1T108JCxecojB0pkssl0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAA78817A47B08F3022C756FA3BDE8E3CE14F761", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "9fJlZL8iH/1ysAI/r+2cSqXOT67uknmJKnfIIaShLww=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EB8F0269F7A03728DD8D57D1484545B68DA6697C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7wsvbzutFAAQReO+Jq7L4Drc37uLg6IKafptL9ofTOg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EBBE61282EC27BF8D06D96C2992040450DD2C1B6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "9nbajKrFkiIL/zv6tNIC2ZVcFQOJDcYa4jOSzpw6qX8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "ED245292B061110D52CFD7AE6D02919E6C3480F7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "O7sRf+YCASDFbn5BaxMC+DcoblK00JYTs8oE5uFMnLA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EED08060959B8BC09DF99BB8A51A08C8D6F1663D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "qBJDd/Wkt0KQfBUw4+wsWIpaqpSiUAQjGsTKfoz8IF4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "CkWTr7zqfXcDHuTn961EfHkJv82Ql1oibFWbfROfbCc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EFE8CD307C19FE1E9C437B59A0066EDD97F45E9D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ov8G5YKHc1hjCBM/HT5k+MswEwXf+UZfP33bKi1prO8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F08432D4BD305E8D18FBA52D3B1D351C486B9217", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "T66D+MDA5XJsSmlca6yAEADfkNnERoNTzWdQ/q5y/Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F1DA81336F50B87982CF10581D308080031406C6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TCNu3Qckfx5+zXKvDTIHAFd/FZgbk013UFYIZqWl7w8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F4d36ebIiyCzz/pk4sGrxYnls8XuzOfMRh/lF2LTdA4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "wqp6kT/3DEZ81E8BAdD802/NccJcCyBWBVrah3EOTFk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FFF869AF4555A83882CE6697720536EF9759CF69", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bZexjZwa8waNh2TSQjSenvvyjtNS0j98rRHUKdsvRxY=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n60", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n62", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n66", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n78", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n82", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n83", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n90", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n95", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n100", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n51", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n52", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n53", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n54", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n55", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n56", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n57", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n58", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n59", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n61", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n64", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n65", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n67", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n68", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n69", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n70", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n71", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n72", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n73", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n74", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n75", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n76", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n77", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n79", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n80", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n81", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n84", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n85", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n86", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n87", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n88", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n89", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n91", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n92", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n93", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n94", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n96", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n97", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n98", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n99", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:03Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestSuccess.tla b/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestSuccess.tla new file mode 100644 index 000000000..353cf493c --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC100_2_faulty_TestSuccess.tla @@ -0,0 +1,5455 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC100_2_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n10", + "n17", + "n2", + "n23", + "n24", + "n28", + "n31", + "n32", + "n33", + "n36", + "n41", + "n42", + "n43", + "n51", + "n59", + "n6", + "n67", + "n74", + "n8", + "n80", + "n86", + "n90", + "n92", + "n93", + "n95", + "n96" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n1", + "n10", + "n100", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n61", + "n64", + "n65", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n79", + "n8", + "n80", + "n81", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n91", + "n92", + "n93", + "n94", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + height |-> 2, + lastCommit |-> + { "n1", + "n100", + "n12", + "n14", + "n15", + "n16", + "n18", + "n19", + "n20", + "n21", + "n22", + "n24", + "n26", + "n28", + "n31", + "n32", + "n33", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n50", + "n52", + "n54", + "n55", + "n56", + "n58", + "n60", + "n61", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n75", + "n77", + "n78", + "n79", + "n8", + "n80", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n98", + "n99" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n61", + "n64", + "n65", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n79", + "n8", + "n80", + "n81", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n91", + "n92", + "n93", + "n94", + "n96", + "n97", + "n98", + "n99" }, + height |-> 3, + lastCommit |-> + { "n11", + "n14", + "n15", + "n16", + "n21", + "n23", + "n24", + "n25", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n5", + "n50", + "n53", + "n60", + "n61", + "n62", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n78", + "n79", + "n83", + "n85", + "n88", + "n89", + "n90", + "n92", + "n93", + "n94", + "n95", + "n97", + "n98" }, + time |-> 3] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 3, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 2 +/\ now = 3 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 3 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State3 *) + +State3 == +/\ Faulty = { "n10", + "n17", + "n2", + "n23", + "n24", + "n28", + "n31", + "n32", + "n33", + "n36", + "n41", + "n42", + "n43", + "n51", + "n59", + "n6", + "n67", + "n74", + "n8", + "n80", + "n86", + "n90", + "n92", + "n93", + "n95", + "n96" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n1", + "n10", + "n100", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n61", + "n64", + "n65", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n79", + "n8", + "n80", + "n81", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n91", + "n92", + "n93", + "n94", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + height |-> 2, + lastCommit |-> + { "n1", + "n100", + "n12", + "n14", + "n15", + "n16", + "n18", + "n19", + "n20", + "n21", + "n22", + "n24", + "n26", + "n28", + "n31", + "n32", + "n33", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n50", + "n52", + "n54", + "n55", + "n56", + "n58", + "n60", + "n61", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n75", + "n77", + "n78", + "n79", + "n8", + "n80", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n98", + "n99" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n100", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n61", + "n64", + "n65", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n79", + "n8", + "n80", + "n81", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n91", + "n92", + "n93", + "n94", + "n96", + "n97", + "n98", + "n99" }, + height |-> 3, + lastCommit |-> + { "n11", + "n14", + "n15", + "n16", + "n21", + "n23", + "n24", + "n25", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n5", + "n50", + "n53", + "n60", + "n61", + "n62", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n78", + "n79", + "n83", + "n85", + "n88", + "n89", + "n90", + "n92", + "n93", + "n94", + "n95", + "n97", + "n98" }, + time |-> 3] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> + { "n10", + "n14", + "n15", + "n16", + "n20", + "n24", + "n29", + "n3", + "n31", + "n33", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n5", + "n51", + "n55", + "n58", + "n60", + "n62", + "n64", + "n65", + "n66", + "n70", + "n71", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n84", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n97", + "n98" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n100", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n61", + "n64", + "n65", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n79", + "n8", + "n80", + "n81", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n91", + "n92", + "n93", + "n94", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + height |-> 2, + lastCommit |-> + { "n1", + "n100", + "n12", + "n14", + "n15", + "n16", + "n18", + "n19", + "n20", + "n21", + "n22", + "n24", + "n26", + "n28", + "n31", + "n32", + "n33", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n50", + "n52", + "n54", + "n55", + "n56", + "n58", + "n60", + "n61", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n75", + "n77", + "n78", + "n79", + "n8", + "n80", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n98", + "n99" }, + time |-> 2]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 3, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> + { "n10", + "n14", + "n15", + "n16", + "n20", + "n24", + "n29", + "n3", + "n31", + "n33", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n5", + "n51", + "n55", + "n58", + "n60", + "n62", + "n64", + "n65", + "n66", + "n70", + "n71", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n84", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n97", + "n98" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n100", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n61", + "n64", + "n65", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n79", + "n8", + "n80", + "n81", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n91", + "n92", + "n93", + "n94", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + height |-> 2, + lastCommit |-> + { "n1", + "n100", + "n12", + "n14", + "n15", + "n16", + "n18", + "n19", + "n20", + "n21", + "n22", + "n24", + "n26", + "n28", + "n31", + "n32", + "n33", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n50", + "n52", + "n54", + "n55", + "n56", + "n58", + "n60", + "n61", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n75", + "n77", + "n78", + "n79", + "n8", + "n80", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n98", + "n99" }, + time |-> 2]], + now |-> 3, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> + { "n10", + "n14", + "n15", + "n16", + "n20", + "n24", + "n29", + "n3", + "n31", + "n33", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n5", + "n51", + "n55", + "n58", + "n60", + "n62", + "n64", + "n65", + "n66", + "n70", + "n71", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n84", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n97", + "n98" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n100", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n61", + "n64", + "n65", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n79", + "n8", + "n80", + "n81", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n91", + "n92", + "n93", + "n94", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + height |-> 2, + lastCommit |-> + { "n1", + "n100", + "n12", + "n14", + "n15", + "n16", + "n18", + "n19", + "n20", + "n21", + "n22", + "n24", + "n26", + "n28", + "n31", + "n32", + "n33", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n50", + "n52", + "n54", + "n55", + "n56", + "n58", + "n60", + "n61", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n75", + "n77", + "n78", + "n79", + "n8", + "n80", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n98", + "n99" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" +/\ nextHeight = 2 +/\ now = 3 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> + { "n10", + "n14", + "n15", + "n16", + "n20", + "n24", + "n29", + "n3", + "n31", + "n33", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n5", + "n51", + "n55", + "n58", + "n60", + "n62", + "n64", + "n65", + "n66", + "n70", + "n71", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n84", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n97", + "n98" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n100", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n61", + "n64", + "n65", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n79", + "n8", + "n80", + "n81", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n91", + "n92", + "n93", + "n94", + "n96", + "n97", + "n98", + "n99" }, + VS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + height |-> 2, + lastCommit |-> + { "n1", + "n100", + "n12", + "n14", + "n15", + "n16", + "n18", + "n19", + "n20", + "n21", + "n22", + "n24", + "n26", + "n28", + "n31", + "n32", + "n33", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n50", + "n52", + "n54", + "n55", + "n56", + "n58", + "n60", + "n61", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n75", + "n77", + "n78", + "n79", + "n8", + "n80", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n98", + "n99" }, + time |-> 2]] +/\ prevNow = 3 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + header |-> + [NextVS |-> + { "n1", + "n10", + "n11", + "n14", + "n15", + "n16", + "n20", + "n21", + "n23", + "n24", + "n25", + "n26", + "n29", + "n3", + "n30", + "n31", + "n33", + "n34", + "n35", + "n36", + "n42", + "n44", + "n45", + "n46", + "n48", + "n49", + "n5", + "n50", + "n51", + "n53", + "n54", + "n55", + "n58", + "n60", + "n61", + "n62", + "n64", + "n65", + "n66", + "n67", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n77", + "n78", + "n79", + "n82", + "n83", + "n84", + "n85", + "n88", + "n89", + "n9", + "n90", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98" }, + VS |-> + { "n1", + "n10", + "n100", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n51", + "n52", + "n53", + "n54", + "n55", + "n56", + "n57", + "n58", + "n59", + "n6", + "n60", + "n61", + "n62", + "n63", + "n64", + "n65", + "n66", + "n67", + "n68", + "n69", + "n7", + "n70", + "n71", + "n72", + "n73", + "n74", + "n75", + "n76", + "n77", + "n78", + "n79", + "n8", + "n80", + "n81", + "n82", + "n83", + "n84", + "n85", + "n86", + "n87", + "n88", + "n89", + "n9", + "n90", + "n91", + "n92", + "n93", + "n94", + "n95", + "n96", + "n97", + "n98", + "n99" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedSuccess" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + state = "finishedSuccess" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 2 + +================================================================================ +\* Created by Apalache on Fri Nov 06 09:53:27 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitEmptyValset.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitEmptyValset.json new file mode 100644 index 000000000..4fd0376f0 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitEmptyValset.json @@ -0,0 +1,368 @@ +{ + "description": "MC10_3_faulty_TestEmptyCommitEmptyValset.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "C37E7CF70E34854CCB7EE409AFEE41035B0A632CF8CE406B9559E3DF7408886C", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "51F76C9D4C04B3831FCB161BE98288E571C23D7C9B982382E8D4A49D72B19353", + "part_set_header": { + "total": 1, + "hash": "51F76C9D4C04B3831FCB161BE98288E571C23D7C9B982382E8D4A49D72B19353" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "11p25grIpcrqIy/QwS078h7f14+NnLXHTWaCItVuMVWk1qcYHM/i1XPIQ4B6CrKipizdAUNmInMiuWJUiJH6Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "vTkldQXV8sQHS9YnFOgG/N1nRGBw8xB8FBV2DZKZMe49st/AwGVCkVKhoL510N1AFCIbUgDvgAAiO4lC+LlWBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "smgZRwQBBBMGyBeLn3ClUVZ07T94QJKr6IzedML65uS6b1Cz3KNowIk4oc8TQhG5oZIHO63nxvvZTKHwrJvZBg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4vjuPTVAe/cnLqS60XtyExrWTu+VTpcQxpyVg4QFJfkQvdfjwDw806FNBnNkQw4KwKabXUxwhvMF/fhEPGwoBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "6cBXwOEIO8F+oFQT2YMySF7c8oY3aTz7DsinqGGiiHNAr/dKGrWQtJVffn5CRXUr0ED/pvA1eQ3hXEic/BLECg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "snzN01novpQzR//CJkw7nycRXNn2TjlNII6TGI4w2kP0AZkLkYWqBdLD4OjakgEFzkeSEm8zeGeEL1FNz6P1Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "lP0ttduUfKmV+bohUx4b6vl9RgPkMiTx7BlvZUFn8L1HD3/lrlf4PfUUTWYXfAJHvXT4P5fWBNOW6iTi8DXuCg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "i8cdDiTW7i58hLjthkO4HmwCxKHmwRoHJsO0amka9kiNGWTRrUtM6bLNL09mbQKtg3hGEXPwympuQzw77cOWDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Ta4ACP7SsJZyRYhEBPzIvqnWxyqybtPwO+DOgpElTEc0b+aEBGS7Zpkx8pNjWC1snCiGt0Ev6CfTkeS96SklAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "V8a3YNaJKUanNZOlnhH60Hbc+oJQW5kdA7jlUojjAZp2pf/KNlrGsFckrv1gO9R4sgYgcZP1jQBaKdMz8bXXAA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:02:55.160465697Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "43448BEC3E589BF1455FAD3F42E49816C19DF7F2E58CD95EFEDFAC45E05D98A7", + "consensus_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "730D3D6B2E9F4F0F23879458F2D02E0004F0F241" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "0D7E5BE9CEB6A9DB0F43C4FA66C2FC70A445F6D74C0E68AAC65A49B553037C5B", + "part_set_header": { + "total": 1, + "hash": "0D7E5BE9CEB6A9DB0F43C4FA66C2FC70A445F6D74C0E68AAC65A49B553037C5B" + } + }, + "signatures": [] + } + }, + "validator_set": { + "validators": [] + }, + "next_validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [], + "round": null + }, + "validators": [], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitEmptyValset.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitEmptyValset.tla new file mode 100644 index 000000000..23b235bd3 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitEmptyValset.tla @@ -0,0 +1,239 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n4", "n6" } +/\ blockchain = 1 + :> [NextVS |-> { "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3", "n7", "n9" }, + VS |-> { "n2", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n4", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n3", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n2", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n7", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = { "n4", "n6" } +/\ blockchain = 1 + :> [NextVS |-> { "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3", "n7", "n9" }, + VS |-> { "n2", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n4", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n3", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n2", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n7", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n5", "n6", "n7", "n8" }, + VS |-> {}, + height |-> 3, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n5", "n6", "n7", "n8" }, + VS |-> {}, + height |-> 3, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 3]], + now |-> 1400, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateFailed" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n5", "n6", "n7", "n8" }, + VS |-> {}, + height |-> 3, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 3]] +/\ prevNow = 1400 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["current"]["Commits"] = {} <: {STRING} + /\ history[s$2]["current"]["header"]["VS"] = {} <: {STRING} + /\ ~(history[s$2]["current"]["header"] + = history[s$2]["verified"]["header"]) + /\ history[s$2]["current"]["header"]["height"] + > history[s$2]["verified"]["header"]["height"] + /\ history[s$2]["current"]["header"]["time"] + > history[s$2]["verified"]["header"]["time"] + /\ history[s$2]["current"]["header"]["time"] < history[s$2]["now"] + /\ history[s$2]["verified"]["header"]["time"] + 1400 + > history[s$2]["now"])) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:02:54 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitNonEmptyValset.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitNonEmptyValset.json new file mode 100644 index 000000000..3aa6fe8c5 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitNonEmptyValset.json @@ -0,0 +1,487 @@ +{ + "description": "MC10_3_faulty_TestEmptyCommitNonEmptyValset.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "426F096162E7449E783861E2E55ED7A74162CC457D03A236654EFCD560C1E62E", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "5B3DE248B5637D0EF80DFB6EEE25DEE1C032EE5AD4EA1E040A88A6F8D1A66CE2", + "part_set_header": { + "total": 1, + "hash": "5B3DE248B5637D0EF80DFB6EEE25DEE1C032EE5AD4EA1E040A88A6F8D1A66CE2" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "iM1kN/ztdRFkeZeqiVqMtWfYQTZWa8hVu5tG+dctIqD0pHNXFGgpJNxXpS+Kqr9EOdDgvA1w9q8ya8Oy/ZDPDw==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TOqR+oiOympsDQmDWqBMtSH43OrDZcxt/6c4PYl6IWL2hAZg2zwiHW4Ik/vHOqIZTTpovUFhWG1+gcslgqpYDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "yOS4Ldf7fLZ373kV1HfKbgomP/CygcSQ31oBKxTZ+YaN9BLHo/PSKmfjXcWyP2XuNsDz4h7VBvILGiNNNhlXCg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FbkebhPnDw4hyqEgk6bt2i3y/r1n1CS/SXxaK4XH0tg105p6tIcMAZRaACOH3H4cC0dILqhruyFM22bNBOC5Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2Quv+aiHuQqWI1IEKtqPlv5aBjdgZXzM8qqt7Iwo83ETsA2CwOmiOCR3B3W08GpiyM3HpNvvh5CwDzVbjK9yCg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NZ+VyiqjWlR424zs+KSMMFcJ8N3cbGe9GIahgfoebXC+amEjrY+VxSHKSwzBT9oN8qTUPgEbuIcu/HUW+VGYAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ksOMrQuAEt11dQnIS3voSJGm0kntiOnyvWDpoWAIKtwKNgbOTdH1qT9gsqpaJpqdcXMkcMLXsPXP1+5SFgiSAw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "g8Uw2Cz0klReWNiAGNI6Oxr7K1BxygjHnF1sLAJSnyn8VqBW9IVPLs3+KLgYzrgiJ3rsHsGip5iKXLVm9V0aAg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8R/qHwf4cBh+Pk8tA/L9WisQwiDJkZJrTpL11e5+MMpXIzS4ETOOj60pCkJ1aTdnCsDW2Bvb/k8m8XJxqOMsBg==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "oUqMuR2ZuuREJaNMv/x+81uRbq8GvDFIdAqDlZClNpIeN+WWfFmohXd7xnHYBAYcd6RCFUmn74ovE8Aa3fwTAA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:03:14.160465699Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "D10C908715F9D694ACDF7822FEFBEBE29F7C0CCCA6028D6A2CE7FA6DAF766774", + "next_validators_hash": "63ED8E0DDEDD0C9F0C54CBB64D342499B8BCD53D03A80F3A413C1A218D7062AB", + "consensus_hash": "D10C908715F9D694ACDF7822FEFBEBE29F7C0CCCA6028D6A2CE7FA6DAF766774", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "EFC9576775719E3A8426BB656EBE738AAD4DE18BE86ACFD43E15076829BA7F19", + "part_set_header": { + "total": 1, + "hash": "EFC9576775719E3A8426BB656EBE738AAD4DE18BE86ACFD43E15076829BA7F19" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:04Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitNonEmptyValset.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitNonEmptyValset.tla new file mode 100644 index 000000000..0dfaf64ef --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestEmptyCommitNonEmptyValset.tla @@ -0,0 +1,238 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n4", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n2", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n4", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n7", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 4 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 4 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n4", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n2", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n4", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n7", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {}, + header |-> + [NextVS |-> { "n10", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n4", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n4", "n5", "n7", "n8", "n9" }, + time |-> 2]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {}, + header |-> + [NextVS |-> { "n10", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n4", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n4", "n5", "n7", "n8", "n9" }, + time |-> 2]], + now |-> 4, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateFailed" +/\ nextHeight = 3 +/\ now = 4 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {}, + header |-> + [NextVS |-> { "n10", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n4", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n4", "n5", "n7", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 4 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["current"]["Commits"] = {} <: {STRING} + /\ ~(history[s$2]["current"]["header"]["VS"] = {} <: {STRING}) + /\ ~(history[s$2]["current"]["header"] + = history[s$2]["verified"]["header"]) + /\ history[s$2]["current"]["header"]["height"] + > history[s$2]["verified"]["header"]["height"] + /\ history[s$2]["current"]["header"]["time"] + > history[s$2]["verified"]["header"]["time"] + /\ history[s$2]["current"]["header"]["time"] < history[s$2]["now"] + /\ history[s$2]["verified"]["header"]["time"] + 1400 + > history[s$2]["now"])) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:03:13 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestFailure.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestFailure.json new file mode 100644 index 000000000..3f4c5159b --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestFailure.json @@ -0,0 +1,1130 @@ +{ + "description": "MC10_3_faulty_TestFailure.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "1640E0CCDE91ADE4BD1F4CCDAC7AEC2CA60D1C9684BBAB5C512549831146A78E", + "part_set_header": { + "total": 1, + "hash": "1640E0CCDE91ADE4BD1F4CCDAC7AEC2CA60D1C9684BBAB5C512549831146A78E" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "YKtyUeLxeJ9jOiLOPzAraYG1IfwGuHy5DOgXZ4ieKfEstDdtNx4+9dCtR6+pEJtLdd/5YJOGELhTuKgu6/vQAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Md2j0QtKDHsecgb4kwJgkt9qpkM/SmfKsjqvXf4arND4VORr8dML+YlF6sY3kG6rEW19nB8noQNFPWWwXCOqBw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gFNbs1pZ5Jmfa1cC6AoURUZnEx2ZVacKgd2rK0J0yLoXOs5hXXodnxueLKjuJt5PKBJKvma9I1Imd7V7/PrmDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZiNt9GaMg5lOyH1ykYv+ad6Lrfr+lXo+FuDABYzb6EF6sYHripkonGW7EKg6S8Ro6V2HVPZFS5sIazPAFzhxAA==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FUN1hR4HqpRxXwXdD3zjbNEC3mSVTvegVx4OlFuGvcYYQtahQKADOsaEpzOvr9ETvjiT1o7D1dtq+y9qVSN1Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "B7vsLjHulMTqlUI3+fuzu77PIuUezk7jJ0VaZKiZ4ddaSEr8ZZNh9ey3SZTDFZdWDLoraqQP0tycjpIOY2RxAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "7WGOnPC2hX0YV16eUKqGVtuxhxcSPEJbQGgwumMKrzS3vAcHrE9wgFLJoVFgmMxSwMON0Rwe8aPhNQs57wNSCg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FBgGEUUKNYNWTwszM2DLt1DpKyF6M8yT+HbvfmP1JKR0XeBMpeQQY5Wlskbx5GR7OQVgnrBBiyHrp2rHWf13AA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8BozP+NDEoSHeF+f81FHc/wOTA5UX6lZQqukt06npNpKuNNsw06PUeqTz8jKnT0/DLC+s7Zkw3dqDM/6LDXuDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "OerI5gID8IWtmtnBMbgc1OivhxEt/fb3Lq3GsBrZPyHbtt1yj3gxNlmjW45X6CLqbHp7kCWLZrWdFUDWEVqNCw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:02:21.160465694Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5982008502D1AFF5B12879F6591C7D7515C11D383BCBC9CE5D1469977FF9902F", + "next_validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "consensus_hash": "5982008502D1AFF5B12879F6591C7D7515C11D383BCBC9CE5D1469977FF9902F", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "27635B96F19C2B328AF003A8BB815639F428FE6CDC14ABD55338E307F7FB25C6", + "part_set_header": { + "total": 1, + "hash": "27635B96F19C2B328AF003A8BB815639F428FE6CDC14ABD55338E307F7FB25C6" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "M90Y8xzJ/60aAZ7nKLvPR99X2SFmm12uFciQXdEXvlMjP+tqkgk4kssCj1+gX0xqhvYDUGcnQ97Zectvwsk6Ag==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "PDdbi5MHE3xj4nSs8paKFVyvpue9WPJjxuR4KvCRhCHw0uS8JCxUgOhHnxOZ8vFmfyVPhMgP542m1Nqz7EWEAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "NyJOZd9wNiU0zzO6CVQrbz7wvnjFH5LdIJ7LaIGC9N8W9X2Wd9xVNAGix8mKpoSJU7/qtRo/ftNWGPRsK2LzAg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 4, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 4, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 4, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 4, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 4, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "A404E0E9C6B1D955F98F67280B0C1676855ED5E0773FFE46E8AC17DE40CAF5A0", + "next_validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "consensus_hash": "A404E0E9C6B1D955F98F67280B0C1676855ED5E0773FFE46E8AC17DE40CAF5A0", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "3556C322B1EC6480348E9397502011DCC28631E26292EB41C03F4719FAF20A71", + "part_set_header": { + "total": 1, + "hash": "3556C322B1EC6480348E9397502011DCC28631E26292EB41C03F4719FAF20A71" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "d1SY22eldzrzMotM5vd1oZw8ENFHvLsVTCbxDVHsKa4VNldusDnLuMZHZtNWk8Rsps+ZkF44KlEocGBaOKNVDA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:21Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestFailure.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestFailure.tla new file mode 100644 index 000000000..d700f53a2 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestFailure.tla @@ -0,0 +1,390 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n10", "n3", "n6" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3", "n4", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n10", "n3", "n6" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3", "n4", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n10", "n3", "n6" }, + header |-> + [NextVS |-> {}, + VS |-> { "n10", "n3", "n6", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n3", "n6" }, + header |-> + [NextVS |-> {}, + VS |-> { "n10", "n3", "n6", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1401 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n10", "n3", "n6" }, + header |-> + [NextVS |-> {}, + VS |-> { "n10", "n3", "n6", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]] +/\ prevNow = 1400 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State4 *) + +State4 == +/\ Faulty = { "n10", "n3", "n6" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3", "n4", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n5", "n6", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n3", "n7" }, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n10", "n3", "n6" }, + header |-> + [NextVS |-> {}, + VS |-> { "n10", "n3", "n6", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n3", "n6" }, + header |-> + [NextVS |-> {}, + VS |-> { "n10", "n3", "n6", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n3"}, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n5", "n6", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n3", "n7" }, + time |-> 1]], + now |-> 1401, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateFailed" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1401 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n5", "n6", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n3", "n7" }, + time |-> 1]] +/\ prevNow = 1401 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + state = "finishedFailure" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 3 + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:02:20 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChanges.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChanges.json new file mode 100644 index 000000000..2d35fda0d --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChanges.json @@ -0,0 +1,1330 @@ +{ + "description": "MC10_3_faulty_TestHalfValsetChanges.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "9EE6C46DA66681E976665434DE098799D1BC813A2974F64B5AFEE38BBE454B9A", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "2B3B11AE0C8672D69C5AF06B0AD7E2AF827B43DEB0EECB5AB6E2D4A254E08F68", + "part_set_header": { + "total": 1, + "hash": "2B3B11AE0C8672D69C5AF06B0AD7E2AF827B43DEB0EECB5AB6E2D4A254E08F68" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "76gZkIMRl+wsk98Mv5zFnhnqyXZoKu05XS2WF7ndf3Ad4o5QuXtAoZhi26mLZlJDksOTo60OSi5DY2U8gW51DQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4xO+OvO62MstOHmPno1PrBOmkj8h6Rdc8rehBju9iCvk+UcQUWHumQUFvRGacKNDTqIXilLYPLNOsJAXexkOCw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "iv312oiaPPEhEMo2z0jFSjgpt2fy4mmabtrYZzhnoOhliZo53VEq8Flt9ym1ADs5DhG/OcmVas3nzCJN1B8LBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "s0aO9tKrc6PoouSqFHBg+fqqXPTgoA5MBV5MS2PhhGJJvJK3lWVIBXZJxv/t1wf3VxCfI8Z5aAqPI7usboMrBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "rJqyjmTRu4dZIEC92uh+hcwnVJ1bia7gJvssVjB4XVkDuRllgP+l6LTLNSOhYUhC7C5e0crNQuz2jyYqV0o0Cw==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "90P7PsaNJ1TV5ezhol2pXf4zJ2zhJ6aAkoJVFMGz7I9mzIU+oRDpBrjjC/8Fe3eipj5eHRqNUuO/r3BlltbPAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "xqkvMfxVjwJ/k1m8C98JJO78+DTI4h0BeqbGScwP5HnVPUzDinaoFAbTAgnv4CH439/3w/J0nG1ddmeAPD8QDA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZFacDpj1oyjme7L3agTtcGwqcq1FrBXGGYcMSwGNj5U2fNUIspTzo8j0wOjhpwL6uuG4LIZNf9vQOEPvo5MrBg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Ymbqi2QG33tof3oDUGzowSnMEq+cKRaEvympXPRTywdy/WtF7vNtbeQsGQ66bESbhRDX827KB2BGCB1T7COIBg==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "rwZnZTMX7ADc81O9s0Dcaf80lv8Ls7LplXGicZEKLbGZeH4Je+VSSpD3and6W7CD8WQAmbuyeOohkq04p3d4BA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:05:19.160465711Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "F76C953A2B59C4BF343ECDAF97FED655CD6A56DE3C746EC8C6235FBAB953008F", + "next_validators_hash": "52D7DF09BDED24B9F4ACD15FFFA5C8651A3C45DC863FEA4B3978F564DC9C7E77", + "consensus_hash": "F76C953A2B59C4BF343ECDAF97FED655CD6A56DE3C746EC8C6235FBAB953008F", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "CEA2E5079BD15EDB33381962D55F82284612E2AB4187A42F354DEE002CBED2C2", + "part_set_header": { + "total": 1, + "hash": "CEA2E5079BD15EDB33381962D55F82284612E2AB4187A42F354DEE002CBED2C2" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "Kh3TcSeLI9aYQScD1QTKHzWyAqPhPZk06uUKxkx4bWaoQoXT+NxTMG5L9Un7PiAQd58q7F1DU/9i2SchmCjjDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "wXPOX/NCtr0sIS3PzhxM8pOVmdEKGDoSSGWUKUWhSYk4B+MmAf/uPfIfNrAp/rMPUu3jtin/l99fgOTbqET9AA==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "bbYCarcyy71K455LnTfZg3HABX/EmO6S6AASJ1ldI3DttNwhgWukJT4t182QVOpWLiWAJj4g3qkV43b4nhEaBA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "9EE6C46DA66681E976665434DE098799D1BC813A2974F64B5AFEE38BBE454B9A", + "next_validators_hash": "B3EAC6B09C4FC9525C05AC9F249FE1F66301A4F8590A712545ECDAF37B5F6BE6", + "consensus_hash": "9EE6C46DA66681E976665434DE098799D1BC813A2974F64B5AFEE38BBE454B9A", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "8C0D42FAB9A8AC98D7321F49151FC848971EA41005E00DCB2D69B6D2D45328FC", + "part_set_header": { + "total": 1, + "hash": "8C0D42FAB9A8AC98D7321F49151FC848971EA41005E00DCB2D69B6D2D45328FC" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Mda9rviGydxI7qwtRcd91JQ3CdWr2QvQSms6E5ZZkCwrQbhrhuxZ+EHgtIhQl489ph2mLuD3pUq4IC2nbp1XCw==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "a5GRGkjKedQxznZgrCOf+D9KP2QUmHqRTEAnRGvbBsyc66ChBRYPqMDRn0jOO0XHq3Y65Lzh8wTBd3tlYwsFCg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Z4KX9NN8n2FVdThMHLdya6d0OnWdisjG0f+4Yy6fSp+ffVwyXpQxkD2x1UrGRs0pguehR3Yc0K4d9hqYCJPHBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "ytRyuGcLChJwxwNeh4RFbGL1p7W/AU538A9z9PMk/+/sjSH+Vecqoq4TkL4AFGFBs63pn/q6VdkTimvU4tMdAA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChanges.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChanges.tla new file mode 100644 index 000000000..7b7dcab4a --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChanges.tla @@ -0,0 +1,388 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n1", "n2", "n4", "n6" } +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n10", "n3", "n4", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n8", "n9" }, + time |-> 4] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n10", "n3", "n4", "n5", "n7" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1398 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1398 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n1", "n2", "n4", "n6" } +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n10", "n3", "n4", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n8", "n9" }, + time |-> 4] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n10", "n3", "n4", "n5", "n7" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n2", "n4", "n6" }, + header |-> + [NextVS |-> { "n2", "n6", "n8" }, + VS |-> { "n2", "n4", "n5", "n6" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n4", "n5", "n7" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4", "n6" }, + header |-> + [NextVS |-> { "n2", "n6", "n8" }, + VS |-> { "n2", "n4", "n5", "n6" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n4", "n5", "n7" }, + time |-> 3]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n2", "n4", "n6" }, + header |-> + [NextVS |-> { "n2", "n6", "n8" }, + VS |-> { "n2", "n4", "n5", "n6" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n4", "n5", "n7" }, + time |-> 3]] +/\ prevNow = 1398 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n1", "n2", "n4", "n6" } +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n10", "n3", "n4", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n8", "n9" }, + time |-> 4] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n10", "n3", "n4", "n5", "n7" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n10", "n3", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n10", "n3", "n4", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n2", "n4", "n6" }, + header |-> + [NextVS |-> { "n2", "n6", "n8" }, + VS |-> { "n2", "n4", "n5", "n6" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n4", "n5", "n7" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4", "n6" }, + header |-> + [NextVS |-> { "n2", "n6", "n8" }, + VS |-> { "n2", "n4", "n5", "n6" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n4", "n5", "n7" }, + time |-> 3]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n10", "n3", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n10", "n3", "n4", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n10", "n3", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n10", "n3", "n4", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n10", "n3", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n10", "n3", "n4", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 3)) + /\ 2 + * Cardinality({ + t_2s$1 \in history[s1$2]["current"]["header"]["VS"]: + t_2s$1 \in history[s2$2]["current"]["header"]["VS"] + }) + < Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:05:19 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json new file mode 100644 index 000000000..c48299712 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json @@ -0,0 +1,876 @@ +{ + "description": "MC10_3_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "B9B5F55ED865D48A13D81FC515C0B9CBEC060CCAE61F2ED3DF203B11D1D32464", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "5A9342AE809444CA13A9158648DFBA172B426290044273B6BF803C0A0FE09708", + "part_set_header": { + "total": 1, + "hash": "5A9342AE809444CA13A9158648DFBA172B426290044273B6BF803C0A0FE09708" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4q/aReaFImwNCu9uCQF3VfMazrmicObkBMcPqII562FmlOXYy7BUb5r7TTs7XuRT/fvT+cq6p15aGRTnHBlVAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "clZ1lwRCJCmD7kGbE/7Sq+PgsN65F1IOz0AEdc9m8qNaWKljae4j+4lGKoWAoDjotnyAhMfTjgQy6Nez8WQuAg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "VwK4Bj3ErZrWwB4z4sorq1VA8UYppatVefVV73Go9dStPGhqTHYsW1TTGj2pIYSr82dXMgAEZ1RCNJKVmojdBg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "RtmitNi/bvGXBIxKsRMudqvnq4dJd6r8SiZspcYGlDzarS11A/ppbrOYzznCgmuHCwYTZ/MEqfNCo5RcoiBXAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "k4qpyH/7vUlpaTqjKmSWSH2U9L2hX9l4NP8onbm6uD56sJbbN+c1rXEm/1JnU+aB0LKFHneH5TCgAW5ORm6dAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NXSNtbTy96EHjOMNAF0LE9j3kegq6Q76da3ZUMPlsQ1UCrKP5PtJwrG/vOIJ9yAqFYmqulZIxGF+exOh+RqSAA==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "isTGdbZEqnn16hubsBSits85dZoIfyrTu386z3zeg1Kt5LbnpRVC2roDYMENxHDiEP/yOz/4ONMiKp7DLmFdBg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ieV64+nXVxTLuRJVkp6JYbByhuFYiTgrDB4OekHtCiHqrdjOmh6Oslu8F4f65FvePI4qaL9psuaKspn3Fyq6Bw==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "VgJuAZDp4E6Pp9UMU0Mgyx6jRq6xuCeNYdP6eRrarbBkKS66h7ivhnCHWUMnTXD8x3r8Kesvp4mcTNHGcc56AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "xBzUwY5F1GUirNkLKpR/FzqmXjYaLrUZgtwLy72AJFuXvLKJnT+ZDVYYCLTGsODVDgfVvUJLTfeZPOnGIG8ODQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:06:03.160465716Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "6EE92B9170334EBC20AFECE2CEFD890B3B54B24E7B1FA0424BC566CF7533E7F2", + "next_validators_hash": "7218F2BE5607AF3FEE70AD425E623913AD3981324ECC056D4D707884DAB4232E", + "consensus_hash": "6EE92B9170334EBC20AFECE2CEFD890B3B54B24E7B1FA0424BC566CF7533E7F2", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "6549D748F8E6BC9869000A715CE2A6CEEEBF3EBE85C10776C6F353B37A873E47", + "part_set_header": { + "total": 1, + "hash": "6549D748F8E6BC9869000A715CE2A6CEEEBF3EBE85C10776C6F353B37A873E47" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "gE/szQbZXrl97mwPqBy4+nNEW37Qe5v162Fxkl4iZfKoBYtSF9IU6Bv6Z7WMRX8XBz6glGwYPbSD7hQuN0LODw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "N27M5assj+9yapTJC4j+C3gjHUd+IkO3/+p8KOJJf0RGxLAnKGWkCpEFtXvpoSoXkcSeL0rHpkeDjsQZbFcOAg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "hO2mNkKAPf8WpfazBgJOXSaWdJ+9VxoeQn4NgL9Qmgbq+pjBCXOQ0cuzAuXit3dYgsKJf1Lwm8a18aRYtZUYAQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:19Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "B9B5F55ED865D48A13D81FC515C0B9CBEC060CCAE61F2ED3DF203B11D1D32464", + "next_validators_hash": "6EE92B9170334EBC20AFECE2CEFD890B3B54B24E7B1FA0424BC566CF7533E7F2", + "consensus_hash": "B9B5F55ED865D48A13D81FC515C0B9CBEC060CCAE61F2ED3DF203B11D1D32464", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "C94367C829753622771BE3A851CAAD5A37350B1156F9262E765C3029E930B69F", + "part_set_header": { + "total": 1, + "hash": "C94367C829753622771BE3A851CAAD5A37350B1156F9262E765C3029E930B69F" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "wgTRPumCkbvvqk9mngXJ988uegXhMpIUBMESRmKsMhAzuMmBWRCarpHmC5DoZi5Ue1rvCYdhYNrFvZXjaqvgDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "IL1ACNvV5dCziPwO3PM8RckKhuybDa9HZUcEEk2TV7FcvLGC7Cnlx+aCF6/eG6LZldx33rBMhpdIpB2lUe9qDA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.tla new file mode 100644 index 000000000..34cf91140 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.tla @@ -0,0 +1,389 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {"n8"} +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n8" }, + VS |-> { "n10", "n5" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n5", "n6" }, + VS |-> { "n1", "n2", "n3", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n5" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n5", "n6" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n8" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1399 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1399 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {"n8"} +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n8" }, + VS |-> { "n10", "n5" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n5", "n6" }, + VS |-> { "n1", "n2", "n3", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n5" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n5", "n6" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n8" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n1", "n3", "n8" }, + header |-> + [NextVS |-> { "n5", "n6" }, + VS |-> { "n1", "n2", "n3", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n5" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n3", "n8" }, + header |-> + [NextVS |-> { "n5", "n6" }, + VS |-> { "n1", "n2", "n3", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n5" }, + time |-> 3]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n1", "n3", "n8" }, + header |-> + [NextVS |-> { "n5", "n6" }, + VS |-> { "n1", "n2", "n3", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n5" }, + time |-> 3]] +/\ prevNow = 1399 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = {"n8"} +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n8" }, + VS |-> { "n10", "n5" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n5", "n6" }, + VS |-> { "n1", "n2", "n3", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n5" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n5", "n6" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n8" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n10", "n5" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n8" }, + VS |-> { "n10", "n5" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n1", "n3", "n8" }, + header |-> + [NextVS |-> { "n5", "n6" }, + VS |-> { "n1", "n2", "n3", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n5" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n3", "n8" }, + header |-> + [NextVS |-> { "n5", "n6" }, + VS |-> { "n1", "n2", "n3", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n5" }, + time |-> 3]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n10", "n5" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n8" }, + VS |-> { "n10", "n5" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n10", "n5" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n8" }, + VS |-> { "n10", "n5" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n10", "n5" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n8" }, + VS |-> { "n10", "n5" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n5" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ history[s2$2]["verdict"] = "NOT_ENOUGH_TRUST" + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 3)) + /\ 2 + * Cardinality({ + t_2s$1 \in history[s1$2]["current"]["header"]["VS"]: + t_2s$1 \in history[s2$2]["current"]["header"]["VS"] + }) + < Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:06:02 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictSuccess.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictSuccess.json new file mode 100644 index 000000000..bef1aa523 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictSuccess.json @@ -0,0 +1,1649 @@ +{ + "description": "MC10_3_faulty_TestHalfValsetChangesVerdictSuccess.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "58077232E69E0A755F303E97AAD4C70554E1E0C302F737E3D78F665DA7A87936", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "FF912BAE8E48ED6AAC12CC2F061B4831F55D5D45605E243FC46C8A53A02356DA", + "part_set_header": { + "total": 1, + "hash": "FF912BAE8E48ED6AAC12CC2F061B4831F55D5D45605E243FC46C8A53A02356DA" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FbwnZFMAvdwAYtXvlIOrwpRgYBcBr8pLdI5++bw96iE8nywhUtRis5pNdbq+PnB3XfLyKYR9WjM6fhF1g5sjBw==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "+DwbW9G+pk7GnuI/yBdKj3WIwdHQ1uT6qIBQDGsI4EFrPmbAn0FOAsgoBQ5X/tVc7+W4NsaIsRpvpZ9PLIoMBg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "jB+YgothJZMuLfyAuqlPAtpnCLApaPiKG6Wez44N24bwSIqFiCaFy6jkp5hgwtocG0iPc+g4LquMdczNQMZMBA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "V0vd9KPVqwAswjZGJvReBtKLIXZhk7cXVrGZgOMSIvv0x9cwk5No2cHtvg+tIcF0QL4/5QEPhsBgpNH/sdUACQ==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "JKBVin4H3d2WzVgSz1ikxIgD7UeSAognYM1q/E2mBSbvRA5QqH5wxnbFtpp1iQvotrAx0MlYFMQT7JQs029jCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "rAvLFVvc8Au0rvmALzaP1JpIBp2ufHPlJXoFjf+hZFdbClgCdNkzTiruUglwX2ouMWzUyRgL7ZEoQjnIVhEHCw==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5OcMy1etPsvkrowRzbTJ5oV3Q08PhtZ9kBo6RhRgcg16GGF7ZlrlYm1OaedneK/P2CwRl+SYdEOey+23zi9eDg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "1esYRKaV2gfSIzYxCRJSRukisfqvkzOB7EDF5Da6dx2n6eTZUAjV5e5jGKtSgdXcichm89FnWnIT/dPcD3kLDw==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "rOgXI7T8+VWy4lY8T+aPFr+cGVrXTphOLe1uQNKZGRTYBq60HkoO5hLrti6njeZDSlqvHtyAK2s01rLxctECAA==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "O3imGES5fpcpCz/rV/NZCNwQNVP52JsUnxlM6RR3nhL8OWnXkFnkQ2mvQMTGebKDfQSlGgF+aoy623iF+VtFBA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:05:40.160465714Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C04991001305FFA3F4E5ECF3F424A98220FBB1BC2828D238E0CCEB6BDA14F185", + "next_validators_hash": "7B0A75E0A5A11B05FF5187509BF146A2015FC33D782103913FA8B28322E12F31", + "consensus_hash": "C04991001305FFA3F4E5ECF3F424A98220FBB1BC2828D238E0CCEB6BDA14F185", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "93EC0C8821F6F87BB4C1C53B0E241D33D76BB5290BE1636B1DB6D5EF5E6D6C0E", + "part_set_header": { + "total": 1, + "hash": "93EC0C8821F6F87BB4C1C53B0E241D33D76BB5290BE1636B1DB6D5EF5E6D6C0E" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "Ix07qbnT7fpF/c1EmGinXKRuh1FPmsU6t6pmtckEpVQnpF32ZaaXqoFoaYadRR9EngCpDtN7B9M/lT9ufe74CA==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "JESvbtSHKLc2//E6B/pxBF37CUrJnsvJkzuRQh3t99Rxx0NRezOApJseP524gXKvgUK3/pnlHoyd4qK/SQ4EAA==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "X5G9PSbAJa53woPWLoedqcuAjRu9qMdSb6gzbSkpTnw4PvD1ZfkF+noWT5ERNCCg/eqyn+X/hZsMgVH9blwQDg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "4BwsvaqUTsN2nYFRziTmZ00FeDMlWBYHdldNGDfc5OFukovjD5oqe49MCTw4FHaKK5y5rvMOGUEXK2z2VsumDg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "mXbJXL5anh0UYduiM09vzxVIJkk5R+aKKLHUB34h3+MqeBmF7Fzsiyjb07WkoJWIfDmCwGpZ18+srBvhxVzKBQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "58077232E69E0A755F303E97AAD4C70554E1E0C302F737E3D78F665DA7A87936", + "next_validators_hash": "C04991001305FFA3F4E5ECF3F424A98220FBB1BC2828D238E0CCEB6BDA14F185", + "consensus_hash": "58077232E69E0A755F303E97AAD4C70554E1E0C302F737E3D78F665DA7A87936", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "1FC605FEC9EEF56D6D2CA04265EDE998A80CEFF5C64C3333FC9A113DDB958F3E", + "part_set_header": { + "total": 1, + "hash": "1FC605FEC9EEF56D6D2CA04265EDE998A80CEFF5C64C3333FC9A113DDB958F3E" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "whp8HXZuJqZUJv24FmSodfzfRdxtK/giqRDZUKFFzpmBJHzfF7eMnYKqVgBEDJFthI3k3Qx8XBXq+NKonXidDw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "6g29YmCEhw9sB9TY2VIS9CntkfDA+eQJRx1Fwyvm/t2czY5e1Yhc84QbGrh7YxuQyqDcqlb8WPaaVuMZcA5cAw==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "JSTv38+0nNijqg27Ic2TNFXM4shbOvF8+RolVvckVIvKN6LHqIetfZqQU4pFV1RNxUseceZzuC/ttOQqCFcjDw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Hir8/AkksfmVD3uIWienzOiRCawzUuUZfcncc5aNSV++ldBUt4W3hz8Z/fCH57WAg22TImnlFRZFEDjSsjkeAw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictSuccess.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictSuccess.tla new file mode 100644 index 000000000..8f888b120 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHalfValsetChangesVerdictSuccess.tla @@ -0,0 +1,389 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n2", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n8" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n5", "n6", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n2", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n8" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n5", "n6", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n3", "n5", "n6", "n7", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n3", "n5", "n6", "n7", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n3", "n5", "n6", "n7", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] +/\ prevNow = 1400 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n2", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n8" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n5", "n6", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n3", "n4", "n8" }, + header |-> + [NextVS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n8" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n5", "n6", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n3", "n5", "n6", "n7", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n3", "n5", "n6", "n7", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n3", "n4", "n8" }, + header |-> + [NextVS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n8" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n5", "n6", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n3", "n4", "n8" }, + header |-> + [NextVS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n8" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n5", "n6", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n3", "n4", "n8" }, + header |-> + [NextVS |-> { "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n8" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n5", "n6", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ history[s2$2]["verdict"] = "SUCCESS" + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 3)) + /\ 2 + * Cardinality({ + t_2s$1 \in history[s1$2]["current"]["header"]["VS"]: + t_2s$1 \in history[s2$2]["current"]["header"]["VS"] + }) + < Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:05:39 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderFromFuture.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderFromFuture.json new file mode 100644 index 000000000..aabfe3090 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderFromFuture.json @@ -0,0 +1,457 @@ +{ + "description": "MC10_3_faulty_TestHeaderFromFuture.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "76303A7C6BB761E577BCD3DD061F404BA6E7E1701D0284D4F036FA873B33E132", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "435B8D61B65000628A8CC7E6885AA49F54B347F1A407988159111EEAF52D8515", + "part_set_header": { + "total": 1, + "hash": "435B8D61B65000628A8CC7E6885AA49F54B347F1A407988159111EEAF52D8515" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "hxQ9HHNTOS0QjJNwILtYbnkg2az2g4vscbT1Y0+yqKJhXJuHwfC5FS7PthTKHmHMVbmAlqOwfMZBtaNJDaSvBA==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "k3lcYx8blA6ABm6eIIUDlOJqEKRIl+S3vmmOJ3cYhLZgYUQeOKxkNps4TFmnmj2xbzfLBZVpL/fBF7lLwg7GBw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "DvG/4TIpe0R60Qlm39N5FPqsbQh/i/2f07fBQOaiIHhRm6T1pVT2HEbBIgiHd0lwPza5omfklESgpTDZBJSOAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PxrA4YRJF/yu6/Il8BrIYQ4nkDyUJfuVU/msLV8r5Qgd+SQaheE1mz45MiGxJJW4malG0vRvfS70vysGawWXDg==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "jCliiT2iuz05blnF3pZ2fV8+K+t+752+WXKODJKodfW5/acJFSw4gO89GTKhP0gBG37RoGoBLDQ83sn8AzkOCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "fUYrSNFbyUywK4wWcsjdeacmk4W+KHi5I8LBhETCIXdzK3UELYu22VXP5BtSx1Gsh2AJtKck3Xe4+ou5H81wAw==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9Le/Oqwc+G4vPqIB2cGtB9dgy4QDTjfrnnQllAA/T1daIhiReH4vvZ/I5dkX21ZANuBJeRWB3CSX56w41LeKCg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "6TgpB+utzlhVlcIl19l0X2sPZ6gwaX49DL2gMZR0QwS5+c4w++voxlMEPieStRCbyQMN47/uDe38LeLWWtwcAA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PqjYMm4Qx5dKlkfFp1GGO/EKj8f+/CEaz+VD8Lfb22shctHkgbJC2NX+C9+jtwNUhuXIK2d8QsL1DZDq715HAA==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "kx1yJIYABbyLlUp5dDPoXJYsrh+04581A5pv9uLT3IqIonc93bjK3cVk+DwfBLnaF+pvemB0zBK5Y6Jjqc64DQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:03:54.160465703Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:05Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "29F4F021471CCD0C242D9432B38950C9ADFF56D4A699A1B36D18FF916DE3D3D6", + "next_validators_hash": "A0FA45D6FAAA10185F73FAB06DCA784DFE9B82C343587EB262370657C7C71534", + "consensus_hash": "29F4F021471CCD0C242D9432B38950C9ADFF56D4A699A1B36D18FF916DE3D3D6", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "3B24717A75E39BF617EC62C3F2CA8F6B676795DA2F9E57A1B8C4D635F225231B", + "part_set_header": { + "total": 1, + "hash": "3B24717A75E39BF617EC62C3F2CA8F6B676795DA2F9E57A1B8C4D635F225231B" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "b7v+IK1yI0NqyU4coKeXIhV6Ohwtf2WT3IhFRPlQY+ZIFDQcQ5j7SBMgnRV0D6+gl0FAtCRZ2JqVeCZYXFDwAw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "ieuIcDJV+fQbqprSvTJP22WEvgPk7uIfrR6I1q0U9hHoi4x7EOxMwb6vzvLQtci5xh2to3wv+O1bw8gN0TQlBA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 5, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:04Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderFromFuture.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderFromFuture.tla new file mode 100644 index 000000000..14a252e0f --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderFromFuture.tla @@ -0,0 +1,230 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n5", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n5", "n7", "n9" }, + VS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n5", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n7", "n8", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n2", "n5", "n7", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 4 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 4 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = { "n5", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n5", "n7", "n9" }, + VS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n5", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n7", "n8", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n2", "n5", "n7", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n5", "n8" }, + header |-> + [NextVS |-> { "n2", "n5" }, + VS |-> { "n3", "n6" }, + height |-> 4, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 5]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n5", "n8" }, + header |-> + [NextVS |-> { "n2", "n5" }, + VS |-> { "n3", "n6" }, + height |-> 4, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 5]], + now |-> 4, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateFailed" +/\ nextHeight = 3 +/\ now = 4 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n5", "n8" }, + header |-> + [NextVS |-> { "n2", "n5" }, + VS |-> { "n3", "n6" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 5]] +/\ prevNow = 4 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["now"] < history[s$2]["current"]["header"]["time"] + /\ history[s$2]["now"] + < history[s$2]["verified"]["header"]["time"] + 1400)) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:03:52 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderNotWithinTrustingPeriod.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderNotWithinTrustingPeriod.json new file mode 100644 index 000000000..80063ecdc --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderNotWithinTrustingPeriod.json @@ -0,0 +1,1115 @@ +{ + "description": "MC10_3_faulty_TestHeaderNotWithinTrustingPeriod.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "7B9CCEE93EDB721FC6BF2C6FACEB6B05FF183A538DE728E4075F14D03F408B6B", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "ACC8CE69C9051316C2D56419A03222203F8D26E91C6678668499FF6D86285ECA", + "part_set_header": { + "total": 1, + "hash": "ACC8CE69C9051316C2D56419A03222203F8D26E91C6678668499FF6D86285ECA" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "CuK93VRRbFULDXqH2n1F2UQl9TmwQjG6mCdJ5DZOb1lNCnMwLe5bkZi41fC25m6BuS0wgpmubUNxa8U59BqiAA==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "roK6ooUmxH+2dPUS8JZYKtEQMreBTY3+/r8bch3eLUYUdnuvo7aPmbY9yEPTZNq+Yy/bJOxSLsHDMP2msUeiAA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9To9pIdLZHQpDeAinMF5quZTBdyNwPXnfkXUDLM61QROvlwE7GTMli5TaYWw9A+xKzpjVyib2COJoDLSBZaqAw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "0/64BKhvNaXIpD9/wsLNDVLdl0axHj0D59AFLeUFlwArqUl3PageuBKaJbRgTvMgAIa9liO6ir59Ujo2qJgkDA==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "mV/3KVMrtMvrUFPgPLBCUDQuj6dT1/GKobTsLy9mixqVrXLDm0xsBuZCBPOsic38xCnLgLU1YNHxDfwWIt/rDg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QYGl7jFBWaLXKJ63eYBWdPXbZXPkfhb1FoudLInHfgmD/GM8Ikeq8kOM1QUaKJIUY6nxIsmyh75PTLfgBguoAA==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "fnveMfRr5A/LXJ5Zv/G2eX2pLB07c29WhYwnLJ9GGHnkMCg0vFXrzHec1en+0FwySugVeF4/Cl4EmLTvTSZ1CA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Vt7SJ7MHO2Y8tTn3p4zYAQ7voekqgcTDIVLqmmtl1SZC7Kk+pTQKqen4WgHfNLpi/3bgpbOJcNNJpFH8OK+2BA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "liQFp1ZQxzh2NHzO7zXQsZqC4tAuvRlBt54+Q3B/3aQb2PU9f7Agh8fIlL4WE4yeFNGiX02hOWSwdF70sbZHBA==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "g8pptG4x7dbp5GhGcKLEYpLa3x3WDPtHkjlvD3HYDQverDxmPGDHDow4l0U+kXLXrkErYzHFc8kW7uvv56vqDw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:04:31.160465707Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C3FC03232DCB5AD88E0EAD7E8B58881B17CE8EEF457C23881DC95E0C2B4A2F6B", + "next_validators_hash": "CD67F53772E981431092EA7F5337214CF50F126BE6BAE6E1EACBCD593EFC5211", + "consensus_hash": "C3FC03232DCB5AD88E0EAD7E8B58881B17CE8EEF457C23881DC95E0C2B4A2F6B", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "09EF572F1B1621E61F260924D85B3E23812779B4BA10892BE61EEF5BA1E20145", + "part_set_header": { + "total": 1, + "hash": "09EF572F1B1621E61F260924D85B3E23812779B4BA10892BE61EEF5BA1E20145" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "v/7shJ3/7gcerUfPXZdXL9McSWQlRRjbpxu0FjZMs6hoevoh78ah18Aii1Iy3Y2xKyWW6wOFpkC6yQ/y14ypDA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "YUZ0v1RXLKmAAomqttuUa5KUqF6nP3rfeo25gARzdB8oDUEwwiZcF8YumO0JECtNN7xyP5ViEGwbMn9eOEhbCw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "pfZbVTy+PpVLY4H3Ta9XPO2eabaHSmrNmXcLukZs2qXmR3yVgmRojOg3uAgoCUOzjRVle5pumFhNDMXJLQ5uBw==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "KbgnZP04gVxcU9bb7mL3buNoMSJC3OEvJwXU5hjxLP3Z8eL7Q5cAhdOk/2HlUE8kOgJeOGQj+JEFsVTOZATuAw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "0EE5F53AFA84BE0290FC17598BD47B61981E81D4384F351BE8983F3D37BFFA62", + "next_validators_hash": "66F172147B6A0855B3361E4859D5FA7996EDEFD72D80A2F9B9A53C9067AB5C6B", + "consensus_hash": "0EE5F53AFA84BE0290FC17598BD47B61981E81D4384F351BE8983F3D37BFFA62", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "7D5CD1DFB3B72AB99709A901AFF648B2F94FD5B5F570D36656234B560D689C82", + "part_set_header": { + "total": 1, + "hash": "7D5CD1DFB3B72AB99709A901AFF648B2F94FD5B5F570D36656234B560D689C82" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:22Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderNotWithinTrustingPeriod.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderNotWithinTrustingPeriod.tla new file mode 100644 index 000000000..74c04b0d3 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestHeaderNotWithinTrustingPeriod.tla @@ -0,0 +1,379 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n1", "n4", "n6", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n3", "n8" }, + VS |-> { "n2", "n3", "n4", "n5", "n7", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n4", "n5", "n8" }, + time |-> 4] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n8" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4", "n5", "n7", "n8" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n1", "n4", "n6", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n3", "n8" }, + VS |-> { "n2", "n3", "n4", "n5", "n7", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n4", "n5", "n8" }, + time |-> 4] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n8" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4", "n5", "n7", "n8" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n1", "n4", "n6", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n4", "n6", "n9" }, + height |-> 3, + lastCommit |-> {}, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n4", "n6", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n4", "n6", "n9" }, + height |-> 3, + lastCommit |-> {}, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1402 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n1", "n4", "n6", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n4", "n6", "n9" }, + height |-> 3, + lastCommit |-> {}, + time |-> 3]] +/\ prevNow = 1400 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State4 *) + +State4 == +/\ Faulty = { "n1", "n4", "n6", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n3", "n8" }, + VS |-> { "n2", "n3", "n4", "n5", "n7", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n3", "n4", "n5", "n8" }, + time |-> 4] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n8" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4", "n5", "n7", "n8" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n10", "n9" }, + VS |-> { "n10", "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n1", "n4", "n6", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n4", "n6", "n9" }, + height |-> 3, + lastCommit |-> {}, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n4", "n6", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n4", "n6", "n9" }, + height |-> 3, + lastCommit |-> {}, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n10", "n9" }, + VS |-> { "n10", "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]], + now |-> 1402, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateFailed" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1402 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n10", "n9" }, + VS |-> { "n10", "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1402 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n4", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["now"] > history[s$2]["verified"]["header"]["time"] + 1400 + /\ history[s$2]["current"]["header"]["time"] < history[s$2]["now"])) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:04:30 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanThirdValsetChanges.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanThirdValsetChanges.json new file mode 100644 index 000000000..e2f6636fa --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanThirdValsetChanges.json @@ -0,0 +1,1110 @@ +{ + "description": "MC10_3_faulty_TestLessThanThirdValsetChanges.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "77200ECBDC9ECED08D240CDB03A5B8E94ABC5E1626F599C8DCF9EDD169C830AA", + "part_set_header": { + "total": 1, + "hash": "77200ECBDC9ECED08D240CDB03A5B8E94ABC5E1626F599C8DCF9EDD169C830AA" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "M9Ji67RjZ34Q+/DoSxPpHNbRTL1vmS9pREzuzKcCD2kPJpS/uzuTBqaO047h5FddajE3iMFacfzaJLUmm91DBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "r37TlKCpnfTywWkjgJEo/9iECaJ2NGNwhcG1U5v92JeuBtGj50CgNQ8ukLl5DEHT6nHoD0FLsqZ/jpTKyEayDA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "le1rTKsVOKkmt0D38E0xMJUZT607ehQ0ORo+vu4CbI6PBY0bBo7ImVKoV6PH9fMaS2+dsTaza2b9gzeNGHA8AA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "sgBbsT3X1r1fjYGmi7ynfGwwXYrQW2C8qmTqFEJtOclxPx1E+DwFgexDZsM21EmTleT/67zZv3EVk93GBCpaAg==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PP2OPNnkJVLCH1JSMA0f3+gsbMR9idmGzlltbA7MCjzuh/uZMCc4ccYWChYnbDnFk8J/EiT2IfsLPHEpCyZqDg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "6EMJRpR02BmO+2+51jQhVFt0171DaezUOQZ/u+sE808k9XMaUqH6QuJjAUEos9K6N/xUau4IlafWZeQEQZUHBg==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "t503cLkMDgNOpT5kDUiuRETn7RnIIfwwPhDO7GrY0QkswESabyg+3oCBmFE6Y1vL/2uZdIiOkHMKaDeptwWXCA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "bIC2TIEOuDrIprbmmDMRLZnLpT+TK1ThSDOP6Th0Ugi2AuvA8bV7HXdH7SvtkO53/BUAr5JlqtbwJF7xjHmzDg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TlSgxiMT2QzvkIRuXDHn5M1julLw5Znc28d/+Hkc/pT5JwtOs/4qtzxcFIPOqFneA+vuTwbW8nPQTUNCKxZ9Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "DhyiMcJDVqVHKlkVg/wDbhWM8j8WbEE3L6hnqR5i8miOxDy4Pq15i67AEwollTKnMyeiZsClMd/UN7N4jsUOBw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:07:29.160465724Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "EEA606B4865E1B733C49FFA8C7502F940FF6181690EDAC4E5597C4C8B552A29D", + "next_validators_hash": "3144B8CD082622C3F75EA9E2AFB1B8A50EEFA9C3360E3D62A04E27623B4787B5", + "consensus_hash": "EEA606B4865E1B733C49FFA8C7502F940FF6181690EDAC4E5597C4C8B552A29D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "07A13FACAAC5EEA30E54C7598A36256F17E41385B0A747756782668E689F60A6", + "part_set_header": { + "total": 1, + "hash": "07A13FACAAC5EEA30E54C7598A36256F17E41385B0A747756782668E689F60A6" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "CssVOH9Mu0SpBHfUMtxTsPXSxh32cldGtlfRUAdJGUpUkHYPjJEaXDLGSsfMJNk8Q7U4rg/n29AYWb0w9MTeDw==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "dElW/YoMHvqtngpJkYDVycXiS2EAA/wcTMjqSHto5BMXEEw2uHKG9BhDdOHMRX/gBMGcZHMnC3pzsqKVs23eBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "hZ8S21ao2H4VDogczuxCjL3SkdJ1eWPUmP6V0bH9qTLyJdgTi1GqP/mg3Z9xFDxdnN9ysaNTrJtp2xON85bZCA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "B906FB1FE88C9BCC1CA745BA2973705D75D6075467737DEF094596C49D4AF558", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "711B31FF6F4A551F7E4083202DE25672FD5566341794C5D55BDA2A8C2C921A22", + "part_set_header": { + "total": 1, + "hash": "711B31FF6F4A551F7E4083202DE25672FD5566341794C5D55BDA2A8C2C921A22" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "/XvhUOp5MephmPQP4/eHFACVkCPWRUVbUgn1Ax7L7jCBWY4kANEjm2vcftieAxw5Y2Zt6p72dBm4h/7XW9uJAw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanThirdValsetChanges.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanThirdValsetChanges.tla new file mode 100644 index 000000000..ab9c8103a --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanThirdValsetChanges.tla @@ -0,0 +1,406 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n2", "n4", "n7" } +/\ blockchain = 1 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n3"}, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n4", "n5", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n2", "n4", "n7" } +/\ blockchain = 1 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n3"}, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n4", "n5", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n2", "n4", "n7" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n4", "n6", "n7" }, + height |-> 3, + lastCommit |-> + { "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4", "n7" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n4", "n6", "n7" }, + height |-> 3, + lastCommit |-> + { "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n2", "n4", "n7" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n4", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n2", "n4", "n7" } +/\ blockchain = 1 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n3"}, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n4", "n5", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n2", "n4", "n7" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n4", "n6", "n7" }, + height |-> 3, + lastCommit |-> + { "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4", "n7" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n4", "n6", "n7" }, + height |-> 3, + lastCommit |-> + { "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n8", "n9" }, + VS |-> {"n3"}, + height |-> 2, + lastCommit |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 4)) + /\ ~(history[s2$2]["current"]["header"]["VS"] + = history[s1$2]["current"]["header"]["VS"]) + /\ 3 + * Cardinality({ + t_2s$1 \in history[s2$2]["current"]["header"]["VS"]: + ~(t_2s$1 \in history[s1$2]["current"]["header"]["VS"]) + }) + < Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:07:28 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanTwoThirdsSign.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanTwoThirdsSign.json new file mode 100644 index 000000000..40cf1ba3b --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanTwoThirdsSign.json @@ -0,0 +1,898 @@ +{ + "description": "MC10_3_faulty_TestLessThanTwoThirdsSign.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "C6DA4BCE1E2784196B14187C8C0A110AF99749CEF7F93408F86250407FBA008B", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "221194154486657595A0080CF494701400A307E45E5E3D904AFE880C9F48929E", + "part_set_header": { + "total": 1, + "hash": "221194154486657595A0080CF494701400A307E45E5E3D904AFE880C9F48929E" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "xneYALUufQYbx9qq2f2DmSGHC70CgDPlPTufXJwVcMQ3jsSJCueD5ffBa9lXEz1TStIbkuA8xki7GNWzDHbBBw==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "pyUTKBo4FM5I8/TB5iEy9IDGllPsnpfOzDkbCcxkkPgJ+VOvHOlO8ETJlNRnqjLsp/V7orXx9SMd8yRqI3MdCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "fXa2GZDwPk9gXA8nNZphDolBU7se7/QWVfRDODusWtzkh6AuKTKDtmNqR0QUkn9weVe7mnSEZu0UVVLNAIOWAA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "GEp2nB2rlDMPdVbhZvFpASZzWe3XOUMDlxsp09ktEWxdxMFS+qjMM5WHsClftahvup1kLMFUVVkTFQGpKFFmBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9dHL39QJf1tOrp7ofZpZD+wKksvxlTy6gg+QucRkXLmjSXi56/NXCJdRre8T2pIIFKnwxQMEzw7FfsdzKrdqAw==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZPcnr7D4tY0R8gc9g+z1do7jW/J2ok0bmokq+YaU/QPr/G6/J7MRDxaZBi5sRBOjmaoDrRx5fr4waXusFDBjBw==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "joRaqpEs43hIIhornoSKvaiMxZDMqvcMX2JU9K5vlRolc2pjRpUsjezKRO4+uzus/O28YGs8BdAxojJqqAdgDw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "HQS2nXtOM6KJRAeMq8TkXNtqoz0jvTzeLfIu8DkK1cUMdG4JP9BKYBDhmilukLOT5fVcfRl9A7F6eHF1pxgmBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "dGsD1Ag5gGrxf2z2bkpbMWFUtQthZl9qWVCAo59sMCaoxf8jlW5hzJVCbjNSlaNm0UHlEb39EmA1lHAl5kAhBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "WwutFLxP8ok3UyJ6PywPvqWgO1Pt4B0CnRbXaUermVxiGFVu4eaWszEojeApNgOuZnsrHEyCAbOcED1VKp2zBA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:09:14.160465735Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "AE30910B48F71954CA1D1044F700C8E8FF26210795CC20031AC0B46EE4C2BBE5", + "next_validators_hash": "02158955D6D6E3E29CE8E67487829E8019FEB601861A8B621D6AE3F8A709C44D", + "consensus_hash": "AE30910B48F71954CA1D1044F700C8E8FF26210795CC20031AC0B46EE4C2BBE5", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "02E6EA172FB23CD348DBD1EF21454EAFF946FD4D4672E5B1DA1C8085CF977315", + "part_set_header": { + "total": 1, + "hash": "02E6EA172FB23CD348DBD1EF21454EAFF946FD4D4672E5B1DA1C8085CF977315" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "Tb1SQX15q1fMVoSfMVgTqTWOt/ioZPQT+7zSdPszz0vn5DBXKim1+uVPbw1/teUxLyu5fx25eiBVf5kv+mxJAg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "Ey8pj7LYUN5DAWp6K2/w5laYidCxheaPwWJXVCo2PxDJSeY2UrhD0Wmv+eswtKyXDJHYby/76G5mTd0ojzT5AA==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "Xh0hxFMX+doCdZdKoz32JjGDph9RPxJkHIhSbIEcu1oU3kwJj2CcMvN9peUu6KhY3hFLEVWO8e/6tVQRGQcUDQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:17Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:05Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "02158955D6D6E3E29CE8E67487829E8019FEB601861A8B621D6AE3F8A709C44D", + "next_validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "consensus_hash": "02158955D6D6E3E29CE8E67487829E8019FEB601861A8B621D6AE3F8A709C44D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "EAC805939208F7851F6517652FBFF87D9CBD455A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "EE97DFEA89132735C2B1941E494F343696879F1DD63671983A4EC3814FCFBB54", + "part_set_header": { + "total": 1, + "hash": "EE97DFEA89132735C2B1941E494F343696879F1DD63671983A4EC3814FCFBB54" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 5, + "proposer": null + }, + "votes": [], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanTwoThirdsSign.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanTwoThirdsSign.tla new file mode 100644 index 000000000..da01ffa4e --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestLessThanTwoThirdsSign.tla @@ -0,0 +1,463 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n3", "n4" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n4", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n10"}, + VS |-> { "n10", "n4", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n5", "n7", "n8", "n9" }, + time |-> 4] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 4, + lastCommit |-> { "n10", "n7", "n9" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1397 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1397 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n3", "n4" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n4", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n10"}, + VS |-> { "n10", "n4", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n5", "n7", "n8", "n9" }, + time |-> 4] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 4, + lastCommit |-> { "n10", "n7", "n9" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n10", "n4", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n10", "n4", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n5", "n7", "n8", "n9" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n4", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n10", "n4", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n5", "n7", "n8", "n9" }, + time |-> 4]], + now |-> 1397, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n10", "n4", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n10", "n4", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n5", "n7", "n8", "n9" }, + time |-> 4]] +/\ prevNow = 1397 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State4 *) + +State4 == +/\ Faulty = { "n3", "n4" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n4", "n7", "n9" }, + VS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n10"}, + VS |-> { "n10", "n4", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n5", "n7", "n8", "n9" }, + time |-> 4] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 4, + lastCommit |-> { "n10", "n7", "n9" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n10", "n4", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n10", "n4", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n5", "n7", "n8", "n9" }, + time |-> 4]] + @@ 4 + :> [Commits |-> {}, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 4, + lastCommit |-> { "n10", "n7", "n9" }, + time |-> 5]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n4", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n10", "n4", "n7", "n9" }, + height |-> 3, + lastCommit |-> { "n3", "n4", "n5", "n7", "n8", "n9" }, + time |-> 4]], + now |-> 1397, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {}, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 4, + lastCommit |-> { "n10", "n7", "n9" }, + time |-> 5]], + now |-> 1400, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateFailed" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 4, + lastCommit |-> { "n10", "n7", "n9" }, + time |-> 5]] +/\ prevNow = 1400 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["verified"]["header"]["time"] + 1400 > history[s$2]["now"] + /\ BMC!Skolem((\E commits$2 \in SUBSET ({ "n1", + "n2", + "n3", + "n4", + "n5", + "n6", + "n7", + "n8", + "n9", + "n10" }): + BMC!Skolem((\E t_3a$1 \in SUBSET ({ "n1", + "n2", + "n3", + "n4", + "n5", + "n6", + "n7", + "n8", + "n9", + "n10" }): + BMC!Skolem((\E t_38$1 \in SUBSET ({ "n1", + "n2", + "n3", + "n4", + "n5", + "n6", + "n7", + "n8", + "n9", + "n10" }): + BMC!Skolem((\E t_37$1 \in SUBSET ({ "n1", + "n2", + "n3", + "n4", + "n5", + "n6", + "n7", + "n8", + "n9", + "n10" }): + BMC!Skolem((\E t_36$1 \in SUBSET ({ "n1", + "n2", + "n3", + "n4", + "n5", + "n6", + "n7", + "n8", + "n9", + "n10" }): + BMC!Skolem((\E t_35$1 \in Int: + BMC!Skolem((\E t_34$1 \in 1 .. 4: + LET t_3o == + [height |-> t_34$1, + time |-> t_35$1, + lastCommit |-> t_36$1, + VS |-> t_37$1, + NextVS |-> t_38$1] + IN + LET t_3n == [header |-> t_3o, Commits |-> t_3a$1] IN + 3 * Cardinality(commits$2) + < 2 + * Cardinality(history[s$2]["current"]["header"][ + "VS" + ]) + /\ LET ref$5 == + blockchain[ + history[s$2]["current"]["header"]["height"] + ] + IN + LET lastCommit$6 == + IF history[s$2]["current"]["header"]["height"] < 4 + THEN blockchain[ + (history[s$2]["current"]["header"]["height"] + 1) + ][ + "lastCommit" + ] + ELSE blockchain[ + history[s$2]["current"]["header"]["height"] + ][ + "VS" + ] + IN + t_3n = [header |-> ref$5, Commits |-> lastCommit$6] + /\ history[s$2]["current"] + = [ (t_3n) EXCEPT ![<<"Commits">>] = commits$2 ])))))))))))))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:09:13 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsSign.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsSign.json new file mode 100644 index 000000000..b67415ba6 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsSign.json @@ -0,0 +1,1822 @@ +{ + "description": "MC10_3_faulty_TestMoreThanTwoThirdsSign.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "100EDDDCE7690A6E2D248C0EC947CF75869AEC7B7BE0EFEBAB0157C3A4C4B321", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "92F67C63F6A0EE23B839FD1AE8456368393056AA14D8A9483DFDCA768E9AB623", + "part_set_header": { + "total": 1, + "hash": "92F67C63F6A0EE23B839FD1AE8456368393056AA14D8A9483DFDCA768E9AB623" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "STJAamMD2/3gOYmMsTXsZlmdDk53aFizSyC71w0PuFQZYJGuvX+zP0asq8RNs4CcSiy8Di1b4xA04X+jhUlcAg==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gPki2gY+8OjjX4y9nRyXpUZlLipKWKpxItJzHGf+03FNbXlm69XphtA03LEIkSv9PnT6WSmo0IWX+mZMUePeCA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "E1xQo4Kxnrw72Orss/XxKwwXKA2pMZn+yRu9U8aOzKRkpev4S1Km+snFvqAvDl3vrM14Fwb6llyjmCKcs4PqAw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "OGrlMaTUmxUicEjf6M0GxOF1AdZ9MENUeNBLJm7VTv+Dzcga8DbHThxevX6Myd41VPRMO62UYV/0BpRdcPPRAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NI5QsjZZTmnGJyUbr+LaUEBWI/aAWFofFgctrHecan57rEGicuB21W0TONG3J7EHxGOoFAEnlzNSYSx6MphPDA==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "+m9DilYKplQOxL7NIM9JGoZy81MfYWrS6OGwaWT36jbMaJSdfETOdE/DJR6dJ3cxhQsGtb6Q3YmXDIDXRIzgCA==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5LiFl3Wc6dv2T1ObPJMLfRuBVwGwxqTEEAIuxKPyifHjuDvhgLNP7Vx0/byylsaE2dIV20QqCv+bUgA7z0rKBw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "b3XujabJWpgsa50Hf4HM9ecKm715YGRnwfBf4u6gxwQL9Z78IeXHVVSKYd7uYAcyGZMeomlPdQbC61hhrefiBg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8trtklN1fazWrEIOvJhwFK/P8fCKlSaEho509TtpPggHSV94kGZ2K2FhJEfvqXzG4RqHIZkAlEoWAj/zSK2QCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "MT/jLy0lrNRgroKoxWgHg5/BmuQemXtLx8dvSLgKW5Zxs7E7YsmzpwWnP3plotAYrE3lHpDiogtZZXw0s+SwCw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:09:34.160465737Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "0961115723C4FF5CCD09BF950FFECE0EB57B53DFDCA86DE5C9C4345C1CC737D2", + "next_validators_hash": "A42D273FEBAE4AA83D60CE80940F64669C85D45477FB07A962632C61B0B6FABC", + "consensus_hash": "0961115723C4FF5CCD09BF950FFECE0EB57B53DFDCA86DE5C9C4345C1CC737D2", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "1BBED4213ED1489E0D1BD23E1DB5F6CCFB6A90B8B6C4D5D14A6759A6963CB8E4", + "part_set_header": { + "total": 1, + "hash": "1BBED4213ED1489E0D1BD23E1DB5F6CCFB6A90B8B6C4D5D14A6759A6963CB8E4" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "HODjRNN8bhtDee6aSRkOH//MWCWjuZjbioweIlNhsTfWLyyToMCB0zkDEYGPtMd2afOuUfwuw+m+hq+WqrpoBw==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "WPJZpF+OUvtJl5vQ2sE9S3t1L22mjrdxns6BFZNUxlVk+KrqOUIIouAjy0sHl2sQbUI6YoaDYbdb4nnh47hYAA==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "ruNSBFTR5V/ZLpi6U0nVFUQg21bDzuG3RTC6w3CQfBAatkhbht/d3mvxce5eSQS2yOAlXMZ73siEfRRjwEzSDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "+bkCw8xNDiXlB9hRhjTs7SA+MwHbAGgT4QdQxkpo3JPDCVtpUWYoJUpAvSmHjUT6+gYbwnxM3MDZk+Xas/EFAA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "3MFWHOqd3csZXSoQP5uHcLDhv5JiFmhUJxMJhFHuztp1Cgju9yxTwokyGqxfznU7VQagqbkfIS3IbbQlcGtiCg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "100EDDDCE7690A6E2D248C0EC947CF75869AEC7B7BE0EFEBAB0157C3A4C4B321", + "next_validators_hash": "1EAD553045A5ADDE691B15862413689474B58BB4DF26A40E06C474BDC62D2C7F", + "consensus_hash": "100EDDDCE7690A6E2D248C0EC947CF75869AEC7B7BE0EFEBAB0157C3A4C4B321", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "ABDA109C3B626E3C6E34003A100FD03958155396AA92F555B41F9228A274EDE2", + "part_set_header": { + "total": 1, + "hash": "ABDA109C3B626E3C6E34003A100FD03958155396AA92F555B41F9228A274EDE2" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "YqgVPtGanbu0Ca0cQyoTcfXQ/fmpmZQ7hlfEYZgdV1PBpz2kiEDM86rMSE7KI8K5VFxB+YAfwwayy9b2X5P8AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "jHTXrqrCxCXlEOXLBlsOxuVoXM9xPNRHFy8NvlUPHo/I2tJQgkcsWBQTlDqzwcZWVll1/HCGT+l+yZRpixAbAg==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "mqb99pMr7MLIgIcDOcnoxI2CYaI1258DMNzrZQP53qd7UGxnXeTQTM6XgUBJSu2Suu5bZ5PjDBqG0+MZghlmAg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "if3jiRzS2ggeIO6hmJN3+wx9EMffCuKDH/A6awqq1VrmjrRRYXja6+YHxf3Ebyefs+LSj/XO3ecV6uDpjfvtCw==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "g/cyofX7ryH33GziHw9M/pGODAH7e7zgZU5cy/mp5N5JZKvb6xXgK5Vvn+A3MqONOtsrN+n/GaZTbRKNSvxHAg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsSign.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsSign.tla new file mode 100644 index 000000000..7ce4e60ba --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsSign.tla @@ -0,0 +1,376 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n10", "n4", "n7", "n8", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n7" }, + VS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n6" }, + VS |-> { "n2", "n3", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n6" }, + height |-> 4, + lastCommit |-> { "n3", "n5", "n6", "n7" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n10", "n4", "n7", "n8", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n7" }, + VS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n6" }, + VS |-> { "n2", "n3", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n6" }, + height |-> 4, + lastCommit |-> { "n3", "n5", "n6", "n7" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n10", "n4", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n4", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n5", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n4", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n4", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n5", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 4]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n10", "n4", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n4", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n5", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 4]] +/\ prevNow = 1400 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n10", "n4", "n7", "n8", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n7" }, + VS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n6" }, + VS |-> { "n2", "n3", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n6" }, + height |-> 4, + lastCommit |-> { "n3", "n5", "n6", "n7" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n10", "n2", "n5", "n6" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n7" }, + VS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n9" }, + time |-> 2]] + @@ 4 + :> [Commits |-> { "n10", "n4", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n4", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n5", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n4", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n4", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n5", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 4]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n10", "n2", "n5", "n6" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n7" }, + VS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n5", "n6" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n7" }, + VS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n5", "n6" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n7" }, + VS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s$2 \in DOMAIN history: + 3 * Cardinality(history[s$2]["current"]["Commits"]) + >= 2 * Cardinality(history[s$2]["current"]["header"]["VS"]))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:09:33 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsValsetChanges.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsValsetChanges.json new file mode 100644 index 000000000..a6bd7a13b --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsValsetChanges.json @@ -0,0 +1,1727 @@ +{ + "description": "MC10_3_faulty_TestMoreThanTwoThirdsValsetChanges.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "B3EAC6B09C4FC9525C05AC9F249FE1F66301A4F8590A712545ECDAF37B5F6BE6", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "7F0D31B38EEE2CB1FCAC7BCD9B71C5E97C25A7EFB7F106D2704A755A760507A2", + "part_set_header": { + "total": 1, + "hash": "7F0D31B38EEE2CB1FCAC7BCD9B71C5E97C25A7EFB7F106D2704A755A760507A2" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "XYtqHnoGU/zptnQvgpKjtJF3BLiqbkY6gRaCJ2oNPtRGf64RjXPBlBMdl/HbiP9ow3E55MHG667YwK1AzbiBAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "UCaCC5Mkzi1/p+YS6g4SSdBQfoqd2q9QsdhSw/vutNp2pKi1+nMlV3i1jyNX0rxmdouk7YrVnAIjNBoMBQwRCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "d4ND4MdYJ4BP3bgVAJuqZGuKrrL82jH5FbYLnSM04GgmvTG0F8OygIvJxoQi0h0rczT7OEXh+1xe5YQD0dHdDw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "uGKX8UfsucqzQKbT48sPDFsMQjTZLIHqA4iGNS1ukQjyt+kh2hSlGdOlHxpZGXgQ0mNGAbjLvjViEUC1wZd6DQ==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "JGqx5DzYKoQZSSqbja3XV7i8tTqJmITfbeeT9MZWS5W0ukdYYpl2IR6bwD/3UTPlmLVNezVhyB17HneIydD4Cg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "RvmK/kgekL778xDjrPZJxVkuVtiU/0Vallw5SCqmB1sRUEwjl6bq/Jy5BGJF1v61Jx6sO19z4uUB9OheAxzWAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "MNtfNXGHpnMtIWk8+rAORz152jPRPBdTxl1egpSxWwLLUZO1W8gJ3h6HgmjuxiXZXykeOwdQcokUljyBrxL1BQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "vptMgBN38RxpuS+j5UIXPls690uZiihjSlP34QNwfgzmbsCf8DT6Ted6GEMfC99nAVBCCm2gRVpDFTMnlaVUAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "0quUzaCNRDQrBuv5b5MPVTHINiTMEozLBTT/r6Y0tX6PbbpSh58v1HYOTaYFpvY/pNwjHjyR+ky2oKq8MfQwAw==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "wJGr6MC/9dC3ptzMNV9pUkqyAwp+5WnVeFw9AN8LZkZ5fE0kA1EcDH6VI8KXQTjO/5y4XAC5PJ5EJrWRz4LlDQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:07:53.160465727Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "D1701F9A8CFC0E907B90263A1BB08873ED7D2879F08BDF2289C814BD502A9525", + "next_validators_hash": "ED1E1A35781D6CE27FCE9A78D38CE1CC3687D145130E3DA8371DC88E7C388B0F", + "consensus_hash": "D1701F9A8CFC0E907B90263A1BB08873ED7D2879F08BDF2289C814BD502A9525", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "5916F59015DBE86BDB93A7D43A1D33941563DEB4435D8EC73F921965AA6D76DF", + "part_set_header": { + "total": 1, + "hash": "5916F59015DBE86BDB93A7D43A1D33941563DEB4435D8EC73F921965AA6D76DF" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "jqHAQ+QPEtaeCT/u4B4PNa8aqN10RJLJwnZmKlePBhubIrb4zVsFWeT957yNgMEa6UnVrVv3zOFb5paDoHqtDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "4ncLmUC1mzR36qxsECJBBiqrHAXX0u9AOs1Up97ofxYmVOWEMNwtOyQ3r+Q52nmJpQTjQcDlaXGjrDQvvf2nDg==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "C7rdThcQVVJg/6uCZ+q/Ml4dXd6wsydQiPyIxsNXpF02zV6+5r/8M24hMiD6uO3VVlwthKL7OmqETqofAIXACw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "7hX/OxF1mcoIsld3elZBVw/MesZZ+9DiIjJEK5hVejlTTavNKv6JnB/leTZlQS/PbgGvAcJst2CZe02fXHs3Dw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:19Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "B3EAC6B09C4FC9525C05AC9F249FE1F66301A4F8590A712545ECDAF37B5F6BE6", + "next_validators_hash": "D1701F9A8CFC0E907B90263A1BB08873ED7D2879F08BDF2289C814BD502A9525", + "consensus_hash": "B3EAC6B09C4FC9525C05AC9F249FE1F66301A4F8590A712545ECDAF37B5F6BE6", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "9CB26D06B59487370619BCB079597850D187854244C77A976EA75EF4D865DC5A", + "part_set_header": { + "total": 1, + "hash": "9CB26D06B59487370619BCB079597850D187854244C77A976EA75EF4D865DC5A" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "dNnViTF8RarM1I83HKbcEmsPfZ37GAxxTOjdJ4BFXZXyYbarUq9W0vbd+rC/Mms8K+QkA9dbWlhjiHAI8DhEDg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "ljK6nCAAJGvEojBN091T9ebXK/WO851yg25Nh50NgTnM9XywIwawOx2IB87i0Nz4df/MNTt6Hg2fZBN23jb/Cw==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "T4IPCXxPwvyuc04UXLpdQRzIcQiC6rr8SnTCTrP1dPElmPYhbqRoBP1uw2MzyY90wnHWGNvGBmUlWfryvNA/Cg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "nk2BIgjCWkwF935dEarD3EnCWMkY2/+Gx1VHesKJvG7j/YcFESVZB+CZ1ReVM4x18S953xI1ATv3XSmDpedzCg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "8auuoUuTYjfkGAymIEJNcI22AU40kOe66pZpqT6vxT3zSR1A/Flare591aYtF5F0Xgr49u1W1CDIIp0htxHiCA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsValsetChanges.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsValsetChanges.tla new file mode 100644 index 000000000..8e4f6f871 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestMoreThanTwoThirdsValsetChanges.tla @@ -0,0 +1,388 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n7", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n2", "n3", "n6", "n7" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n5", "n7", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n10", "n3", "n6", "n7" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1399 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1399 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n7", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n2", "n3", "n6", "n7" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n5", "n7", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n10", "n3", "n6", "n7" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n10", "n2", "n6", "n7" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n5", "n7", "n9" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n2", "n6", "n7" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n5", "n7", "n9" }, + time |-> 3]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n10", "n2", "n6", "n7" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n5", "n7", "n9" }, + time |-> 3]] +/\ prevNow = 1399 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n7", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n2", "n3", "n6", "n7" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n5", "n7", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n10", "n3", "n6", "n7" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n3", "n5", "n7", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n6", "n7" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n10", "n2", "n6", "n7" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n5", "n7", "n9" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n2", "n6", "n7" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + VS |-> { "n10", "n2", "n3", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n1", "n3", "n5", "n7", "n9" }, + time |-> 3]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n3", "n5", "n7", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n6", "n7" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n3", "n5", "n7", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n6", "n7" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n3", "n5", "n7", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n3", "n6", "n7" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n7", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 4)) + /\ 3 + * Cardinality({ + t_2s$1 \in history[s2$2]["current"]["header"]["VS"]: + ~(t_2s$1 \in history[s1$2]["current"]["header"]["VS"]) + }) + > 2 * Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:07:52 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestNonMonotonicHeight.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestNonMonotonicHeight.json new file mode 100644 index 000000000..b2330158d --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestNonMonotonicHeight.json @@ -0,0 +1,566 @@ +{ + "description": "MC10_3_faulty_TestNonMonotonicHeight.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "1640E0CCDE91ADE4BD1F4CCDAC7AEC2CA60D1C9684BBAB5C512549831146A78E", + "part_set_header": { + "total": 1, + "hash": "1640E0CCDE91ADE4BD1F4CCDAC7AEC2CA60D1C9684BBAB5C512549831146A78E" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "YKtyUeLxeJ9jOiLOPzAraYG1IfwGuHy5DOgXZ4ieKfEstDdtNx4+9dCtR6+pEJtLdd/5YJOGELhTuKgu6/vQAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Md2j0QtKDHsecgb4kwJgkt9qpkM/SmfKsjqvXf4arND4VORr8dML+YlF6sY3kG6rEW19nB8noQNFPWWwXCOqBw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gFNbs1pZ5Jmfa1cC6AoURUZnEx2ZVacKgd2rK0J0yLoXOs5hXXodnxueLKjuJt5PKBJKvma9I1Imd7V7/PrmDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZiNt9GaMg5lOyH1ykYv+ad6Lrfr+lXo+FuDABYzb6EF6sYHripkonGW7EKg6S8Ro6V2HVPZFS5sIazPAFzhxAA==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FUN1hR4HqpRxXwXdD3zjbNEC3mSVTvegVx4OlFuGvcYYQtahQKADOsaEpzOvr9ETvjiT1o7D1dtq+y9qVSN1Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "B7vsLjHulMTqlUI3+fuzu77PIuUezk7jJ0VaZKiZ4ddaSEr8ZZNh9ey3SZTDFZdWDLoraqQP0tycjpIOY2RxAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "7WGOnPC2hX0YV16eUKqGVtuxhxcSPEJbQGgwumMKrzS3vAcHrE9wgFLJoVFgmMxSwMON0Rwe8aPhNQs57wNSCg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FBgGEUUKNYNWTwszM2DLt1DpKyF6M8yT+HbvfmP1JKR0XeBMpeQQY5Wlskbx5GR7OQVgnrBBiyHrp2rHWf13AA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8BozP+NDEoSHeF+f81FHc/wOTA5UX6lZQqukt06npNpKuNNsw06PUeqTz8jKnT0/DLC+s7Zkw3dqDM/6LDXuDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "OerI5gID8IWtmtnBMbgc1OivhxEt/fb3Lq3GsBrZPyHbtt1yj3gxNlmjW45X6CLqbHp7kCWLZrWdFUDWEVqNCw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:02:38.160465695Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "940548442AEAFAF02C3C223413AF3F8EB53291E3C99830BB3A0E58096414FC6C", + "next_validators_hash": "02158955D6D6E3E29CE8E67487829E8019FEB601861A8B621D6AE3F8A709C44D", + "consensus_hash": "940548442AEAFAF02C3C223413AF3F8EB53291E3C99830BB3A0E58096414FC6C", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "67C82395102200FB215E8A3C5A15EE5633EFD123B8DC7076C43F5021844E0EAF", + "part_set_header": { + "total": 1, + "hash": "67C82395102200FB215E8A3C5A15EE5633EFD123B8DC7076C43F5021844E0EAF" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "S6ro6ImM60t+rZ0pyxtvUvAqwbZlYvT7JV9OCVujFPCJhHyaABYK6L6pZ3LJJpPzeTzDV+1Kdr1TkZI4MN4CAA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "zrQ3nZaJkII0nJ4S1NOIMWjEa51kF4c89UEsby6RGBth3uS4MVo5X8zIPLJ/LEDvCGFYfPlMeSpWbhpYY1MXBQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "l8JvWSrSLZ9rd+GXBCiC0qZ0FYtgDkBwZgdVTB4hbjNEt0pGh5Vc3sFVJsUpBTe78gIlixJ60Sq3a3GTuV6RCA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 1, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 1, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 1, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 1, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 1, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestNonMonotonicHeight.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestNonMonotonicHeight.tla new file mode 100644 index 000000000..b4ef0be9e --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestNonMonotonicHeight.tla @@ -0,0 +1,236 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n2", "n5", "n7" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n3", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n2", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = { "n2", "n5", "n7" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n2", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n10", "n3", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n2", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n2", "n5", "n7" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n2", "n3", "n5", "n7" }, + height |-> 1, + lastCommit |-> { "n1", "n3", "n4", "n7", "n8" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n5", "n7" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n2", "n3", "n5", "n7" }, + height |-> 1, + lastCommit |-> { "n1", "n3", "n4", "n7", "n8" }, + time |-> 4]], + now |-> 1400, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateFailed" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n2", "n5", "n7" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n2", "n3", "n5", "n7" }, + height |-> 1, + lastCommit |-> { "n1", "n3", "n4", "n7", "n8" }, + time |-> 4]] +/\ prevNow = 1400 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["current"]["header"]["height"] + <= history[s$2]["verified"]["header"]["height"] + /\ ~(history[s$2]["current"]["header"] + = history[s$2]["verified"]["header"]) + /\ history[s$2]["current"]["header"]["time"] + > history[s$2]["verified"]["header"]["time"] + /\ history[s$2]["current"]["header"]["time"] < history[s$2]["now"] + /\ history[s$2]["verified"]["header"]["time"] + 1400 + > history[s$2]["now"] + /\ ~(history[s$2]["current"]["Commits"] = {} <: {STRING}) + /\ history[s$2]["current"]["Commits"] + \subseteq history[s$2]["current"]["header"]["VS"])) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:02:37 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestOneThirdValsetChanges.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestOneThirdValsetChanges.json new file mode 100644 index 000000000..588e25c52 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestOneThirdValsetChanges.json @@ -0,0 +1,900 @@ +{ + "description": "MC10_3_faulty_TestOneThirdValsetChanges.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "02158955D6D6E3E29CE8E67487829E8019FEB601861A8B621D6AE3F8A709C44D", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "BAFA5821E2B5AEE05231E7559F26474389D4AB0ED1EB0638003378F7CC457F0B", + "part_set_header": { + "total": 1, + "hash": "BAFA5821E2B5AEE05231E7559F26474389D4AB0ED1EB0638003378F7CC457F0B" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "LZlABwW3ncMmz7w7JQt4hBVyx+QENeumlmZbykCGwbdyBpQBmegpM9vO0WC4M5wqpPi/86s386u3KAUk9ecbBA==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "AbPMa+gBxM7JhQHjl9ahYl6+oL7dtXSYor77Glg244oTXHxQjDqUV/953IVn3BevbMkiKbZRCTkjFB4Kn2N7Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "AU5TIMmP5orncg/p/+4z2l+HPh++wBHPeNv/uw3PPBF/gS1hgtoNhoKAu0IS40YMNv7oPcyKqQQUNwlHBIkXDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Ty4QXyujEcPau45m7imAO51UvSobAh6mZitRnS+6ULbi9xfD7ov9rd8R+36Qg5m0RxzbZn7wM9jI+98r2rjPAg==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "0j4pjjHw+2OUEfanwWkINNXFSqoobOgnsLY+kF1IwGfdPQF5aMHHNple6Yw5kZ/Pgems8rCeN6CagvSP9mIlAg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "J2JvciwkjtXLCA4Bu1dkJarYF5tiB+UEWoE1XswBLFdYmAresPGgVob0aTTZN+KMpPci+XzC9t8j6u9uOSvMCw==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "zQkCA01CqIN3MkprbFdTu/OCfiqC8lryacY9isYETBx6RXAvS6M6YwGksseFrM87IsRMaqqHhSzyC/cKXFz2CQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "7LItXW6xvldY8qMQFbC1hS70jkTn5KKNE241SJ3BRDfZmJcqZ5shVt9KBufrEm8ilGeBtt+pSPr9Eiqdm00UCA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "27idRzBumD4FyB4k+7ck2pxmdgBAw7T/JJYMz9ajKTuuFhLyt60ANwTWBGrJdFVVJA21xKjBSiVyoGmLjvFVAg==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "nDxFgOpBSwnBTEvptS4bAvXAuluvrhiqB4eZgb6RXc/YlXzQKJXpDHKy8kdJhTP5WHfVzVunMkCI1JZKE25jCw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:08:14.160465729Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "82459DD36E596512E4ADA8C46793527BD865451C009F2323080C74778BA7F800", + "next_validators_hash": "7589381B45A049BAC0EFAB6F607957A4336C074046A5D7F9EF0A0F125025977D", + "consensus_hash": "82459DD36E596512E4ADA8C46793527BD865451C009F2323080C74778BA7F800", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "0D4FFECE02C57BADF0F0ED6F63A90A84F358C3D277129FB53123AD9428907D99", + "part_set_header": { + "total": 1, + "hash": "0D4FFECE02C57BADF0F0ED6F63A90A84F358C3D277129FB53123AD9428907D99" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "d7ndXeWxY8GZtyjhFIWSj8utLuAfVnJAiosspnf/eJmI9pp4xkcHZJAs/56BOhEbPVtY6c/ko7ZjNUdlh/rYDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "gFwprvaKpalMpEzcDWPZ6t8atfQwNDuVSsaF7d2IemVNLk9lmLPRtOL8q8xEJHZEV9a9Po7SFQj5MsEa5sbhDA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "QaD0UHv3Me2MN+l4or6cdpkkoocAquzKn0YXKMLeuIcHpeUMqfRWEm129wYRv/zn12cvk9+7TP+xQ6Xpa4l0Dw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:04Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "02158955D6D6E3E29CE8E67487829E8019FEB601861A8B621D6AE3F8A709C44D", + "next_validators_hash": "82459DD36E596512E4ADA8C46793527BD865451C009F2323080C74778BA7F800", + "consensus_hash": "02158955D6D6E3E29CE8E67487829E8019FEB601861A8B621D6AE3F8A709C44D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "EAC805939208F7851F6517652FBFF87D9CBD455A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "F7E5D893AE9CD839E9D8465ADC883ED5F390C774FABE605BB1A6640B2F57CA71", + "part_set_header": { + "total": 1, + "hash": "F7E5D893AE9CD839E9D8465ADC883ED5F390C774FABE605BB1A6640B2F57CA71" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "wbVMkfzO+zw/lvBBqkCapHS+M3prJOtBjYZetJF/kD67qN1xndNrGu9zvnS2kpoFoK9qo3QWb+tfziOS8BZ4CA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:04Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestOneThirdValsetChanges.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestOneThirdValsetChanges.tla new file mode 100644 index 000000000..bfb6e6f42 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestOneThirdValsetChanges.tla @@ -0,0 +1,388 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {"n6"} +/\ blockchain = 1 + :> [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n5", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n10"}, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 4, + lastCommit |-> { "n5", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 4 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 4 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {"n6"} +/\ blockchain = 1 + :> [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n5", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n10"}, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 4, + lastCommit |-> { "n5", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n5", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n10"}, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n5", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n10"}, + time |-> 3]], + now |-> 4, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 4 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n5", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n10"}, + time |-> 3]] +/\ prevNow = 4 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = {"n6"} +/\ blockchain = 1 + :> [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n5", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n10"}, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + height |-> 4, + lastCommit |-> { "n5", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n10"}, + header |-> + [NextVS |-> { "n5", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n7", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n5", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n10"}, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n5", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n3", "n4", "n5", "n6", "n7", "n9" }, + VS |-> { "n5", "n8", "n9" }, + height |-> 3, + lastCommit |-> {"n10"}, + time |-> 3]], + now |-> 4, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n10"}, + header |-> + [NextVS |-> { "n5", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n7", "n8", "n9" }, + time |-> 2]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> {"n10"}, + header |-> + [NextVS |-> { "n5", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n7", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 4 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> {"n10"}, + header |-> + [NextVS |-> { "n5", "n8", "n9" }, + VS |-> {"n10"}, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n5", "n7", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 4 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n10"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 3)) + /\ 3 + * Cardinality({ + t_2s$1 \in history[s2$2]["current"]["header"]["VS"]: + ~(t_2s$1 \in history[s1$2]["current"]["header"]["VS"]) + }) + = Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:08:13 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestSuccess.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestSuccess.json new file mode 100644 index 000000000..ae111b962 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestSuccess.json @@ -0,0 +1,2689 @@ +{ + "description": "MC10_3_faulty_TestSuccess.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "39DBA2010F7E16CC79EBAD61892C1B479DC95B9C904814E0A7C67756765EADA7", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "712FD8A89D7A21D0CBE7966A275E767141CC35A326EC3BC9852DCCE1F1F8EDFE", + "part_set_header": { + "total": 1, + "hash": "712FD8A89D7A21D0CBE7966A275E767141CC35A326EC3BC9852DCCE1F1F8EDFE" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "n5mRs/UPuYNSEAT7cTk8XrkFGGhCuAtHOc4kvDIc1s1DvQ8SQAs+2WAwuZI1PyjRzrgfAld32hBm8kjOCQfNAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "0uf9oJtMz08NskCXo048dBYzxL+p38oIvULJUeBdCfGmWAepjyaU2qarEd0CuOT7xqFEVande8BuM2OQxhdACA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "oTeQYexbNmr8YY1O5vTGNXuIKl/867PJSWLJZ9GjEDCs/UuMWn4PDsj0JF/JhcjKckhId5mKJeTGDoDsElJcAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5cvQVUhLNtbSoMWo1wF38LmrMmVYwLOJ+pguQzsOxJ+eReY5ti/M51PutHjOqF/0YjdBFaDwMs9uwU6GtBEyDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "F6qwt4uyzwliks4cQR/62otfsevgkuETQGPOhQ1LexXhqJR4vQxAxW+zq305do/O95dzZqj/iNMLOG1ichqVCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "bPI/PslwaGzhy+jJ+nxY4QnbumCmK7VfMLLUi2OzQ4fKS7dpewGTlsfbTe5720QsfVBMB3ehMFhF5I09sQAZAg==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ktBoeUHCMLN3GPdrBMjFmPcjoNBMTa78hmsCjSkfwG5EyKkZr9aXLULj7zFib55TCa0PFRdeR/5538zc/1YaBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "MSZL09hTJTGr1nMK+Nt6VMnSdyjKUKmF233P3r0qgXvlQLS+hvx3QAaPl4/jexO4oOSl6tnn0F2bb+j6cHZmDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "aHkW8uYv0uqWHkQmQMvM11LYmA73DuGZGJ/Fu9Kvvw2oGCYt7+I+TZcflaOPtQy2zX4JNbMvaoOtlZmxINcODA==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "F5y9JalIhP14QCxDUS2+M7ich2CnXXoSM4Rc5zzPwSdgXNkp1kZQSTjPQL+RZjCAFmey93IQ9dODwzFIcWKRDg==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:01:58.160465691Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:23:19Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "89F200C0E779C8868E95D04BEFC406A6204B1CFBC437FE80787B4524CE5E672E", + "next_validators_hash": "84C4C92AB4E77AFAFAC5C664E63E36F58F7AE6B25A3854A50ADBF1EE9AB452EC", + "consensus_hash": "89F200C0E779C8868E95D04BEFC406A6204B1CFBC437FE80787B4524CE5E672E", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "B533AEADFFBB06E0F26E74E5FD84A76DA87071A9E1C09240698CD091571C7A2A", + "part_set_header": { + "total": 1, + "hash": "B533AEADFFBB06E0F26E74E5FD84A76DA87071A9E1C09240698CD091571C7A2A" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:23:19Z", + "signature": "iOJX4L3ItSsLVtBQ/gmfeXbDeSI8NmQFSZE2q8p52VngPbzvXCgP/9btFMAk3HEAjmVaDIkOXYjoMO1vHI+qAQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:23:19Z", + "signature": "oG4yqXJ1z6mWj+HiQJkNiHZ66krg/ZjvsJu9rfRCYx74ESX442OZkcn90zpOse0Ihq5PYaMvB6ZZpIMMGu9fDA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:23:19Z", + "signature": "5mhpLwO00+lPJo1L0j6OzUAg1hBNez76avUXTjEGWClHTW4hRFiGVk+SBZNrWCV4JwwBYCv9q8DOuXSQx97IAA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:23:19Z", + "signature": "um5LbXW4MiiAydjLu3CuaeIq42rIK7NodxGcrUTctYaSvqYHF9Rq8mwHM56byJhPzuLChLucQGe3RG6jPgBLBg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:23:18Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "39DBA2010F7E16CC79EBAD61892C1B479DC95B9C904814E0A7C67756765EADA7", + "next_validators_hash": "89F200C0E779C8868E95D04BEFC406A6204B1CFBC437FE80787B4524CE5E672E", + "consensus_hash": "39DBA2010F7E16CC79EBAD61892C1B479DC95B9C904814E0A7C67756765EADA7", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "DC4F1E449C7A04184BCE9A674482E8AAEA0EF3E2141F3C4718ED0154F7400F0C", + "part_set_header": { + "total": 1, + "hash": "DC4F1E449C7A04184BCE9A674482E8AAEA0EF3E2141F3C4718ED0154F7400F0C" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:23:18Z", + "signature": "G+chv1jynSR9jAVszhTChKiGaq5RUwX4lEFFoysCpVdVkqf25hI5tovcD+5zsv7WeOTdygnT1cIRcIgKvqa9Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:23:18Z", + "signature": "UuEak8owp4IGEYEVe9y2TrIjwr6Ro+xSctBYEsjCyvhtEpc8VhzrR3toyDpiFxg4O1kGeUy0uFj5Md2E7lpvAA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:23:18Z", + "signature": "EeX6HXWJnNe/VX5WZpzSMVhOXPs7MXOPGYWAldDqT4COqYWO0P1nrz97PWtjgU7d9iAkJQtxWp5Ubzk7UJucCw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:23:18Z", + "signature": "QmACJTpHVReLSk6DJXB8K+/16QihMyiIbcWs4DSjH5T8bmFyBOml+XgYwfyE188mz8l1NpvzqY1zBuvmckjyDw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:23:18Z", + "signature": "Sm2MaQrJIx49IyUa5Fe4q9+WhVWdH08os5wTbKG5s9criwqpoT3nJ0VKwCk+QmABoo9P4yBXasnOXE15o7GTDw==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:23:18Z", + "signature": "nE4zstX/h/3sZYjAZ73a8VdpWNnqVjP5bnkhGWS6NFxw1AAGM9hZnEh/L9mIrA2phGrjb3x2pezO0ZhBr4+XAA==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:23:18Z", + "signature": "aUFQl241NLi/yN9qmkunFeCo6T6i1dJENX9kNW958fNRBvl4sav/TpGurKJJnmR+H04OgNdrEFYkIw5XbIEjCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:23:18Z", + "signature": "G4/o8wgwg7xZ0xfddxonT77CEDBZrin01KzIe49wHnaAOexGlBGeWJxCC3n5/cAvFFyLzy0Ze9XEA1gXnAZXBg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 1398, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:23:19Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "89F200C0E779C8868E95D04BEFC406A6204B1CFBC437FE80787B4524CE5E672E", + "next_validators_hash": "84C4C92AB4E77AFAFAC5C664E63E36F58F7AE6B25A3854A50ADBF1EE9AB452EC", + "consensus_hash": "89F200C0E779C8868E95D04BEFC406A6204B1CFBC437FE80787B4524CE5E672E", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "B533AEADFFBB06E0F26E74E5FD84A76DA87071A9E1C09240698CD091571C7A2A", + "part_set_header": { + "total": 1, + "hash": "B533AEADFFBB06E0F26E74E5FD84A76DA87071A9E1C09240698CD091571C7A2A" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:23:19Z", + "signature": "iOJX4L3ItSsLVtBQ/gmfeXbDeSI8NmQFSZE2q8p52VngPbzvXCgP/9btFMAk3HEAjmVaDIkOXYjoMO1vHI+qAQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:23:19Z", + "signature": "oG4yqXJ1z6mWj+HiQJkNiHZ66krg/ZjvsJu9rfRCYx74ESX442OZkcn90zpOse0Ihq5PYaMvB6ZZpIMMGu9fDA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:23:19Z", + "signature": "5mhpLwO00+lPJo1L0j6OzUAg1hBNez76avUXTjEGWClHTW4hRFiGVk+SBZNrWCV4JwwBYCv9q8DOuXSQx97IAA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:23:19Z", + "signature": "um5LbXW4MiiAydjLu3CuaeIq42rIK7NodxGcrUTctYaSvqYHF9Rq8mwHM56byJhPzuLChLucQGe3RG6jPgBLBg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1399, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestSuccess.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestSuccess.tla new file mode 100644 index 000000000..33f152abd --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestSuccess.tla @@ -0,0 +1,553 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n10", "n5", "n7" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n3", "n4", "n9" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n5", "n8" }, + time |-> 1400] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n10", "n5", "n7" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n3", "n4", "n9" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n5", "n8" }, + time |-> 1400] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]] +/\ prevNow = 1400 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 0 to State4 *) + +State4 == +/\ Faulty = { "n10", "n5", "n7" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n3", "n4", "n9" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n5", "n8" }, + time |-> 1400] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398]] + @@ 3 + :> [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 0 to State5 *) + +State5 == +/\ Faulty = { "n10", "n5", "n7" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n3", "n4", "n9" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n5", "n8" }, + time |-> 1400] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398]] + @@ 3 + :> [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398]]] +/\ latestVerified = [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> { "n2", "n3", "n5", "n8" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n3", "n6", "n7", "n8", "n9" }, + time |-> 1399]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n2", "n3", "n5", "n6", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 1398]] +/\ state = "finishedSuccess" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + state = "finishedSuccess" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 3 + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:01:57 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestTwoThirdsValsetChanges.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestTwoThirdsValsetChanges.json new file mode 100644 index 000000000..62b7c1f6c --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestTwoThirdsValsetChanges.json @@ -0,0 +1,1571 @@ +{ + "description": "MC10_3_faulty_TestTwoThirdsValsetChanges.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "0BB72D78A148C98AA84A68885B8CBAB30659489F4D04F662847BED42BE3931CC", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "4F92E89CD2096266C15B9A30F2A86671157295F98CCAB793181BD1BBA34DFFEC", + "part_set_header": { + "total": 1, + "hash": "4F92E89CD2096266C15B9A30F2A86671157295F98CCAB793181BD1BBA34DFFEC" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TQ9XNZrH+nou0SNZVyHqQ59q5FzRgP905S7/1FgJDC1CoqfbPcMxceu+KsN3fak28TOcizfdsPjuTXD8awjyCA==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "xYzAJMTuYwR1td1Q5MzPMWIm9GEvDsV5qbpIB8FVVAq2HwTP2DzH6RBgRZILJgFNCwpynd9nzkZD0TvvkutBCg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "1rzVCkyNfGrjyisvtEw7Is5wclX/dvbi70YkJm91/nUsZytecX2OPSmpio8395sTBPyv6cAtH0C0OaZspinuBg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ayWrB1NT2nfSLUDlrgmofZ7RRRPMVbL61wsvMXmCUTCWtXPEwxpNCjg/PucAMdLVIzf06zwBuJul6E8/O8q6DA==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "lhW8R/2BrzN6wLyJEdjU3GrajwVJv4oFwVq4VrI6Z29t64wy6PSS5aryXADvzmJprvdJ6mNABaf3iN6N+CpIBA==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "nUKxwEu1iJ/HAYNs1zntw3ivSgpT/89rHW7hfuZCxNkVey29uUfM0W00yR0iLUwWug5YaznsIyUrdgGGt5yBBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4vaTR77BfjAJIgpSVgbACBBQm+VY3SJi+RqVZiQNObuR65Q53NnQC3jhDBRlfhSRYTJD2t9nQAZAkBeCHg3kCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "s+V5FnMFsSwzeHf3aUY5hQAqvDRIE56jiN2taWNaP1uLV3z2VZZJIHjyAADEL6JiOT2qCzOB4MgEpWJy4lcKCg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "yrBY1s3Sdr2vfdUjTqnQjbYQwIlG8ARu5t5QM+IbZ7RvWkTqQoCTJdEiaI/BnF6XO/q+FAquDfWgxQ5QYBZxCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "D0WhHfUnN4zq6j9kBw/IqD3c4wjmFoh2DLGb6ShgKrbHtM+f2yyvLPhvXwx/TiJ0oImwJc7u9MILNzYw+KynCA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:08:36.160465731Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "648ED46206DB8A6922541BBF13A0F66DC35A1E449EBAD246C365A166B36AE838", + "next_validators_hash": "336D286B5D9BB8F3E10C5C0F8AA9B932F522079FFB5343455799F5C2DD8DFC5A", + "consensus_hash": "648ED46206DB8A6922541BBF13A0F66DC35A1E449EBAD246C365A166B36AE838", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "CAE0CFC3A786326998A5F77F9D334DC29D1ED72AD97FE06A99AE7FC9D363FCBA", + "part_set_header": { + "total": 1, + "hash": "CAE0CFC3A786326998A5F77F9D334DC29D1ED72AD97FE06A99AE7FC9D363FCBA" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "G9L7I2sSU2YIpw4N8WuAAcXlgnf0JE8WN/rZn5T/51MrfSUXznvdAiVA1H1kl9myX6MdozFsv4CX8Yx1K66QDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "d68NgR3NQlEvlOZNj5BcnSxFm7sNLuCrAkV8ejP1Wmbrf51/+6rS2u09msRq3Oxge9NRHEiHKXcJEsg6CeVKBg==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "VZ7Uq/F/RJtfooIWRkuqUWJ2UuEf02c7QiIaTRawd/dsIWjAnOjyw21l6aE4HhSf/TPR0fI25VOcgrYb6yF2Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "Jid4V//FUDniyHMACTOiXqGz1PmpGz9Wzu32l4oonXa3gUlRviRfkUhQFQ8Y9UGziN0KVXAOCyk1i0PCJSWUBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "vL6K27Ee029t4eUogkTwwQiI8M07hZDKTAUNepHGvmo/hqMBwWfB/3Ag0IP9M1HXW0gCF3Nv4iAdU3xeYncCBw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "0BB72D78A148C98AA84A68885B8CBAB30659489F4D04F662847BED42BE3931CC", + "next_validators_hash": "2EEB3B7020AECCB7D1B6953A8A843AFF68A2A115C28E05FB1B9FFA37F7C8F504", + "consensus_hash": "0BB72D78A148C98AA84A68885B8CBAB30659489F4D04F662847BED42BE3931CC", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "CE31A119F71AFD4CF4BB87AF35A60F528FB59C08F4FF6D59209DB21F123D14B9", + "part_set_header": { + "total": 1, + "hash": "CE31A119F71AFD4CF4BB87AF35A60F528FB59C08F4FF6D59209DB21F123D14B9" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "NBp5zW/uirpcg+aQgmYdjBqRRwHuJ4zDTmIUzWVahs6nsEbJok9KGmbHspN8zUt6uIIu8uZCKeZs3NVoUHo1AA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "GnACo0y/RwgoEwtYMnLMhrDL7j+T1CtvZlTd8I6KFCEdz4HiVjCvEeeJW98hHJvqabIOhL2j3/+FBs9tZj+RBA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Po81TEQDACF0yzYgk33DC3cCoelbMKawwc9pwRkVeg9YyjHMf419mUgzaqlisIVE5SItbtiZydmwl3Oq+hvrCA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "uti27XCx6VTtG0H6UOpLVHfV8GJ3HPStxSZNJV0glkM2YFCSnOsM3zrC3YttRoahix9nhnVhuPsa7wtk9uV9AA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestTwoThirdsValsetChanges.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestTwoThirdsValsetChanges.tla new file mode 100644 index 000000000..3041e0804 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestTwoThirdsValsetChanges.tla @@ -0,0 +1,388 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n10", "n3", "n5", "n6", "n7", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n4", "n5", "n9" }, + VS |-> { "n1", "n2", "n4", "n5", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n4", "n6" }, + VS |-> { "n1", "n4", "n5", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n5", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n4", "n6" }, + height |-> 4, + lastCommit |-> { "n1", "n4", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1398 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1398 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n10", "n3", "n5", "n6", "n7", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n4", "n5", "n9" }, + VS |-> { "n1", "n2", "n4", "n5", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n4", "n6" }, + VS |-> { "n1", "n4", "n5", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n5", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n4", "n6" }, + height |-> 4, + lastCommit |-> { "n1", "n4", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n10", "n3", "n6", "n7", "n8" }, + header |-> + [NextVS |-> { "n1", "n4", "n5", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n6", "n7", "n8" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n3", "n6", "n7", "n8" }, + header |-> + [NextVS |-> { "n1", "n4", "n5", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n6", "n7", "n8" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n10", "n3", "n6", "n7", "n8" }, + header |-> + [NextVS |-> { "n1", "n4", "n5", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n6", "n7", "n8" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]] +/\ prevNow = 1398 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n10", "n3", "n5", "n6", "n7", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n4", "n5", "n9" }, + VS |-> { "n1", "n2", "n4", "n5", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n4", "n6" }, + VS |-> { "n1", "n4", "n5", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n5", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n2", "n4", "n6" }, + height |-> 4, + lastCommit |-> { "n1", "n4", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n4", "n5", "n9" }, + header |-> + [NextVS |-> { "n1", "n4", "n5", "n9" }, + VS |-> { "n1", "n2", "n4", "n5", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n10", "n3", "n6", "n7", "n8" }, + header |-> + [NextVS |-> { "n1", "n4", "n5", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n6", "n7", "n8" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n3", "n6", "n7", "n8" }, + header |-> + [NextVS |-> { "n1", "n4", "n5", "n6", "n7", "n8" }, + VS |-> { "n10", "n3", "n4", "n6", "n7", "n8" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n4", "n5", "n9" }, + header |-> + [NextVS |-> { "n1", "n4", "n5", "n9" }, + VS |-> { "n1", "n2", "n4", "n5", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n4", "n5", "n9" }, + header |-> + [NextVS |-> { "n1", "n4", "n5", "n9" }, + VS |-> { "n1", "n2", "n4", "n5", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n4", "n5", "n9" }, + header |-> + [NextVS |-> { "n1", "n4", "n5", "n9" }, + VS |-> { "n1", "n2", "n4", "n5", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n4", "n5", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 3)) + /\ 3 + * Cardinality({ + t_2s$1 \in history[s2$2]["current"]["header"]["VS"]: + ~(t_2s$1 \in history[s1$2]["current"]["header"]["VS"]) + }) + = 2 * Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:08:35 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestUntrustedBeforeTrusted.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestUntrustedBeforeTrusted.json new file mode 100644 index 000000000..b2bc94f5e --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestUntrustedBeforeTrusted.json @@ -0,0 +1,560 @@ +{ + "description": "MC10_3_faulty_TestUntrustedBeforeTrusted.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "73E55EE11AAB353DF0EBE16B9612F172176A08FA549A86C1EBEFC742FC94F77C", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "BCC2E5D6842FE7323C5F7DD00C34CC71A1FBADCB0158DAF169D3B0E9396F591A", + "part_set_header": { + "total": 1, + "hash": "BCC2E5D6842FE7323C5F7DD00C34CC71A1FBADCB0158DAF169D3B0E9396F591A" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "7dwZNB/gkwJmqJBloEuOmzIDRPlJkB9YoxrUYjJP7J9fV+/qIDjeLweHP3uRJ7t/6SBdsRjUi8o7fjyTsjl4Cw==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "qUNXxZ0m0xL0zIUYA2W+wVXqfzrFXrtQ4vXHlge7uR/GtYe0iWSVWs5zMT3D2EWY8w+aPVH/j5qbDdfcW6UZBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "imS07hEZLddL/YR/HuTZcBvMLLhME3KhoZZZOEz45Qfkkwg40LQ89okaxPmESoJp6DUV8fvZS7n2lyu4fSIIBw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZNcwWfeukGF+q3RENHxBBNh/ulfmtiqaB/HPHcv9XfqY5MBcht45FkXoPeuyqGg5foSkloW+AL+95+fodGsxCw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "U3CQ4BH/tVAFfOmmrKTWI5TBUiZtiNEVh4g7253BVIMEASQrXnVdcEUdgVxF3oQPwmp3Anx+Nh54V8PqFarWDg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "bmeP9Yz+AvHZtgj6VM9xpv26LCbynSmCH4bLO745qmsyG4jbIcdLJXdqDkFsw22bocggSszhCJ1sGJNbyb2ZBA==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "M50W4Ny5O6x3c3BSuLmMc0pPkC94R4B7vpFjuk+fQd300L2lcOCs4Oy5pkQUPo9r56/UEcqTr3Ne7Sy6nLEZAg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "h1JZQj4NOwMnlEJ1U6Dodb2oykCvfKIKRjvm8CIYaqi5YE6slLUPfQdyk1yZl16V0d0zr+DCX831jVcnJS9UCg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NXwN3SG+cyJ2wBMhYkrIiGR8NmidGdbYREvmwfteSeiU/paV1PIadRhe876vUV2t8t4OgDm4biSXG8LWGm11AA==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "lNdBMmwF9jAdn1Q25fn3d8ZufKP1Z1nxrhuMyuhbUXex/Kr2qJtc7vezsVdNJhjeAHHK5MzJiAonZNE5q0ymBA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:04:11.160465705Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:00Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "A76E237B005B6545163C0CD8B47F55BCE33AE0BA146D010995A532FE0F7F2AB7", + "next_validators_hash": "FD23F8052F08E9AA87D79AD74C935D195A4BCD688E52EF45791F4FA773E98B65", + "consensus_hash": "A76E237B005B6545163C0CD8B47F55BCE33AE0BA146D010995A532FE0F7F2AB7", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "56A41C255B8BF4C7A1F780F48603275356EAD2D08D82930CE88BFCE609EA93E5", + "part_set_header": { + "total": 1, + "hash": "56A41C255B8BF4C7A1F780F48603275356EAD2D08D82930CE88BFCE609EA93E5" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:00Z", + "signature": "8eNFq+EvaxYmYvPtLFYDHgHPRJztnpYz1rgu0u6CHRuWLhirU3zY0XJ/CXMgwIx7rje5gvHDbZDsBMFmoCDiBw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:00Z", + "signature": "SzctVNnyTWc199gYyIAoSj1bWzGp9HFHjnZGU5TKtE7NxpeiV9KAcs2s2S9PRTl4wP867jO6ENNTKnf+h9mNAQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:00Z", + "signature": "f26SK/L4G5d7Z1DBnWvvAKTCTH+qBXkZQDXi18NVicwlAyp6cQQjkBxxt/TLICqde/oLk9TfCkuOo8kedpVICg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 0, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 0, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 0, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 0, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 0, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestUntrustedBeforeTrusted.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestUntrustedBeforeTrusted.tla new file mode 100644 index 000000000..b1453edd7 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestUntrustedBeforeTrusted.tla @@ -0,0 +1,236 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n1", "n7", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n4", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n3", "n4", "n5", "n8" }, + VS |-> { "n10", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n8" }, + height |-> 4, + lastCommit |-> { "n10", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = { "n1", "n7", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n3", "n4", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n4", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n3", "n4", "n5", "n8" }, + VS |-> { "n10", "n3", "n4", "n6", "n7", "n8", "n9" }, + height |-> 3, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n6", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n4", "n5", "n8" }, + height |-> 4, + lastCommit |-> { "n10", "n3", "n4", "n6", "n7", "n8", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n1", "n7", "n8" }, + header |-> + [NextVS |-> {"n7"}, + VS |-> { "n2", "n4", "n8", "n9" }, + height |-> 4, + lastCommit |-> + { "n1", "n10", "n2", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 0]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n7", "n8" }, + header |-> + [NextVS |-> {"n7"}, + VS |-> { "n2", "n4", "n8", "n9" }, + height |-> 4, + lastCommit |-> + { "n1", "n10", "n2", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 0]], + now |-> 1400, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateFailed" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n1", "n7", "n8" }, + header |-> + [NextVS |-> {"n7"}, + VS |-> { "n2", "n4", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n4", "n5", "n6", "n7", "n8", "n9" }, + time |-> 0]] +/\ prevNow = 1400 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + BMC!Skolem((\E s$2 \in DOMAIN history: + LET CMS$2 == history[s$2]["current"]["Commits"] IN + LET UVS$2 == history[s$2]["current"]["header"]["VS"] IN + history[s$2]["current"]["header"]["time"] + < history[s$2]["verified"]["header"]["time"] + /\ history[s$2]["now"] + < history[s$2]["verified"]["header"]["time"] + 1400 + /\ ~(CMS$2 = {} <: {STRING}) + /\ ~(UVS$2 = {} <: {STRING}) + /\ Cardinality((CMS$2)) < Cardinality((UVS$2)))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:04:10 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetChangesFully.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetChangesFully.json new file mode 100644 index 000000000..b632c35b2 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetChangesFully.json @@ -0,0 +1,1091 @@ +{ + "description": "MC10_3_faulty_TestValsetChangesFully.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "FF26C9F30E01D7216CCDA4F32BDB84E6B7CACA1F72B9291E231FD926F232870A", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "E3763A75EBDB0AAB6F6B6150E585792567BB9A764B6E4C51DB23A6A6891450A8", + "part_set_header": { + "total": 1, + "hash": "E3763A75EBDB0AAB6F6B6150E585792567BB9A764B6E4C51DB23A6A6891450A8" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "hE8NfpX8rjZG/K0zAlu9LpyVVjRz9KqZp7fS5UeytNHt3msi3j2sTKwxq07XEFU8lxzpbgFB77Ud7pYG3M4GAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "tM+m0hWTSIOKUoCLxY3hVwWmF1kW2ZFBcU5untGmTt1xtTvDml8M6JgVrbXZuACZ1yFMh0FR5g1Ui7iDDYsUBg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "APXjqyh1eb6MIZy7H8WrMU9L4Qkln6dHbh8bhiN+RDrU/8rNCpeeCRUKGn2lxNR9yjHyP3bSgFh8RdtXKUM9Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "MOIeNvrvHAA/zCzmrJLGqkcv1yS3SIVRdO+Oo3kU96ExGsx1KvJ9XvbBzDJIDNhvfJ+kRhX8TdxQFbmzdGDnCw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "6vdAq4gIep/UfIXBdYwNait+YlPsLo/D2N6bpUavFCfZ3+WAWvLeeDf4FDBgfZsFYIUirA0Gsy1DWws5TYO2Bg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "vpo8Lm1HiiGLkmOXkAngqWFMkL4KSvs1elhVKI+8XXA/PfnqrbHzF4r2uc5UThAUdlDtBW2eR/GG/xzCCXVgBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "k485Mgm5AGbcXay/4nTcmSORa2PoP1Dh55aSH/TlJjhL8xdNsaLw2DHXYhRtu4L0BCEeOqRRYU8CptC9MkfcBg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "afh057WIhI7sjC+eT1dmpzuIMaBj0zxN86qUHa9lIzS9qSX8JlPyB77Zy7M1Ri+Ls5pG7BN7jL9VmTaGK1GbAA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4I3mtUKE2sSms6SPzMArZjuubz2R3oRxvCq79hU7EUvbMAxdvGvQKUdck4jCF5Gp8oalICOwbOFIzp9qRbaKCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "x0nJ0aQHHdPFMMwjI1c+Kko5laryFIF2oZoJgEgDREEB4MpkAmyklB4wY74gEiDCm8ZjfKDIDkOx4eTgFT/eCQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:07:05.160465722Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "312F08F1FD20383782E6501E9276A2B5639BB490C10F980387F46437A35DFB78", + "next_validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "consensus_hash": "312F08F1FD20383782E6501E9276A2B5639BB490C10F980387F46437A35DFB78", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "ED5B4B728BCBC4589AC7C84DB202C8142250B55376A6D626328A2E48DD6DF7A9", + "part_set_header": { + "total": 1, + "hash": "ED5B4B728BCBC4589AC7C84DB202C8142250B55376A6D626328A2E48DD6DF7A9" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "GgAz591+jI1ky9Ov+85Tb1OBeeEXjhgCWHRMUTxFH27gD2rNb+qKdAcnwv8rVA91hqHIGTHX0lkioaq3wxOsCA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "+YvpNE6QW/+aq8OP+5gG6RmrxXJNBsspot3ifHGN2+dOo/ABk+Ljp4VMO9AHvBCYlbjJZE1j93fYgvpWg4aGDg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "wc1GWwOR14GRMDWzLRTuYj36xZJ61HDE9uIx7BS4/whAH9dakmYg7+f7ykbRkaeRt8hqQAPvmEy5QFZ6ad62AA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "FF26C9F30E01D7216CCDA4F32BDB84E6B7CACA1F72B9291E231FD926F232870A", + "next_validators_hash": "312F08F1FD20383782E6501E9276A2B5639BB490C10F980387F46437A35DFB78", + "consensus_hash": "FF26C9F30E01D7216CCDA4F32BDB84E6B7CACA1F72B9291E231FD926F232870A", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "F20E9C6E644F20CA983691A8A60C5502CBDF6E2312D2A9B9D56044B37467BEA9", + "part_set_header": { + "total": 1, + "hash": "F20E9C6E644F20CA983691A8A60C5502CBDF6E2312D2A9B9D56044B37467BEA9" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "560omdETBfkzU19TqpXRu/Njyph9wmK6HCDQCcMV1c1oYuIHsMK0lppZOgkrzVbp2GVksH6Lr2IerY/L+hCIDw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetChangesFully.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetChangesFully.tla new file mode 100644 index 000000000..7a5e42ec2 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetChangesFully.tla @@ -0,0 +1,391 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n8", "n9" } +/\ blockchain = 1 + :> [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n3", "n6", "n7", "n9" }, + VS |-> {"n5"}, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n6", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> {"n5"}, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n7", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n8", "n9" } +/\ blockchain = 1 + :> [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n3", "n6", "n7", "n9" }, + VS |-> {"n5"}, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n6", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> {"n5"}, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n7", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n3", "n7", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> {"n5"}, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n3", "n7", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> {"n5"}, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n3", "n7", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> {"n5"}, + time |-> 3]] +/\ prevNow = 1400 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n8", "n9" } +/\ blockchain = 1 + :> [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n3", "n6", "n7", "n9" }, + VS |-> {"n5"}, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n6", "n7", "n8" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> {"n5"}, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n3", "n7", "n9" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n5"}, + header |-> + [NextVS |-> { "n3", "n6", "n7", "n9" }, + VS |-> {"n5"}, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n6", "n7", "n8" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n3", "n7", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> {"n5"}, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n3", "n7", "n9" }, + header |-> + [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n3", "n6", "n7", "n9" }, + height |-> 3, + lastCommit |-> {"n5"}, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n5"}, + header |-> + [NextVS |-> { "n3", "n6", "n7", "n9" }, + VS |-> {"n5"}, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n6", "n7", "n8" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> {"n5"}, + header |-> + [NextVS |-> { "n3", "n6", "n7", "n9" }, + VS |-> {"n5"}, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n6", "n7", "n8" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> {"n5"}, + header |-> + [NextVS |-> { "n3", "n6", "n7", "n9" }, + VS |-> {"n5"}, + height |-> 2, + lastCommit |-> { "n10", "n2", "n3", "n4", "n6", "n7", "n8" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> {"n5"}, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ LET t_37 == history[s1$2]["current"]["header"]["VS"] IN + BMC!Skolem((\E t_35 \in t_37: + BMC!Skolem((\E t_36 \in t_37: ~(t_35 = t_36))))) + /\ { + t_2s$1 \in history[s1$2]["current"]["header"]["VS"]: + t_2s$1 \in history[s2$2]["current"]["header"]["VS"] + } + = {} <: {STRING})))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:07:04 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDifferentAllSteps.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDifferentAllSteps.json new file mode 100644 index 000000000..420fe5dcc --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDifferentAllSteps.json @@ -0,0 +1,1964 @@ +{ + "description": "MC10_3_faulty_TestValsetDifferentAllSteps.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "B64E8F56311F20360D149CC3B2438AFDCC6464E24E6D59F45E56F4EEAA21A89E", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "63CB1FE7D0055A6496561A695E4E77EA2286DB71E0AC914592017AA55D3C8AAC", + "part_set_header": { + "total": 1, + "hash": "63CB1FE7D0055A6496561A695E4E77EA2286DB71E0AC914592017AA55D3C8AAC" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9YCbnc7wKU9tQrLN2JW5xKnKkWhX7hVOzskxsC1mCMRPB7mX3m80VBfAH3WsQ7RBZMZzmb8yr+dT1h9aXcBQDg==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5HbWTci/WO09GThCxvigakjEx9clGaqZfwmRa+cm4nrlJVhIkKPibCS7ANtZZhbJ7VltJ4XPNsG8fFNyI8evBA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "YWxiweaqmjo9TbFSRHB2ccOiADB7u5Yzj5Gd/fQpOgeldDmu9cA5N8wlox4X8a4plqXTGhb78NpECvVhRAtPCg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "bxYeEdGF9RLHVkGCw6We8LtOWN/KiAQOKmSOprDVRprF6jgu0wMN3rw3fF4A4owy7NQ9CpWriAf2NfsOBuD+Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "R9G2AEOkKWoL50xiANcYvc1EJMLWm9klekEPgBnkQtMFRY2pnqDg+/Hxdd3BMc/uxsbLtpJfkAgMsEMF0E8nBg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Weme6vZaXPsRbXVRwP+iSUmJLtK19n/R4nU8sEtqsgHVZ9MfPuxAtYltc/mDL10naz4RJvostbJRGzLY0nFbBg==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "OS3Nk1qVZFydsRiPYH/x9hvqzVkgOBpqX2g2orZtI1uwyVATKSYPE0PSRFoAw0aaA9raXQf9tFNv6NGinnMwBg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "GC5/by0Vgsf9k7M4/G2THUoi5A5zfTCI+Hp7UmVNyt7ZPqx0VxOny/b6M4WaKf3vuVOUrSK4HD/qYE8stwi/DA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "KX67AAS3P7kUHs0dEF8NQkRouVjw4FgJpoVXi4uwq+9KitA68tb52wWe0ZzDqvaTMBeguniGc/0JpjOzpXIgDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "+NAVrTsOfeT2QI8P4QqiQPIqVL5gFLUFMzaye8JUvhKNwCxn2PXykkDqA+I+mZW+1o08sRvzQZ+Q7f5tPjQ8Dw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:04:55.160465709Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "F014988E9DE07590FD4E600EDB0A9F674AA2A8F5768AF22DD2E99D367783BD06", + "next_validators_hash": "9ADECD986C4A5370D387A549C2E93396F61C044DBC92F119973365F2B16A09D9", + "consensus_hash": "F014988E9DE07590FD4E600EDB0A9F674AA2A8F5768AF22DD2E99D367783BD06", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "B13142895B816EA2371864CAE58A931ED243FEE543E9EB964268D3B4ECB9E611", + "part_set_header": { + "total": 1, + "hash": "B13142895B816EA2371864CAE58A931ED243FEE543E9EB964268D3B4ECB9E611" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "GLUPfLG1tTd64DPiLKR+wj+Peoau2TacAtFa5zL0iJnJc3X8YCQPbg/howG5MZMGMRfvvA7vFdkf9CMN6+qLBg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "mwxOsq81BY3EUn10VjvPpKG24S06vUseWNzGkldAL96UxtJG1kr+6HA58/y1+0OCAW+g5azIoMbxpz/7e5G+CA==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "KOZurmPvIpJfVeCKPfC6G+jTMIn2QsP879pxGXjmOcOWOqLzLXBOUfFqlLl+mEZ68bOxC+Qts85D3fVnBHmHAg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "Y8pfZeLkUAKv4D7boasVT/IbrkJZ6lcuUJ5Wl7b53eUkNOXg3dNmQnn98GG43At3cpZ/YQ9b4mRL6I9u6IS9AA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "VKqTj5WaNHj1trOBC1+89li441DY5rjUYBrJLfUFWETh+SbeA/u1Wv4rX8IubX4gUbh24qap7YScBabacAjCAg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:04Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "B64E8F56311F20360D149CC3B2438AFDCC6464E24E6D59F45E56F4EEAA21A89E", + "next_validators_hash": "F014988E9DE07590FD4E600EDB0A9F674AA2A8F5768AF22DD2E99D367783BD06", + "consensus_hash": "B64E8F56311F20360D149CC3B2438AFDCC6464E24E6D59F45E56F4EEAA21A89E", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "CD0D10EC8ADADC73F51DEC1AD6D48E78DE6D2FC7A5B75C25B46F3C44DBA97696", + "part_set_header": { + "total": 1, + "hash": "CD0D10EC8ADADC73F51DEC1AD6D48E78DE6D2FC7A5B75C25B46F3C44DBA97696" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "TR4uWzCfJU1eJGJ/po1zgEKPhNCcroLuVZJPhFWqdublLrJlKESfJ+VDzlXi5QofL00BcwyzK44Ph1d/oz2MDg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "dQuqRWaeWvqq/YTUNnRWhrqDKB0b0tNAfyUOuDazEnLLoahlziCTjTYz4nboKlM8OPHFDnx8ksPjp6PcTGRxDw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "W2bFcDaoXpa3VxtKFySuHDpv5E49uvowCE1+zA+PaPUAMQ3Mx33cNUR1ikVhz3jILQfUKbFv2+aIcdNwoFNlAA==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "0g9M5y+s2NtG0lMsXIOboFkPIPPnRWz0Cs54DNYULrSlk2NDADt4sX302Bt6pMuhlLOcTP1Xr1pKsFC3cRPYCA==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "VFxvz5Www31CFFVs7ejJditwyeQp3a+g5U6neanHbc0zAA5Rt2Nu5bYSyY0wJRh7dy3gu2WTf3xLe/o/lgYaCA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "9Qn6X8Kou4D+Q+3JD1XoZwfUHudAL6CU+8YX/w7P2gwtieWzqvHOslVmWA1k0StpXF5LLwcOSTHo+dAjRmviAQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:04Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDifferentAllSteps.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDifferentAllSteps.tla new file mode 100644 index 000000000..637cd3357 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDifferentAllSteps.tla @@ -0,0 +1,378 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n3", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + VS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n6", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n10", "n3", "n4", "n5", "n6" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 4 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 4 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n3", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + VS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n6", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n10", "n3", "n4", "n5", "n6" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n1", "n10", "n3", "n6", "n7" }, + header |-> + [NextVS |-> { "n2", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n10", "n3", "n6", "n7" }, + header |-> + [NextVS |-> { "n2", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]], + now |-> 4, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 4 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n3", "n6", "n7" }, + header |-> + [NextVS |-> { "n2", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]] +/\ prevNow = 4 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n3", "n8" } +/\ blockchain = 1 + :> [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + VS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n6", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n10", "n3", "n4", "n5", "n6" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n2", "n4", "n5", "n6", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + VS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n1", "n10", "n3", "n6", "n7" }, + header |-> + [NextVS |-> { "n2", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n10", "n3", "n6", "n7" }, + header |-> + [NextVS |-> { "n2", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + height |-> 3, + lastCommit |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 3]], + now |-> 4, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n2", "n4", "n5", "n6", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + VS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]], + now |-> 4, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n2", "n4", "n5", "n6", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + VS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 4 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n2", "n4", "n5", "n6", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n7" }, + VS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n5", "n6", "n7", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 4 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n6", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ (\A s1$2 \in DOMAIN history: + \A s2$2 \in DOMAIN history: + s1$2 = s2$2 + \/ ~(history[s1$2]["current"]["header"]["VS"] + = history[s2$2]["current"]["header"]["VS"])) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:04:54 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDoubles.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDoubles.json new file mode 100644 index 000000000..b8df4e6f2 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDoubles.json @@ -0,0 +1,1055 @@ +{ + "description": "MC10_3_faulty_TestValsetDoubles.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "3E89CA05C1E0BCA99EE3983F62806D228D3F690FEFD4062D4F0E99768CD61789", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "04EDC718809307BDD78C059DBDA869A60D27162E55773C61DA4621D8ADBEB3C4", + "part_set_header": { + "total": 1, + "hash": "04EDC718809307BDD78C059DBDA869A60D27162E55773C61DA4621D8ADBEB3C4" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "mSmX/agdww/fGeZNqWkKLiis577AXpy4tyNERPjN/VCTCkm5itjzVAtoI2tlzE6IlMIs/3wlEGhqXDABwUMqBg==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "pQf5j445mWsTlDiWf9JHVScYP1I/kaf1c4IWtF+qnJNEcmqmWrVxIBQLwZYXRi1v8GGdHnyIpS3/RgWa8txPCg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "zN7hlElXEcBUYwTaFYil3hY/xKuBR9EyMqyb+ECNO6vq/plTyfX33x5FHtGPzKKt1PLz0j6N1TkZ96hyarWzBw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5Go3N7W7wNMpyHEU1Ker5KigqLmYC9YNepDikFSK2FiROdYDxcI7BGISj7HRX8vOVSuj+6V/+p+I+nSod6KhAw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "KyALeqOqh9gxx7UcWwFVUpgH+L2J1K9FG6bE6H287tZuLVjB6D2Izk1j+gmFqqU47cLvatjtzp8UjsLyLMHYCA==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "yd8UOmXdPAhwpzS9yEGJwdPryRVtxibWM5VYn0n6uEldkcCty/3hvMR1jMz1krqfQHAE1qbq+rtBuwaPGYNbCw==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "mpWJuWqjtDeyyYHaI9g2RBOnkkw+15RDxIf+lfedDnWeUly4xAiWYsQCaZiZagPbXvfMmJ6J5s+a8q927kvQBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ARhLagyQ/KghaPN7hzZx5po/CTcdfUXyLM8OEqwzLT+X1xfyLR21qTo08RNgzIOlrucytLnsuYAguXdQyZUfBw==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "qHgqFqBjvz778Q47oC1x81NHcfRuIF1qggDHFNhEt222U8Auu6ula3XXNQDgYGyvvVZ4WDWu+PBsDQDx6X2MAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "3u77xC5QW9udM1R/L9TY3Hu02408lOPoHnYo4uBAt/0CsNugVZgVIlqlc29CJ37QfUE8MhDFnPC47TUI1lzfBA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:06:22.160465718Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "2741031AA03B47590836834106A5C0F29F0504A26D27504E17FEF676BCA0318D", + "next_validators_hash": "9F2570543938D23808FD3BC115A52BA7FA5031BA988FA5CACB465DE26C8F175D", + "consensus_hash": "2741031AA03B47590836834106A5C0F29F0504A26D27504E17FEF676BCA0318D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "D5096025AC2F453169F413381E47BC6E9BD67FC594253CB0D585036FFDFD392B", + "part_set_header": { + "total": 1, + "hash": "D5096025AC2F453169F413381E47BC6E9BD67FC594253CB0D585036FFDFD392B" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "k6s1Xxj0acjrqUmz44f9w18/SptL7RFcaaWBX5JC4LQ7iQYYiIyAQLTsLNNITwxmfSvVJXDDFSXbX+/cU2dgDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "EZpLy8KL327n1z/c+XaQYZSwiJTEcDL9s56hsHOdzHtTkSHxRuKFB7I7XwlgDtYAgfW3BCuZGVtfSV0SeuHWAg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "3E89CA05C1E0BCA99EE3983F62806D228D3F690FEFD4062D4F0E99768CD61789", + "next_validators_hash": "689A20DE2D28346D19062FF1E392CE4D2D8CB8F70510F3DCC45E21FAA3E5023E", + "consensus_hash": "3E89CA05C1E0BCA99EE3983F62806D228D3F690FEFD4062D4F0E99768CD61789", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "4ABB166ACE0869CD486E11D57139B1E030922424799A431A5EBED11E0B70C242", + "part_set_header": { + "total": 1, + "hash": "4ABB166ACE0869CD486E11D57139B1E030922424799A431A5EBED11E0B70C242" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Szbw9MXJuGH4bQgQdyIUeLXw4LPXFTEdcbkDMtmVtTV67UBeCVKsEo3VUXfZ9/sFzzwBifGiWo3oKwrlWP0ZBg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "3Ozr26y8CvYP1ePmRIHOO4FFp2sEOIQbcsuLjcksfqaTMbV24kA/aUmhFnZup1RscZPZOG3GOqJ4UfGhFsTICA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "+fcXJpiGCaVBXCKkCWKgYAtBKqxLDMOES0YaThog+ReYBVqVLvStN2/MVpyB4eP/9Q/V4R57Goko67LhsSIBDw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDoubles.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDoubles.tla new file mode 100644 index 000000000..9e10f313a --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetDoubles.tla @@ -0,0 +1,381 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n8", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + VS |-> { "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n3", "n5", "n7" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n8", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + VS |-> { "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n3", "n5", "n7" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n4" }, + VS |-> { "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n5", "n9" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n4" }, + VS |-> { "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n5", "n9" }, + time |-> 4]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n4" }, + VS |-> { "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n5", "n9" }, + time |-> 4]] +/\ prevNow = 1400 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n8", "n9" } +/\ blockchain = 1 + :> [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + VS |-> { "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n3", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + height |-> 3, + lastCommit |-> { "n3", "n5", "n7" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n2", "n3", "n5", "n6", "n7", "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n3", "n5", "n7" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + VS |-> { "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]] + @@ 4 + :> [Commits |-> { "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n4" }, + VS |-> { "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n5", "n9" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n10", "n4" }, + VS |-> { "n8", "n9" }, + height |-> 4, + lastCommit |-> { "n1", "n10", "n2", "n5", "n9" }, + time |-> 4]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n3", "n5", "n7" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + VS |-> { "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n3", "n5", "n7" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + VS |-> { "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n3", "n5", "n7" }, + header |-> + [NextVS |-> { "n1", "n10", "n3", "n4", "n5", "n6", "n8" }, + VS |-> { "n3", "n5", "n7", "n8" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4", "n5", "n6", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n3", "n5", "n7", "n8" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ LET t_34 == history[s1$2]["current"]["header"]["VS"] IN + BMC!Skolem((\E t_32 \in t_34: + BMC!Skolem((\E t_33 \in t_34: ~(t_32 = t_33))))) + /\ Cardinality(history[s2$2]["current"]["header"]["VS"]) + = 2 * Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:06:21 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetHalves.json b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetHalves.json new file mode 100644 index 000000000..10017170e --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetHalves.json @@ -0,0 +1,1551 @@ +{ + "description": "MC10_3_faulty_TestValsetHalves.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "next_validators_hash": "1AB1625BDB42AA31DCDD08D516F0783C7BB69451BBEE4787703D47F8BFD87ACD", + "consensus_hash": "5C805BF3F94032D94639182AAC38872547ACE84871022EC9B68E8E8B946E691D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "D3BD2BDFEF2EAB77621B5590B435346C1161072BD25172532B13913E63F36935", + "part_set_header": { + "total": 1, + "hash": "D3BD2BDFEF2EAB77621B5590B435346C1161072BD25172532B13913E63F36935" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "mirgcj8RFElg5NIHeReI8lSvR6Nnr8c5pA6ib3XgWElfyM3bHgGdDWyMxX4BMr6UdaoSQhgsmfJEdQ9XGVh8Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "JrrQVOCiXQ65HbA3X0IqZXoQruNCRipToDWSCQlWY9iWZ4hvl4TL0eAbEgJoDlSt8PQSKh44P8yNsSwIOKB1AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "X6uzFT0c5DE3JfpKMH2ZNhGGG22inPpbXEDcpXRBYRpo/N4AWfKz7Ut/eZS0oIz3/TWEJWDl9iIYOsKA7hcLAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "kRdUkmAcJay669m0bKpzEqHBGwDg4NciojxelWs8eOqrEZCe0L3X7gmcXhS94aaYs9Ds43+GlKWs9vFPGbJgCw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "uVysytquP0aYVwUKFxkZLuU3vbLpTwKa/aLnJ1VDo6DRQwJzE4dU3NFboUAMl7DQSfBIIoZCP0XuShHgJVVJCg==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "glVf0/GsSjdZsS8yvp01K9uMTbMX0ug90oA/pGO0fmUJSfjkugky0ha+GRfefivLolvpWsxt7gqszwQsIwihAg==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "KOOx9RCqxpEGwiy/4EK9hvIjFFxoa9TE10WmcS5E8Bhw36t/+8oGja6+TH49G/lyAr1HAjpFSDT6HuHduD+5BQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "oIiCpPjbBMs8dlj4NPqxTIp95rTzJget9dPxtKpGktZbT6N+KvZpxEDvNvLkFgwJlz/9EOrN1vJJkRnVVpHJCA==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8Vyxl2OzQNF3BpFTNtoHM1S/8G3uWmtS+sGm/BS+bLt6UP3EtwbiXze99Uh58Y429JjPEaGl1QR1h/4qxkgQAA==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "GQZzStlx83KL7lmpbDOy5/614x5B6sF9N3BUBDQOq7bG8lreqUggfn3koVKRGyN+LG4ioxq2fWDLg+P2EwMoCg==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:06:43.160465720Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "30DAAC24CAAAA1D007863DDF798FEF8A78A0731BC850AC68957C0FF61E2ED0A7", + "next_validators_hash": "563CCCB30FF9C48F210F991FF693A99764802EC726B4000CA4E6879B11C5643C", + "consensus_hash": "30DAAC24CAAAA1D007863DDF798FEF8A78A0731BC850AC68957C0FF61E2ED0A7", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "23BEA4E58E6A448E935A5DD905DB2FD2CDED58FA9ACF4B4805EC456670FC3002", + "part_set_header": { + "total": 1, + "hash": "23BEA4E58E6A448E935A5DD905DB2FD2CDED58FA9ACF4B4805EC456670FC3002" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "8KLAVFCT0B6yfbuGgFZ144rm+uZOtSmVJGIyUce1BtXZpPXe67jdp4k6be7bT6r7bq7+dpadfuu+49ShZqAZCg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "Pzsl4d6CunDxQZP2ffw7B4IiP4uYFae60qUNrUx9cXniI1w9LUml/MFAvlu9vWqjsuR3rSjzlhVhMGDkEokpAg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "fDGjbLUGyGI5i01PjfcgtpnqCFOWuITk9V1xO/GLsbrYA64+h+T4RceaAwjdqaIU69Jg8d3JvVD2d/ODHlvLAg==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "QVfJkS1AtjX6EGurpZuIXijKqcJZh7E/dlkcxP0g1zNA+yTKoIC3IVyM1JP5YX6yz1jZKZGbMRD3CM4OhRSxCw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "1AB1625BDB42AA31DCDD08D516F0783C7BB69451BBEE4787703D47F8BFD87ACD", + "next_validators_hash": "30DAAC24CAAAA1D007863DDF798FEF8A78A0731BC850AC68957C0FF61E2ED0A7", + "consensus_hash": "1AB1625BDB42AA31DCDD08D516F0783C7BB69451BBEE4787703D47F8BFD87ACD", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "0F074B4E623855D824884E06CE300E7B06F8F211667EF3CEC383AE5E5258066F", + "part_set_header": { + "total": 1, + "hash": "0F074B4E623855D824884E06CE300E7B06F8F211667EF3CEC383AE5E5258066F" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "cFfCmLTHj0mr6Ihn6J3oEhtwGV84dmQyAKtl3PYDrzh5qFx6/kPkbNfG/X882UAtz+eSW1tsDT129r6a4KPnCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "mY+APAgn8C0HinXrhbnt/W/u5fOF2FkWDkDoWzZtdfv2UPBxnugnZ3KRYKyuqq7AjdB2Zms/FLhWGaGh68qrBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "LeCGHtuVlIMmgaCND15gs6pi51ZUmCDL1N2H+uTDYe9dBoFw/ac1wzCu7PvycEuTFS3YCErPdZwo6Xp7v9iNBg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Bo1k5KmCHUZaT3Sr/spL9AhDztAiqbLoDSO5fdO0rVH+JYpDAsVAOmkNClOr01BAwLFgCinSPg3C34VqSGd4Cw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Vbp8WxNhcuDDabjwIQm+fwgYEZh/Fwtelt07dCfX9X5ErZX4PcDjxQAb2UaekGJwg1MY1C0oRb6c9Q2qVH0WCA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KnxmZvSDBv86GS7gm1kAHa2i2WXmu+MVkpD/jeybV/Q=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n10", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetHalves.tla b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetHalves.tla new file mode 100644 index 000000000..700d80710 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC10_3_faulty_TestValsetHalves.tla @@ -0,0 +1,384 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC10_3_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n1", "n2" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n2", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n4", "n6", "n8" }, + VS |-> { "n10", "n2", "n4", "n5", "n8" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4", "n7", "n8" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n4", "n6", "n8" }, + height |-> 4, + lastCommit |-> { "n10", "n2", "n4", "n8" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = { "n1", "n2" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n2", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n4", "n6", "n8" }, + VS |-> { "n10", "n2", "n4", "n5", "n8" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4", "n7", "n8" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n4", "n6", "n8" }, + height |-> 4, + lastCommit |-> { "n10", "n2", "n4", "n8" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n10", "n4", "n5", "n8" }, + header |-> + [NextVS |-> { "n4", "n6", "n8" }, + VS |-> { "n10", "n2", "n4", "n5", "n8" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4", "n7", "n8" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n4", "n5", "n8" }, + header |-> + [NextVS |-> { "n4", "n6", "n8" }, + VS |-> { "n10", "n2", "n4", "n5", "n8" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4", "n7", "n8" }, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n10", "n4", "n5", "n8" }, + header |-> + [NextVS |-> { "n4", "n6", "n8" }, + VS |-> { "n10", "n2", "n4", "n5", "n8" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4", "n7", "n8" }, + time |-> 3]] +/\ prevNow = 1400 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = { "n1", "n2" } +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n10", "n2", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n4", "n6", "n8" }, + VS |-> { "n10", "n2", "n4", "n5", "n8" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4", "n7", "n8" }, + time |-> 3] + @@ 4 + :> [NextVS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + VS |-> { "n4", "n6", "n8" }, + height |-> 4, + lastCommit |-> { "n10", "n2", "n4", "n8" }, + time |-> 4] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n2", "n3", "n4", "n7" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n10", "n4", "n5", "n8" }, + header |-> + [NextVS |-> { "n4", "n6", "n8" }, + VS |-> { "n10", "n2", "n4", "n5", "n8" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4", "n7", "n8" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n10", "n4", "n5", "n8" }, + header |-> + [NextVS |-> { "n4", "n6", "n8" }, + VS |-> { "n10", "n2", "n4", "n5", "n8" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4", "n7", "n8" }, + time |-> 3]], + now |-> 1400, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4", "n7" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> + { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4", "n7" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4", "n7" }, + header |-> + [NextVS |-> { "n10", "n2", "n4", "n5", "n8" }, + VS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + height |-> 2, + lastCommit |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n8", "n9" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4", "n7", "n8", "n9" }, + VS |-> { "n1", "n10", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 3 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 4)) + /\ Cardinality(history[s1$2]["current"]["header"]["VS"]) + = 2 * Cardinality(history[s2$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:06:42 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.json index ae5d96e31..19fe129c4 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.json @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "next_validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "42C62AB26BDCD052FD7D87449C1CA700A79780D55E2FC8129614D4D2DC24CB08", + "hash": "6F70738E1F789E42D6F424F15A85D4B90BE287EB5A1E78DC3B2C8502EBAD2B28", "part_set_header": { "total": 1, - "hash": "42C62AB26BDCD052FD7D87449C1CA700A79780D55E2FC8129614D4D2DC24CB08" + "hash": "6F70738E1F789E42D6F424F15A85D4B90BE287EB5A1E78DC3B2C8502EBAD2B28" } }, "signatures": [ @@ -36,40 +36,31 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "mzNheVmshOSGCNfL/NfBBpJcofUx6cqclvEMOc9rZJ6A2pOrxO8ZymXej0FvksZ5mmhfLvZ0aW+as59WMldWBw==" + "signature": "I5AZkBd3JQaOh2sqLkyym3I+sKJqP/4o9hFZW1+PPsIV46C2AkRqNC8OeElW02bTEOncxk5+XLI2M9LGkUfjCg==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "KisuL/gVSTDQP1Q51uBKd8xDZM4mX+rRKIpMlkfUYF+qW4K51sPvqL/pgKSiUwBPAoGRBzwLoavPg9oiyRwPBA==" + "signature": "XdFpwQTWY5ZIxAViOD1EC+sA5KCDMLLhoFaYjHp0Zuu1o+nDIhVKyuS8CD5IatLtHc7pN6APMZruCrUhKuc7Dg==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "fgq+19zjPxTp8HILDBaW8VJg+wzyVkthtmf0HJxdoaXd+uZRQ7LDS2Tn7LXMKAQ9Q0sjtZ4BA3H3sfv9wA56BA==" + "signature": "lpBxn4D/foZUdjZbl/wkWmRKCMm201a7tc1DuQ81KqEUW3jSer6qJWhXLkkVWd03MaSuA5SDegG3pjrvXdegBw==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "Zy0rovAtLk58hTcprpXU7ikCdbky5rrQ8Y3o+/Xyo7VTt3zYiCdVsYj26agu8SR3cFkV96P2ryHF6NHWGwIJDw==" + "signature": "e2kVRdlz5BMgxQMeAeL36SiywpgUyrePcbBUwuZbdFUiK9B3JlNgxg84ZN1OYV5JRIrwaGoIQtE0xHmOr0YgDg==" } ] } }, "next_validator_set": { "validators": [ - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - }, { "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { @@ -91,7 +82,7 @@ ] }, "trusting_period": "1400000000000", - "now": "2020-10-21T12:40:04.160328400Z" + "now": "2020-11-06T10:11:05.160465746Z" }, "input": [ { @@ -103,35 +94,35 @@ "app": "0" }, "chain_id": "test-chain", - "height": "4", - "time": "1970-01-01T00:00:04Z", + "height": "3", + "time": "1970-01-01T00:00:02Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { - "height": "4", + "height": "3", "round": 1, "block_id": { - "hash": "D0E7B0C678E290DA835BB26EE826472D66B6A306801E5FE0803C5320C554610A", + "hash": "94ADAC811EEA6EC4B33C7883EC00755F12B13B24B5DF807FBF25BCE231F1A3DE", "part_set_header": { "total": 1, - "hash": "D0E7B0C678E290DA835BB26EE826472D66B6A306801E5FE0803C5320C554610A" + "hash": "94ADAC811EEA6EC4B33C7883EC00755F12B13B24B5DF807FBF25BCE231F1A3DE" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "lTGBsjVI6YwIRcxQ6Lct4Q+xrtJc9h3648c42uWe4MpSgy4rUI5g71AEpG90Tbn0PRizjKgCPhokPpQoQLiqAg==" + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "hFOfEgeKMbWi3q3RDkMXaP3rReBqvpcxRdYKwXYTwftmT00zmomdWcuFN5Ktx196M7/K3AmGZLySbg33Sd2DDA==" } ] } @@ -139,10 +130,10 @@ "validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null @@ -164,7 +155,102 @@ }, "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:05Z", + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:07Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -177,34 +263,34 @@ }, "chain_id": "test-chain", "height": "3", - "time": "1970-01-01T00:00:03Z", + "time": "1970-01-01T00:00:02Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "3", "round": 1, "block_id": { - "hash": "AAB1B09D5FADAAE7CDF3451961A63F810DB73BF3214A7B74DBA36C52EDF1A793", + "hash": "94ADAC811EEA6EC4B33C7883EC00755F12B13B24B5DF807FBF25BCE231F1A3DE", "part_set_header": { "total": 1, - "hash": "AAB1B09D5FADAAE7CDF3451961A63F810DB73BF3214A7B74DBA36C52EDF1A793" + "hash": "94ADAC811EEA6EC4B33C7883EC00755F12B13B24B5DF807FBF25BCE231F1A3DE" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "xn0eSsHYIsqUbmfAiJq1R0hqZbfuIjs5Na1c88EC1iPTuQAesKg9I7nXG4pk8d6U5fU4GysNLk5I4f7aoefOBA==" + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "hFOfEgeKMbWi3q3RDkMXaP3rReBqvpcxRdYKwXYTwftmT00zmomdWcuFN5Ktx196M7/K3AmGZLySbg33Sd2DDA==" } ] } @@ -212,10 +298,10 @@ "validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null @@ -225,10 +311,10 @@ "next_validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null @@ -237,6 +323,101 @@ }, "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, "now": "1970-01-01T00:23:20Z", "verdict": "NOT_ENOUGH_TRUST" }, @@ -254,36 +435,57 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" }, "commit": { "height": "2", "round": 1, "block_id": { - "hash": "872C1AB1DE37464802C172ECAB6D9956CA0F64E3B8655CCC1560CD1BB5F8C163", + "hash": "828735C84192C822B51B45D5AB2E377D1AD8FC7263E3D0785BBC783A872B41F3", "part_set_header": { "total": 1, - "hash": "872C1AB1DE37464802C172ECAB6D9956CA0F64E3B8655CCC1560CD1BB5F8C163" + "hash": "828735C84192C822B51B45D5AB2E377D1AD8FC7263E3D0785BBC783A872B41F3" } }, "signatures": [ { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "28IOmHu0ziqYyM1QUy1ybf4VOxDNW2SvvTld43lipedY8ExJX+OPDBvoSWc0LL0t2XC+NJURRr5cQJY5GzCJCg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "9PBOG9vERBw+xEnN9x1Iq3ke/YjUECGnbwZXfWaBRCLOB3hvrIomJlx9K92H49RU2oKjkxsLLHHUF/WJBWOICg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "6E9NyURDXiSPdS4Oy2sucOR3CX8D021mMqv0vq2NOR3H4RAaB+iXDJAjGlnPQmhKzYJiHHTsdYQQ6+zM0kjhDg==" } ] } }, "validator_set": { "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { @@ -298,10 +500,10 @@ "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null @@ -310,7 +512,198 @@ }, "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:22Z", + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", "verdict": "INVALID" } ] diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.tla index 233a837f6..eabd016d0 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustFailure.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n1"}, - VS |-> {"n1"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3" }, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> {"n3"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 5, lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,44 +52,44 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 5, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 5 +/\ now = 7 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 5 +/\ prevNow = 7 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,94 +99,94 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n1"}, - VS |-> {"n1"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3" }, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> {"n3"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 5, lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] - @@ 4 - :> [Commits |-> {"n1"}, + @@ 3 + :> [Commits |-> {"n2"}, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 4, - lastCommit |-> {"n1"}, - time |-> 4]] + VS |-> {"n2"}, + height |-> 3, + lastCommit |-> { "n2", "n3" }, + time |-> 2]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 5, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> {"n2"}, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 4, - lastCommit |-> {"n1"}, - time |-> 4]], - now |-> 5, + VS |-> {"n2"}, + height |-> 3, + lastCommit |-> { "n2", "n3" }, + time |-> 2]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -195,162 +195,154 @@ State3 == /\ nextHeight = 3 /\ now = 1400 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> {"n1"}, +/\ prevCurrent = [Commits |-> {"n2"}, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 4, - lastCommit |-> {"n1"}, - time |-> 4]] -/\ prevNow = 5 + VS |-> {"n2"}, + height |-> 3, + lastCommit |-> { "n2", "n3" }, + time |-> 2]] +/\ prevNow = 7 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ state = "working" -(* Transition 1 to State4 *) +(* Transition 0 to State4 *) State4 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n1"}, - VS |-> {"n1"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3" }, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> {"n3"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 5, lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 3 - :> [Commits |-> {"n1"}, - header |-> - [NextVS |-> {"n1"}, - VS |-> {"n1"}, - height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] - @@ 4 - :> [Commits |-> {"n1"}, + :> [Commits |-> {"n2"}, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 4, - lastCommit |-> {"n1"}, - time |-> 4]] + VS |-> {"n2"}, + height |-> 3, + lastCommit |-> { "n2", "n3" }, + time |-> 2]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 5, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> {"n2"}, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 4, - lastCommit |-> {"n1"}, - time |-> 4]], - now |-> 5, + VS |-> {"n2"}, + height |-> 3, + lastCommit |-> { "n2", "n3" }, + time |-> 2]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n1"}, - VS |-> {"n1"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]], + lastCommit |-> { "n2", "n3" }, + time |-> 2]], now |-> 1400, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 1402 +/\ now = 1400 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> {"n1"}, +/\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n1"}, - VS |-> {"n1"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] + lastCommit |-> { "n2", "n3" }, + time |-> 2]] /\ prevNow = 1400 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -360,148 +352,140 @@ State4 == (* Transition 5 to State5 *) State5 == -/\ Faulty = {} +/\ Faulty = {"n2"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n3", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n1"}, - VS |-> {"n1"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n3" }, VS |-> {"n1"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> {"n3"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 5, lastCommit |-> {"n1"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {}, + :> [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> {"n2"}, - VS |-> {"n3"}, + [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 2, lastCommit |-> { "n2", "n3", "n4" }, time |-> 2]] @@ 3 - :> [Commits |-> {"n1"}, - header |-> - [NextVS |-> {"n1"}, - VS |-> {"n1"}, - height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] - @@ 4 - :> [Commits |-> {"n1"}, + :> [Commits |-> {"n2"}, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 4, - lastCommit |-> {"n1"}, - time |-> 4]] + VS |-> {"n2"}, + height |-> 3, + lastCommit |-> { "n2", "n3" }, + time |-> 2]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 5, + now |-> 7, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> {"n2"}, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 4, - lastCommit |-> {"n1"}, - time |-> 4]], - now |-> 5, + VS |-> {"n2"}, + height |-> 3, + lastCommit |-> { "n2", "n3" }, + time |-> 2]], + now |-> 7, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n1"}, - VS |-> {"n1"}, + [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]], + lastCommit |-> { "n2", "n3" }, + time |-> 2]], now |-> 1400, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {}, + [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> {"n2"}, - VS |-> {"n3"}, + [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 2, lastCommit |-> { "n2", "n3", "n4" }, time |-> 2]], - now |-> 1402, + now |-> 1400, verdict |-> "INVALID", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -511,20 +495,20 @@ State5 == @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 1402 +/\ now = 1400 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> {}, +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3" }, header |-> - [NextVS |-> {"n2"}, - VS |-> {"n3"}, + [NextVS |-> {"n3"}, + VS |-> { "n1", "n3" }, height |-> 2, lastCommit |-> { "n2", "n3", "n4" }, time |-> 2]] -/\ prevNow = 1402 +/\ prevNow = 1400 /\ prevVerdict = "INVALID" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n3", "n4" }, + [NextVS |-> { "n1", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -542,5 +526,5 @@ InvariantViolation == /\ history[s2$2]["verdict"] = "NOT_ENOUGH_TRUST")))) ================================================================================ -\* Created by Apalache on Wed Oct 21 12:40:04 UTC 2020 +\* Created by Apalache on Fri Nov 06 10:11:05 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.tla index 5f4424bc9..7e0645e65 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {"n4"} +/\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4] + lastCommit |-> {"n2"}, + time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5] + lastCommit |-> { "n3", "n4" }, + time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n4" }, height |-> 5, - lastCommit |-> {"n1"}, - time |-> 6] + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,44 +52,44 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1397, + now |-> 5, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 1397 +/\ now = 5 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 1397 +/\ prevNow = 5 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,258 +99,258 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {"n4"} +/\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4] + lastCommit |-> {"n2"}, + time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5] + lastCommit |-> { "n3", "n4" }, + time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n4" }, height |-> 5, - lastCommit |-> {"n1"}, - time |-> 6] + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 4 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]] + lastCommit |-> { "n3", "n4" }, + time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1397, + now |-> 5, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]], - now |-> 1397, + lastCommit |-> { "n3", "n4" }, + time |-> 4]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 1398 +/\ now = 5 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> {"n1"}, +/\ prevCurrent = [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]] -/\ prevNow = 1397 + lastCommit |-> { "n3", "n4" }, + time |-> 4]] +/\ prevNow = 5 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ state = "working" -(* Transition 1 to State4 *) +(* Transition 3 to State4 *) State4 == -/\ Faulty = {"n4"} +/\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4] + lastCommit |-> {"n2"}, + time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5] + lastCommit |-> { "n3", "n4" }, + time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n4" }, height |-> 5, - lastCommit |-> {"n1"}, - time |-> 6] + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 3 - :> [Commits |-> {"n4"}, + :> [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 5]] + lastCommit |-> {"n2"}, + time |-> 3]] @@ 4 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]] + lastCommit |-> { "n3", "n4" }, + time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1397, + now |-> 5, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]], - now |-> 1397, + lastCommit |-> { "n3", "n4" }, + time |-> 4]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 5]], - now |-> 1398, + lastCommit |-> {"n2"}, + time |-> 3]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 1398 +/\ now = 1400 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> {"n4"}, +/\ prevCurrent = [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 5]] -/\ prevNow = 1398 + lastCommit |-> {"n2"}, + time |-> 3]] +/\ prevNow = 5 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -360,151 +360,151 @@ State4 == (* Transition 3 to State5 *) State5 == -/\ Faulty = {"n4"} +/\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4] + lastCommit |-> {"n2"}, + time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5] + lastCommit |-> { "n3", "n4" }, + time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n4" }, height |-> 5, - lastCommit |-> {"n1"}, - time |-> 6] + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2", "n3" }, + :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]] @@ 3 - :> [Commits |-> {"n4"}, + :> [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 5]] + lastCommit |-> {"n2"}, + time |-> 3]] @@ 4 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]] + lastCommit |-> { "n3", "n4" }, + time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1397, + now |-> 5, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]], - now |-> 1397, + lastCommit |-> { "n3", "n4" }, + time |-> 4]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 5]], - now |-> 1398, + lastCommit |-> {"n2"}, + time |-> 3]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n2", "n3" }, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]], - now |-> 1398, + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> { "n1", "n2", "n3" }, +/\ latestVerified = [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ -513,18 +513,18 @@ State5 == /\ nextHeight = 4 /\ now = 1401 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> { "n1", "n2", "n3" }, +/\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]] -/\ prevNow = 1398 +/\ prevNow = 1400 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -534,171 +534,171 @@ State5 == (* Transition 0 to State6 *) State6 == -/\ Faulty = {"n4"} +/\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 4] + lastCommit |-> {"n2"}, + time |-> 3] @@ 4 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5] + lastCommit |-> { "n3", "n4" }, + time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n4" }, height |-> 5, - lastCommit |-> {"n1"}, - time |-> 6] + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2", "n3" }, + :> [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]] @@ 3 - :> [Commits |-> {"n4"}, + :> [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 5]] + lastCommit |-> {"n2"}, + time |-> 3]] @@ 4 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]] + lastCommit |-> { "n3", "n4" }, + time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1397, + now |-> 5, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]], - now |-> 1397, + lastCommit |-> { "n3", "n4" }, + time |-> 4]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n4"}, + [Commits |-> { "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, - VS |-> {"n4"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 5]], - now |-> 1398, + lastCommit |-> {"n2"}, + time |-> 3]], + now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n2", "n3" }, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]], - now |-> 1398, + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3" }, + [NextVS |-> {"n2"}, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 4 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]], + lastCommit |-> { "n3", "n4" }, + time |-> 4]], now |-> 1401, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n2", "n3" }, + [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]]] -/\ latestVerified = [Commits |-> {"n1"}, +/\ latestVerified = [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]] + lastCommit |-> { "n3", "n4" }, + time |-> 4]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ -706,21 +706,21 @@ State6 == /\ nextHeight = 4 /\ now = 1401 /\ nprobes = 4 -/\ prevCurrent = [Commits |-> {"n1"}, +/\ prevCurrent = [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 5]] + lastCommit |-> { "n3", "n4" }, + time |-> 4]] /\ prevNow = 1401 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> { "n1", "n2", "n3" }, +/\ prevVerified = [Commits |-> {"n2"}, header |-> - [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n2", "n3" }, + [NextVS |-> { "n3", "n4" }, + VS |-> {"n2"}, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 2]] /\ state = "finishedSuccess" @@ -735,5 +735,5 @@ InvariantViolation == /\ history[s2$2]["verdict"] = "NOT_ENOUGH_TRUST")))) ================================================================================ -\* Created by Apalache on Wed Oct 21 12:39:48 UTC 2020 +\* Created by Apalache on Fri Nov 06 10:10:45 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.tla index 08fb11f5d..cf4c653a5 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 10] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3" }, - time |-> 6] + lastCommit |-> {"n2"}, + time |-> 11] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 12] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,44 +52,44 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 7 +/\ now = 1398 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 7 +/\ prevNow = 1398 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,41 +99,41 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 10] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3" }, - time |-> 6] + lastCommit |-> {"n2"}, + time |-> 11] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 12] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -141,26 +141,26 @@ State3 == @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]] + time |-> 11]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -169,123 +169,123 @@ State3 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]], - now |-> 7, + time |-> 11]], + now |-> 1398, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 7 +/\ now = 1399 /\ nprobes = 1 /\ prevCurrent = [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]] -/\ prevNow = 7 + time |-> 11]] +/\ prevNow = 1398 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ state = "working" -(* Transition 1 to State4 *) +(* Transition 3 to State4 *) State4 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 10] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3" }, - time |-> 6] + lastCommit |-> {"n2"}, + time |-> 11] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 12] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 3 - :> [Commits |-> { "n2", "n3" }, + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] + lastCommit |-> {"n3"}, + time |-> 6]] @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]] + time |-> 11]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -294,63 +294,63 @@ State4 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]], - now |-> 7, + time |-> 11]], + now |-> 1398, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n2", "n3" }, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]], - now |-> 7, + lastCommit |-> {"n3"}, + time |-> 6]], + now |-> 1399, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 7 +/\ now = 1400 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> { "n2", "n3" }, +/\ prevCurrent = [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] -/\ prevNow = 7 + lastCommit |-> {"n3"}, + time |-> 6]] +/\ prevNow = 1399 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -360,84 +360,84 @@ State4 == (* Transition 3 to State5 *) State5 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 10] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3" }, - time |-> 6] + lastCommit |-> {"n2"}, + time |-> 11] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 12] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] @@ 3 - :> [Commits |-> { "n2", "n3" }, + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] + lastCommit |-> {"n3"}, + time |-> 6]] @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]] + time |-> 11]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -446,85 +446,85 @@ State5 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]], - now |-> 7, + time |-> 11]], + now |-> 1398, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n2", "n3" }, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]], - now |-> 7, + lastCommit |-> {"n3"}, + time |-> 6]], + now |-> 1399, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]], - now |-> 7, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]], + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> {"n1"}, +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 4 -/\ now = 1402 +/\ now = 1405 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> {"n1"}, +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] -/\ prevNow = 7 + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] +/\ prevNow = 1400 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -534,84 +534,84 @@ State5 == (* Transition 1 to State6 *) State6 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 10] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3" }, - time |-> 6] + lastCommit |-> {"n2"}, + time |-> 11] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 12] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] @@ 3 - :> [Commits |-> { "n2", "n3" }, + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] + lastCommit |-> {"n3"}, + time |-> 6]] @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]] + time |-> 11]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -620,55 +620,55 @@ State6 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]], - now |-> 7, + time |-> 11]], + now |-> 1398, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n2", "n3" }, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]], - now |-> 7, + lastCommit |-> {"n3"}, + time |-> 6]], + now |-> 1399, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]], - now |-> 7, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]], + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -677,134 +677,134 @@ State6 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]], - now |-> 1402, + time |-> 11]], + now |-> 1405, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]]] -/\ latestVerified = [Commits |-> {"n1"}, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 1403 +/\ now = 1405 /\ nprobes = 4 /\ prevCurrent = [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]] -/\ prevNow = 1402 + time |-> 11]] +/\ prevNow = 1405 /\ prevVerdict = "NOT_ENOUGH_TRUST" -/\ prevVerified = [Commits |-> {"n1"}, +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] /\ state = "working" (* Transition 2 to State7 *) State7 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] @@ 3 - :> [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 10] @@ 4 - :> [NextVS |-> {"n4"}, - VS |-> {"n4"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, height |-> 4, - lastCommit |-> { "n2", "n3" }, - time |-> 6] + lastCommit |-> {"n2"}, + time |-> 11] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 5, - lastCommit |-> {"n4"}, - time |-> 7] + lastCommit |-> {"n3"}, + time |-> 12] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] @@ 3 - :> [Commits |-> { "n2", "n3" }, + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] + lastCommit |-> {"n3"}, + time |-> 6]] @@ 4 :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]] + time |-> 11]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -813,55 +813,55 @@ State7 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]], - now |-> 7, + time |-> 11]], + now |-> 1398, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n2", "n3" }, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]], - now |-> 7, + lastCommit |-> {"n3"}, + time |-> 6]], + now |-> 1399, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]], - now |-> 7, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]], + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -870,70 +870,70 @@ State7 == :> [current |-> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, + [NextVS |-> {"n3"}, VS |-> {"n4"}, height |-> 4, lastCommit |-> { "n2", "n3" }, - time |-> 6]], - now |-> 1402, + time |-> 11]], + now |-> 1405, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]]] @@ 5 :> [current |-> - [Commits |-> { "n2", "n3" }, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]], - now |-> 1403, + lastCommit |-> {"n3"}, + time |-> 6]], + now |-> 1405, verdict |-> "INVALID", verified |-> - [Commits |-> {"n1"}, + [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]]] -/\ latestVerified = [Commits |-> {"n1"}, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateFailed" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 1403 +/\ now = 1405 /\ nprobes = 5 -/\ prevCurrent = [Commits |-> { "n2", "n3" }, +/\ prevCurrent = [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n4"}, - VS |-> { "n2", "n3" }, + [NextVS |-> {"n1"}, + VS |-> {"n4"}, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] -/\ prevNow = 1403 + lastCommit |-> {"n3"}, + time |-> 6]] +/\ prevNow = 1405 /\ prevVerdict = "INVALID" -/\ prevVerified = [Commits |-> {"n1"}, +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3" }, - time |-> 3]] + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] /\ state = "finishedFailure" (* The following formula holds true in the last state and violates the invariant *) @@ -949,5 +949,5 @@ InvariantViolation == /\ history[s3$2]["verdict"] = "NOT_ENOUGH_TRUST")))))) ================================================================================ -\* Created by Apalache on Wed Oct 21 12:41:10 UTC 2020 +\* Created by Apalache on Fri Nov 06 10:12:47 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.tla index f20cfdc41..42a2f3913 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {} +/\ Faulty = {"n3"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3] @@ 3 :> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5] + lastCommit |-> { "n1", "n4" }, + time |-> 4] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n1"}, + time |-> 7] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n2", "n4" }, height |-> 5, lastCommit |-> {"n2"}, - time |-> 7] + time |-> 8] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,44 +52,44 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 8, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 7 +/\ now = 8 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 7 +/\ prevNow = 8 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,41 +99,41 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {} +/\ Faulty = {"n3"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3] @@ 3 :> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5] + lastCommit |-> { "n1", "n4" }, + time |-> 4] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n1"}, + time |-> 7] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n2", "n4" }, height |-> 5, lastCommit |-> {"n2"}, - time |-> 7] + time |-> 8] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -141,26 +141,26 @@ State3 == @@ 4 :> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n1"}, + time |-> 7]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 8, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -169,123 +169,123 @@ State3 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 7, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 7 +/\ now = 8 /\ nprobes = 1 /\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] -/\ prevNow = 7 + lastCommit |-> {"n1"}, + time |-> 7]] +/\ prevNow = 8 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ state = "working" -(* Transition 1 to State4 *) +(* Transition 3 to State4 *) State4 == -/\ Faulty = {} +/\ Faulty = {"n3"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3] @@ 3 :> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5] + lastCommit |-> { "n1", "n4" }, + time |-> 4] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n1"}, + time |-> 7] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n2", "n4" }, height |-> 5, lastCommit |-> {"n2"}, - time |-> 7] + time |-> 8] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] - @@ 3 - :> [Commits |-> { "n3", "n4" }, - header |-> - [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, - height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]] @@ 4 :> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n1"}, + time |-> 7]] + @@ 5 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 8, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -294,43 +294,43 @@ State4 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 7, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, - height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, time |-> 5]], - now |-> 7, + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -339,18 +339,18 @@ State4 == /\ nextHeight = 2 /\ now = 9 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> { "n3", "n4" }, +/\ prevCurrent = [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, - height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, time |-> 5]] -/\ prevNow = 7 +/\ prevNow = 8 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -360,84 +360,84 @@ State4 == (* Transition 3 to State5 *) State5 == -/\ Faulty = {} +/\ Faulty = {"n3"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3] @@ 3 :> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5] + lastCommit |-> { "n1", "n4" }, + time |-> 4] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n1"}, + time |-> 7] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n2", "n4" }, height |-> 5, lastCommit |-> {"n2"}, - time |-> 7] + time |-> 8] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]] - @@ 3 - :> [Commits |-> { "n3", "n4" }, - header |-> - [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, - height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]] @@ 4 :> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n1"}, + time |-> 7]] + @@ 5 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 8, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -446,85 +446,85 @@ State5 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 7, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, - height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, time |-> 5]], - now |-> 7, + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]], now |-> 9, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> { "n1", "n2", "n4" }, +/\ latestVerified = [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 4 -/\ now = 1402 +/\ now = 9 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> { "n1", "n2", "n4" }, +/\ prevCurrent = [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]] /\ prevNow = 9 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -534,84 +534,84 @@ State5 == (* Transition 1 to State6 *) State6 == -/\ Faulty = {} +/\ Faulty = {"n3"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3] @@ 3 :> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5] + lastCommit |-> { "n1", "n4" }, + time |-> 4] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n1"}, + time |-> 7] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n2", "n4" }, height |-> 5, lastCommit |-> {"n2"}, - time |-> 7] + time |-> 8] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]] - @@ 3 - :> [Commits |-> { "n3", "n4" }, - header |-> - [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, - height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]] @@ 4 :> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n1"}, + time |-> 7]] + @@ 5 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 8, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -620,55 +620,55 @@ State6 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 7, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, - height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, time |-> 5]], - now |-> 7, + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]], now |-> 9, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -677,134 +677,142 @@ State6 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 1402, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 9, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]]] -/\ latestVerified = [Commits |-> { "n1", "n2", "n4" }, +/\ latestVerified = [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 1402 +/\ now = 9 /\ nprobes = 4 /\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] -/\ prevNow = 1402 + lastCommit |-> {"n1"}, + time |-> 7]] +/\ prevNow = 9 /\ prevVerdict = "NOT_ENOUGH_TRUST" -/\ prevVerified = [Commits |-> { "n1", "n2", "n4" }, +/\ prevVerified = [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]] /\ state = "working" -(* Transition 0 to State7 *) +(* Transition 2 to State7 *) State7 == -/\ Faulty = {} +/\ Faulty = {"n3"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3] @@ 3 :> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5] + lastCommit |-> { "n1", "n4" }, + time |-> 4] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n1"}, + time |-> 7] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n2", "n4" }, height |-> 5, lastCommit |-> {"n2"}, - time |-> 7] + time |-> 8] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]] @@ 3 - :> [Commits |-> { "n3", "n4" }, + :> [Commits |-> {"n1"}, header |-> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]] + lastCommit |-> { "n1", "n4" }, + time |-> 4]] @@ 4 :> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n1"}, + time |-> 7]] + @@ 5 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 8, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -813,55 +821,55 @@ State7 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 7, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, - height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, time |-> 5]], - now |-> 7, + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]], now |-> 9, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -870,153 +878,161 @@ State7 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 1402, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 9, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]]] @@ 5 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n1"}, header |-> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]], - now |-> 1402, + lastCommit |-> { "n1", "n4" }, + time |-> 4]], + now |-> 9, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]]] -/\ latestVerified = [Commits |-> { "n3", "n4" }, +/\ latestVerified = [Commits |-> {"n1"}, header |-> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]] + lastCommit |-> { "n1", "n4" }, + time |-> 4]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 4 -/\ now = 1404 +/\ now = 1403 /\ nprobes = 5 -/\ prevCurrent = [Commits |-> { "n3", "n4" }, +/\ prevCurrent = [Commits |-> {"n1"}, header |-> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]] -/\ prevNow = 1402 + lastCommit |-> { "n1", "n4" }, + time |-> 4]] +/\ prevNow = 9 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> { "n1", "n2", "n4" }, +/\ prevVerified = [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]] /\ state = "working" (* Transition 0 to State8 *) State8 == -/\ Faulty = {} +/\ Faulty = {"n3"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3] @@ 3 :> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5] + lastCommit |-> { "n1", "n4" }, + time |-> 4] @@ 4 - :> [NextVS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6] + lastCommit |-> {"n1"}, + time |-> 7] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> { "n1", "n2", "n4" }, height |-> 5, lastCommit |-> {"n2"}, - time |-> 7] + time |-> 8] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2", "n4" }, + :> [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]] @@ 3 - :> [Commits |-> { "n3", "n4" }, + :> [Commits |-> {"n1"}, header |-> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]] + lastCommit |-> { "n1", "n4" }, + time |-> 4]] @@ 4 :> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n1"}, + time |-> 7]] + @@ 5 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 8, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -1025,55 +1041,55 @@ State8 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 7, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n3"}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, - height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n3"}, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, time |-> 5]], - now |-> 7, + now |-> 8, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]], now |-> 9, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n4" }, + [NextVS |-> { "n1", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -1082,89 +1098,89 @@ State8 == :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 1402, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 9, verdict |-> "NOT_ENOUGH_TRUST", verified |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]]] @@ 5 :> [current |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n1"}, header |-> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]], - now |-> 1402, + lastCommit |-> { "n1", "n4" }, + time |-> 4]], + now |-> 9, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n2", "n4" }, + [Commits |-> { "n1", "n4" }, header |-> - [NextVS |-> { "n3", "n4" }, - VS |-> { "n1", "n2", "n4" }, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 3]]] @@ 6 :> [current |-> [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]], - now |-> 1404, + lastCommit |-> {"n1"}, + time |-> 7]], + now |-> 1403, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n3", "n4" }, + [Commits |-> {"n1"}, header |-> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]]] + lastCommit |-> { "n1", "n4" }, + time |-> 4]]] /\ latestVerified = [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] + lastCommit |-> {"n1"}, + time |-> 7]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateVerified" @@ 4 :> "StateVerified" /\ nextHeight = 4 -/\ now = 1404 +/\ now = 1403 /\ nprobes = 6 /\ prevCurrent = [Commits |-> {"n2"}, header |-> - [NextVS |-> {"n3"}, + [NextVS |-> { "n1", "n2", "n4" }, VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n3", "n4" }, - time |-> 6]] -/\ prevNow = 1404 + lastCommit |-> {"n1"}, + time |-> 7]] +/\ prevNow = 1403 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> { "n3", "n4" }, +/\ prevVerified = [Commits |-> {"n1"}, header |-> [NextVS |-> {"n2"}, - VS |-> { "n3", "n4" }, + VS |-> {"n1"}, height |-> 3, - lastCommit |-> { "n1", "n2", "n4" }, - time |-> 5]] + lastCommit |-> { "n1", "n4" }, + time |-> 4]] /\ state = "finishedSuccess" (* The following formula holds true in the last state and violates the invariant *) @@ -1180,5 +1196,5 @@ InvariantViolation == /\ history[s3$2]["verdict"] = "NOT_ENOUGH_TRUST")))))) ================================================================================ -\* Created by Apalache on Wed Oct 21 12:40:39 UTC 2020 +\* Created by Apalache on Fri Nov 06 10:12:07 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitEmptyValset.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitEmptyValset.json new file mode 100644 index 000000000..dfa2c0155 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitEmptyValset.json @@ -0,0 +1,227 @@ +{ + "description": "MC4_4_faulty_TestEmptyCommitEmptyValset.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "658DEEC010B33EDB1977FA7B38087A8C547D65272F6A63854959E517AAD20597", + "part_set_header": { + "total": 1, + "hash": "658DEEC010B33EDB1977FA7B38087A8C547D65272F6A63854959E517AAD20597" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gUvww0D+bCNnq0wY4GvDkWAUQO3kbi9YvmoRBAC3goRZ6mW8Fh6V9hrMQYbpRpf7LZqFAdnleFgXnnEuKz17Bg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "54nTri+VJoBu8HCTb+c92aYrPiMSM71qVDkdRtwmE40LWPUFkTJNTqTLXbBXutQ1p5s6PyuB+p4UfWAwYCuUCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PWesm77j/+sQh1p00pDJv3R3B9tpe1HlfhaTS2be/5FZfq3EMH3ceplTSNGsQKo0p4f8N9UUq+TYwm+3dsZeBg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ngAHu3FpNX6aW4B7xmFd7ckNScOM+lfuCQuMDs7uq20UoNnnGasFOcFMXD+0dQnRndEu1RItr+0kgxKaD6OtAQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:13:13.160465759Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "consensus_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "730D3D6B2E9F4F0F23879458F2D02E0004F0F241" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "F7A3F03293C92F4448841CA99690124CD8FEAE761BFFED636DBC9956D16D2FB9", + "part_set_header": { + "total": 1, + "hash": "F7A3F03293C92F4448841CA99690124CD8FEAE761BFFED636DBC9956D16D2FB9" + } + }, + "signatures": [] + } + }, + "validator_set": { + "validators": [] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 2, + "proposer": null + }, + "votes": [], + "round": null + }, + "validators": [], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitEmptyValset.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitEmptyValset.tla new file mode 100644 index 000000000..03ffb2adf --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitEmptyValset.tla @@ -0,0 +1,234 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {}, + height |-> 4, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {}, + height |-> 4, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]], + now |-> 1400, + verdict |-> "INVALID", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateFailed" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {}, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> {}, + height |-> 4, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["current"]["Commits"] = {} <: {STRING} + /\ history[s$2]["current"]["header"]["VS"] = {} <: {STRING} + /\ ~(history[s$2]["current"]["header"] + = history[s$2]["verified"]["header"]) + /\ history[s$2]["current"]["header"]["height"] + > history[s$2]["verified"]["header"]["height"] + /\ history[s$2]["current"]["header"]["time"] + > history[s$2]["verified"]["header"]["time"] + /\ history[s$2]["current"]["header"]["time"] < history[s$2]["now"] + /\ history[s$2]["verified"]["header"]["time"] + 1400 + > history[s$2]["now"])) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:13:13 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitNonEmptyValset.json similarity index 58% rename from light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.json rename to light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitNonEmptyValset.json index 4b239ca95..82334182c 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitNonEmptyValset.json @@ -1,5 +1,5 @@ { - "description": "MC4_4_faulty_TestHeaderFromFuture.json", + "description": "MC4_4_faulty_TestEmptyCommitNonEmptyValset.json", "initial": { "signed_header": { "header": { @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D", + "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57", "part_set_header": { "total": 1, - "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D" + "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "8rGIxi7DjBLFlHUo/lAgTpmzsnTZ8HOgnQaIoe+HEM5AmrjBaVDWVMb5/nNAnJTj4hcReCh4jviXcyRkItFJCA==" + "signature": "FKIpE4jILZ3tmeBUFmaT48nAxIBsAIRcnQ6dBdqHV6Xjhd2Bex94Yaqgg7Lv5NL1HACt5qH60qVRiEsv5oJwAA==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "3cXnzhzJLKeF47ulcIWjgqsv9JBf9olbAo0mcjo7Ij6TfmCpJO6SmTiacBkiznsFSOc1ZSH+cHDBKA4AT7ozAg==" + "signature": "uuvlEKa9M4a+VtHoE2Racjm2Tzb41Hf/TH35lP158juWjHEgg2k1MnthMhcFaBxdeCucQulrAwUGd99/L4+uCg==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "4O8c5hxoHR861ldolxeY9W1iXCdxYJVIf0xD3+sANSxo0ipXayv8IS7YFw1zzZvDbjRRazVzbfyBYf2jl4JeDw==" + "signature": "Lolcqh4BLNDC4KTdmaB1bCXA0KjCKB8Rk73qvfL1oojxIIuA1l6WBES9iDPdoEe2QwPwOMtwbGj/A1NwJnvgAw==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "2Hel7uygQXpjYRJZiwtPLKNxT2Tg1/F5Zzs3VZpleFII9H1e5Gs02UjU0lybSXBKk/tD+NXPsdchrH/6/DmwAQ==" + "signature": "NYxAvpFkpNWI9VLFcqdJyOT1KMMD2ZYCKLV4h0yuU+DkoyYmJnJv0dPtUXwalVHw0LT9K1Ad6f7rI3AfLTEuAw==" } ] } @@ -78,29 +78,11 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null } ] }, "trusting_period": "1400000000000", - "now": "2020-10-21T12:41:40.160328410Z" + "now": "2020-11-06T10:13:28.160465760Z" }, "input": [ { @@ -113,41 +95,29 @@ }, "chain_id": "test-chain", "height": "4", - "time": "1970-01-01T00:23:22Z", + "time": "1970-01-01T00:00:02Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", - "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "consensus_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "6900FC8655050D51838C6EF0D794EC8AE26848192D3CE0B1E45FAFA374777B5D", + "hash": "FDF2ACA0A478D4C20E52A1C11F86EBCB421B94C6288827CFED14AA6F01525EC7", "part_set_header": { "total": 1, - "hash": "6900FC8655050D51838C6EF0D794EC8AE26848192D3CE0B1E45FAFA374777B5D" + "hash": "FDF2ACA0A478D4C20E52A1C11F86EBCB421B94C6288827CFED14AA6F01525EC7" } }, "signatures": [ - { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null - }, - { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null - }, { "block_id_flag": 1, "validator_address": null, @@ -160,19 +130,23 @@ "validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null - }, + } + ] + }, + "next_validator_set": { + "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null @@ -188,22 +162,85 @@ } ] }, - "next_validator_set": { + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", + "id": "n3", + "voting_power": 50, "proposer_priority": null } - ] + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 2, + "proposer": null }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 2, + "proposer": null + }, + "votes": [], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null }, - "now": "1970-01-01T00:23:21Z", + "now": "1970-01-01T00:23:20Z", "verdict": "INVALID" } ] diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitNonEmptyValset.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitNonEmptyValset.tla new file mode 100644 index 000000000..e3ec14449 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestEmptyCommitNonEmptyValset.tla @@ -0,0 +1,234 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {"n3"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n1", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = {"n3"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n1", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> {}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]], + now |-> 1400, + verdict |-> "INVALID", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateFailed" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["current"]["Commits"] = {} <: {STRING} + /\ ~(history[s$2]["current"]["header"]["VS"] = {} <: {STRING}) + /\ ~(history[s$2]["current"]["header"] + = history[s$2]["verified"]["header"]) + /\ history[s$2]["current"]["header"]["height"] + > history[s$2]["verified"]["header"]["height"] + /\ history[s$2]["current"]["header"]["time"] + > history[s$2]["verified"]["header"]["time"] + /\ history[s$2]["current"]["header"]["time"] < history[s$2]["now"] + /\ history[s$2]["verified"]["header"]["time"] + 1400 + > history[s$2]["now"])) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:13:27 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.json deleted file mode 100644 index a5be755e1..000000000 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.json +++ /dev/null @@ -1,364 +0,0 @@ -{ - "description": "MC4_4_faulty_TestFailure.json", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "1", - "time": "1970-01-01T00:00:01Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", - "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57", - "part_set_header": { - "total": 1, - "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:01Z", - "signature": "FKIpE4jILZ3tmeBUFmaT48nAxIBsAIRcnQ6dBdqHV6Xjhd2Bex94Yaqgg7Lv5NL1HACt5qH60qVRiEsv5oJwAA==" - }, - { - "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:01Z", - "signature": "uuvlEKa9M4a+VtHoE2Racjm2Tzb41Hf/TH35lP158juWjHEgg2k1MnthMhcFaBxdeCucQulrAwUGd99/L4+uCg==" - }, - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:01Z", - "signature": "Lolcqh4BLNDC4KTdmaB1bCXA0KjCKB8Rk73qvfL1oojxIIuA1l6WBES9iDPdoEe2QwPwOMtwbGj/A1NwJnvgAw==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:01Z", - "signature": "NYxAvpFkpNWI9VLFcqdJyOT1KMMD2ZYCKLV4h0yuU+DkoyYmJnJv0dPtUXwalVHw0LT9K1Ad6f7rI3AfLTEuAw==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "trusting_period": "1400000000000", - "now": "2020-10-21T12:39:30.160328397Z" - }, - "input": [ - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "4", - "time": "1970-01-01T00:00:04Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "next_validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", - "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" - }, - "commit": { - "height": "4", - "round": 1, - "block_id": { - "hash": "08CF8679B65FAC86B55F59D82020B505AF30926AAFED64DA06846277867A84E5", - "part_set_header": { - "total": 1, - "hash": "08CF8679B65FAC86B55F59D82020B505AF30926AAFED64DA06846277867A84E5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "BT4H3HK9r85P40ZUFUnAjm5kNi6aB3vekISMJbuekdBeNEHbb77vwWfHmQ9DRzduQ8tkkKES+ArfYVYpVyu1AQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:00:05Z", - "verdict": "NOT_ENOUGH_TRUST" - }, - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "3", - "time": "1970-01-01T00:00:03Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "next_validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" - }, - "commit": { - "height": "3", - "round": 1, - "block_id": { - "hash": "FE6B075A3E5DE31475E3B4B42F2734E65F612B05846FE4C3309BA7BFFB736FE5", - "part_set_header": { - "total": 1, - "hash": "FE6B075A3E5DE31475E3B4B42F2734E65F612B05846FE4C3309BA7BFFB736FE5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "Fg9f8bx660if/hhzf8LONx+W9nnYyMDkCb6DSG4V86XayN/SL6lwH2pLmMy5+t2LGoPR3ojm5Ht449rQKXByDA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:00:05Z", - "verdict": "NOT_ENOUGH_TRUST" - }, - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "2", - "time": "1970-01-01T00:00:02Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", - "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "consensus_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "569551C9F317FF7CC95F7F79A7A16F7ABE3666C1546556D5D012F50F791727E6", - "part_set_header": { - "total": 1, - "hash": "569551C9F317FF7CC95F7F79A7A16F7ABE3666C1546556D5D012F50F791727E6" - } - }, - "signatures": [ - { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null - }, - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "sp8jP6xc3rg6J+OylAN8hlsisfw0cjWsVEsPNWog9LaxJq2M0cWzJKN7cAVbL+ZKU/myLo0iu7DTgnyeZYVyDA==" - }, - { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:23:22Z", - "verdict": "INVALID" - } - ] -} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.tla index 5f196a0af..707b4dbf7 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestFailure.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {"n2"} +/\ Faulty = {"n1"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n4" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> {"n2"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n4" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] @@ 4 - :> [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> {"n2"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4] + lastCommit |-> {"n3"}, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + VS |-> {"n2"}, height |-> 5, - lastCommit |-> {"n3"}, - time |-> 5] + lastCommit |-> {"n2"}, + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,44 +52,44 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 5, + now |-> 1392, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 5 +/\ now = 1392 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 5 +/\ prevNow = 1392 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,254 +99,254 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {"n2"} +/\ Faulty = {"n1"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n4" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> {"n2"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n4" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] @@ 4 - :> [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> {"n2"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4] + lastCommit |-> {"n3"}, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + VS |-> {"n2"}, height |-> 5, - lastCommit |-> {"n3"}, - time |-> 5] + lastCommit |-> {"n2"}, + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] - @@ 4 - :> [Commits |-> {"n3"}, + @@ 3 + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4]] + [NextVS |-> {}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {}, + time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 5, + now |-> 1392, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4]], - now |-> 5, + [NextVS |-> {}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {}, + time |-> 6]], + now |-> 1392, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" -/\ nextHeight = 3 -/\ now = 5 +/\ nextHeight = 2 +/\ now = 1392 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> {"n3"}, +/\ prevCurrent = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4]] -/\ prevNow = 5 + [NextVS |-> {}, VS |-> {"n1"}, height |-> 3, lastCommit |-> {}, time |-> 6]] +/\ prevNow = 1392 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ state = "working" -(* Transition 1 to State4 *) +(* Transition 2 to State4 *) State4 == -/\ Faulty = {"n2"} +/\ Faulty = {"n1"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n4" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> {"n2"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n4" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] @@ 4 - :> [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> {"n2"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4] + lastCommit |-> {"n3"}, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + VS |-> {"n2"}, height |-> 5, - lastCommit |-> {"n3"}, - time |-> 5] + lastCommit |-> {"n2"}, + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n2", "n4" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3]] @@ 3 - :> [Commits |-> {"n2"}, + :> [Commits |-> {"n1"}, header |-> [NextVS |-> {}, - VS |-> {"n2"}, + VS |-> {"n1"}, height |-> 3, lastCommit |-> {}, - time |-> 3]] - @@ 4 - :> [Commits |-> {"n3"}, - header |-> - [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4]] + time |-> 6]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 5, + now |-> 1392, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4]], - now |-> 5, + [NextVS |-> {}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {}, + time |-> 6]], + now |-> 1392, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {}, - VS |-> {"n2"}, - height |-> 3, - lastCommit |-> {}, + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 3]], - now |-> 5, - verdict |-> "NOT_ENOUGH_TRUST", + now |-> 1392, + verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, +/\ latestVerified = [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> {"n3"}, VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1]] -/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" -/\ nextHeight = 2 -/\ now = 1402 + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 1392 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> {"n2"}, +/\ prevCurrent = [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {}, VS |-> {"n2"}, height |-> 3, lastCommit |-> {}, time |-> 3]] -/\ prevNow = 5 -/\ prevVerdict = "NOT_ENOUGH_TRUST" + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3]] +/\ prevNow = 1392 +/\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -356,175 +356,172 @@ State4 == (* Transition 5 to State5 *) State5 == -/\ Faulty = {"n2"} +/\ Faulty = {"n1"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n4" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n3" }, - VS |-> { "n1", "n4" }, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 2] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> {"n2"}, + VS |-> {"n3"}, height |-> 3, - lastCommit |-> { "n1", "n4" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] @@ 4 - :> [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, + :> [NextVS |-> {"n2"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4] + lastCommit |-> {"n3"}, + time |-> 6] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3", "n4" }, + VS |-> {"n2"}, height |-> 5, - lastCommit |-> {"n3"}, - time |-> 5] + lastCommit |-> {"n2"}, + time |-> 7] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n2"}, + :> [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3" }, + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3]] @@ 3 - :> [Commits |-> {"n2"}, + :> [Commits |-> {"n1"}, header |-> [NextVS |-> {}, - VS |-> {"n2"}, + VS |-> {"n1"}, height |-> 3, lastCommit |-> {}, - time |-> 3]] + time |-> 6]] @@ 4 - :> [Commits |-> {"n3"}, + :> [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, + [NextVS |-> {"n4"}, + VS |-> {}, height |-> 4, - lastCommit |-> { "n1", "n3" }, + lastCommit |-> { "n3", "n4" }, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 5, + now |-> 1392, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n3", "n4" }, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> { "n1", "n3" }, - time |-> 4]], - now |-> 5, + [NextVS |-> {}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {}, + time |-> 6]], + now |-> 1392, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> {}, - VS |-> {"n2"}, - height |-> 3, - lastCommit |-> {}, + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 3]], - now |-> 5, - verdict |-> "NOT_ENOUGH_TRUST", + now |-> 1392, + verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> { "n1", "n2", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n2"}, + [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3" }, - height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]], - now |-> 1402, + [NextVS |-> {"n4"}, + VS |-> {}, + height |-> 4, + lastCommit |-> { "n3", "n4" }, + time |-> 4]], + now |-> 1392, verdict |-> "INVALID", verified |-> - [Commits |-> { "n1", "n2", "n3", "n4" }, + [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> {"n3"}, VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1]]] -/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> {"n3"}, VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1]] -/\ lightBlockStatus = 1 :> "StateVerified" - @@ 2 :> "StateFailed" - @@ 3 :> "StateUnverified" - @@ 4 :> "StateUnverified" -/\ nextHeight = 2 -/\ now = 1402 + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateFailed" +/\ nextHeight = 4 +/\ now = 1392 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> {"n2"}, +/\ prevCurrent = [Commits |-> {"n1"}, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n3" }, - height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 2]] -/\ prevNow = 1402 + [NextVS |-> {"n4"}, + VS |-> {}, + height |-> 4, + lastCommit |-> { "n3", "n4" }, + time |-> 4]] +/\ prevNow = 1392 /\ prevVerdict = "INVALID" -/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, +/\ prevVerified = [Commits |-> { "n1", "n2", "n4" }, header |-> - [NextVS |-> { "n1", "n4" }, + [NextVS |-> {"n3"}, VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1]] + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 3]] /\ state = "finishedFailure" (* The following formula holds true in the last state and violates the invariant *) @@ -533,5 +530,5 @@ InvariantViolation == state = "finishedFailure" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 4 ================================================================================ -\* Created by Apalache on Wed Oct 21 12:39:29 UTC 2020 +\* Created by Apalache on Fri Nov 06 10:10:21 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChanges.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChanges.json new file mode 100644 index 000000000..f156357cb --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChanges.json @@ -0,0 +1,724 @@ +{ + "description": "MC4_4_faulty_TestHalfValsetChanges.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57", + "part_set_header": { + "total": 1, + "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FKIpE4jILZ3tmeBUFmaT48nAxIBsAIRcnQ6dBdqHV6Xjhd2Bex94Yaqgg7Lv5NL1HACt5qH60qVRiEsv5oJwAA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "uuvlEKa9M4a+VtHoE2Racjm2Tzb41Hf/TH35lP158juWjHEgg2k1MnthMhcFaBxdeCucQulrAwUGd99/L4+uCg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Lolcqh4BLNDC4KTdmaB1bCXA0KjCKB8Rk73qvfL1oojxIIuA1l6WBES9iDPdoEe2QwPwOMtwbGj/A1NwJnvgAw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NYxAvpFkpNWI9VLFcqdJyOT1KMMD2ZYCKLV4h0yuU+DkoyYmJnJv0dPtUXwalVHw0LT9K1Ad6f7rI3AfLTEuAw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:18:05.160465788Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:06Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "CCCBFC4C7C9017F8DFE0FB0903704FA975CAB7C121DF2E950629E9647B656B50", + "part_set_header": { + "total": 1, + "hash": "CCCBFC4C7C9017F8DFE0FB0903704FA975CAB7C121DF2E950629E9647B656B50" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:06Z", + "signature": "DRutxkMQj0eN2uYVp8c1Ds6O6x8qRvYrFE7pGFsAohOmXQVCK+CH/KBks48+WyYRk4yzbUSLErmXwv2brFBkCA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 6, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 6, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 6, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:07Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "D70F82B959507903B1FABC5F4C6700C4BBF91F3F2E9B7548604B73C9BF6EC4EF", + "part_set_header": { + "total": 1, + "hash": "D70F82B959507903B1FABC5F4C6700C4BBF91F3F2E9B7548604B73C9BF6EC4EF" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "DYTkW0fNS9bLHV6zAuiA3Lr0ffBtOi+Cc27+N+AF0SkTWH02sBOh2Lqd2MjOSMZu7UVQEHnTjqwfJwV6Yam3Bw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "zwfBG01I5oDW+EeOxglFJxc3R6wGez2TMNB+TI11BtK17vQHfLKfSNneYt4Oi9Wz1N4KGzvX5L+xcV8f6hYeBw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:05Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "14BA30B91F036EE11C7BA750C7328BDC384A55414B70EC51735AE71AED2FE225", + "part_set_header": { + "total": 1, + "hash": "14BA30B91F036EE11C7BA750C7328BDC384A55414B70EC51735AE71AED2FE225" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "DRBlzZQE929VxS2zcOHIbxAoFAwHZ3S+t67EZVs4HvnsPzftbdZ6DW/I829w5FIlq4iQ+ajzSezWAI+F/9AWCQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:23Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChanges.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChanges.tla new file mode 100644 index 000000000..8f501f2f2 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChanges.tla @@ -0,0 +1,556 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4] + @@ 3 + :> [NextVS |-> {"n2"}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 5] + @@ 4 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 5, + lastCommit |-> {"n2"}, + time |-> 7] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 7, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 7 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 7 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4] + @@ 3 + :> [NextVS |-> {"n2"}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 5] + @@ 4 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 5, + lastCommit |-> {"n2"}, + time |-> 7] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 7, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6]], + now |-> 7, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6]] +/\ prevNow = 7 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 2 to State4 *) + +State4 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4] + @@ 3 + :> [NextVS |-> {"n2"}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 5] + @@ 4 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 5, + lastCommit |-> {"n2"}, + time |-> 7] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]] + @@ 4 + :> [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 7, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6]], + now |-> 7, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1403 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State5 *) + +State5 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4] + @@ 3 + :> [NextVS |-> {"n2"}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 5] + @@ 4 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 5, + lastCommit |-> {"n2"}, + time |-> 7] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]] + @@ 3 + :> [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 5]] + @@ 4 + :> [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 7, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 6]], + now |-> 7, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 5]], + now |-> 1403, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]]] +/\ latestVerified = [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 5]] +/\ lightBlockStatus = 1 :> "StateVerified" + @@ 2 :> "StateVerified" + @@ 3 :> "StateVerified" + @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 1403 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> { "n1", "n4" }, + time |-> 5]] +/\ prevNow = 1403 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 3)) + /\ 2 + * Cardinality({ + t_2s$1 \in history[s1$2]["current"]["header"]["VS"]: + t_2s$1 \in history[s2$2]["current"]["header"]["VS"] + }) + < Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:18:04 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json new file mode 100644 index 000000000..bb03b634e --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json @@ -0,0 +1,679 @@ +{ + "description": "MC4_4_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D", + "part_set_header": { + "total": 1, + "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8rGIxi7DjBLFlHUo/lAgTpmzsnTZ8HOgnQaIoe+HEM5AmrjBaVDWVMb5/nNAnJTj4hcReCh4jviXcyRkItFJCA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "3cXnzhzJLKeF47ulcIWjgqsv9JBf9olbAo0mcjo7Ij6TfmCpJO6SmTiacBkiznsFSOc1ZSH+cHDBKA4AT7ozAg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4O8c5hxoHR861ldolxeY9W1iXCdxYJVIf0xD3+sANSxo0ipXayv8IS7YFw1zzZvDbjRRazVzbfyBYf2jl4JeDw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2Hel7uygQXpjYRJZiwtPLKNxT2Tg1/F5Zzs3VZpleFII9H1e5Gs02UjU0lybSXBKk/tD+NXPsdchrH/6/DmwAQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:18:43.160465792Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "5", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "5", + "round": 1, + "block_id": { + "hash": "2CEA90EC5CE751204D88C65E0E1E5DF90F20308F521A76800BCBFFDF074BE01F", + "part_set_header": { + "total": 1, + "hash": "2CEA90EC5CE751204D88C65E0E1E5DF90F20308F521A76800BCBFFDF074BE01F" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "HkgnYoN1lpLBXGS8IXh0/rXKLtG+v52geH4QFXdUDolNkGJp69Tqz0L5pqgOoi7wCyyvWUSNYJW06zEUrJtTBw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 5, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 5, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 5, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "provider": null + }, + "now": "1970-01-01T00:23:15Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "F97F96C4664E255C0700E695E0FE9DE98CB6B5D08A4A9C847DC588F2B3648B7B", + "part_set_header": { + "total": 1, + "hash": "F97F96C4664E255C0700E695E0FE9DE98CB6B5D08A4A9C847DC588F2B3648B7B" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "4IELOBj6bleJ+ZKCpT/gqMFaOa/xZ5N+LXNnxB4aNF2AQ7/ufgFKYbJoe/hd7TnmhqIEMda58VBc3rq+ekmICg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "7cYn/WMyJ8jpgswWprpwN59c5FhnWZlxwD/dYeHn8cxyi0CY+I52S+4AJAZsOyiVPusKFsHnerDRUN2CXEFjDg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:16Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "8E93C6D1C1DC58A3DFE0C6E49387F9C2CDFC6DA5B832C3876435D89335240BEF", + "part_set_header": { + "total": 1, + "hash": "8E93C6D1C1DC58A3DFE0C6E49387F9C2CDFC6DA5B832C3876435D89335240BEF" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "ZsziOUtstnpCkCD26lVleBcpZgwkU8kUe9YBvtix/CNl94E94ZDz2i0LU1IRpvJLzkHxpGgRoUm5d1xYd1PQBg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:17Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.tla new file mode 100644 index 000000000..56872e48a --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictNotEnoughTrust.tla @@ -0,0 +1,554 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, + height |-> 4, + lastCommit |-> { "n1", "n3" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, + height |-> 5, + lastCommit |-> {"n1"}, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1395, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1395 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1395 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, + height |-> 4, + lastCommit |-> { "n1", "n3" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, + height |-> 5, + lastCommit |-> {"n1"}, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 5 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> {}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1395, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> {}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], + now |-> 1395, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1396 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {"n4"}, + header |-> + [NextVS |-> {}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] +/\ prevNow = 1395 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 2 to State4 *) + +State4 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, + height |-> 4, + lastCommit |-> { "n1", "n3" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, + height |-> 5, + lastCommit |-> {"n1"}, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] + @@ 5 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> {}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1395, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> {}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], + now |-> 1395, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]], + now |-> 1396, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 1397 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] +/\ prevNow = 1396 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State5 *) + +State5 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3] + @@ 4 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, + height |-> 4, + lastCommit |-> { "n1", "n3" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, + height |-> 5, + lastCommit |-> {"n1"}, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] + @@ 4 + :> [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, + height |-> 4, + lastCommit |-> { "n1", "n3" }, + time |-> 4]] + @@ 5 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> {}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1395, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> {}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 3]], + now |-> 1395, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]], + now |-> 1396, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, + height |-> 4, + lastCommit |-> { "n1", "n3" }, + time |-> 4]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]]] +/\ latestVerified = [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, + height |-> 4, + lastCommit |-> { "n1", "n3" }, + time |-> 4]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateVerified" @@ 4 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1397 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n1"}, + height |-> 4, + lastCommit |-> { "n1", "n3" }, + time |-> 4]] +/\ prevNow = 1397 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n3" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] +/\ state = "finishedSuccess" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ history[s2$2]["verdict"] = "NOT_ENOUGH_TRUST" + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 3)) + /\ 2 + * Cardinality({ + t_2s$1 \in history[s1$2]["current"]["header"]["VS"]: + t_2s$1 \in history[s2$2]["current"]["header"]["VS"] + }) + < Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:18:43 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictSuccess.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictSuccess.json new file mode 100644 index 000000000..872209c36 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictSuccess.json @@ -0,0 +1,872 @@ +{ + "description": "MC4_4_faulty_TestHalfValsetChangesVerdictSuccess.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "658DEEC010B33EDB1977FA7B38087A8C547D65272F6A63854959E517AAD20597", + "part_set_header": { + "total": 1, + "hash": "658DEEC010B33EDB1977FA7B38087A8C547D65272F6A63854959E517AAD20597" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gUvww0D+bCNnq0wY4GvDkWAUQO3kbi9YvmoRBAC3goRZ6mW8Fh6V9hrMQYbpRpf7LZqFAdnleFgXnnEuKz17Bg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "54nTri+VJoBu8HCTb+c92aYrPiMSM71qVDkdRtwmE40LWPUFkTJNTqTLXbBXutQ1p5s6PyuB+p4UfWAwYCuUCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PWesm77j/+sQh1p00pDJv3R3B9tpe1HlfhaTS2be/5FZfq3EMH3ceplTSNGsQKo0p4f8N9UUq+TYwm+3dsZeBg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ngAHu3FpNX6aW4B7xmFd7ckNScOM+lfuCQuMDs7uq20UoNnnGasFOcFMXD+0dQnRndEu1RItr+0kgxKaD6OtAQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:18:24.160465790Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "A9AD3A4686D5715B45FA396B119DA6475E9D3B1E0E96AEDEDDEE11BADE77E758", + "part_set_header": { + "total": 1, + "hash": "A9AD3A4686D5715B45FA396B119DA6475E9D3B1E0E96AEDEDDEE11BADE77E758" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "/2+qvXBpck+/elQ6jhF9fE4Z6Z8yeQnqF3C3P+tQXxDdRQ4pB3eukSMci88VgTcYM0WjX3VT+0YyLIk42mZ4Cg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "xcrOnihwKESeTf1JIabo+FeguvcWZT8RSUGlM09E+kX3Sg1IqCRzuS6SYY80WyOD1pz+PR38SFGxUFqufiJlDg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "BoSFwwMJYa23M+PSzh+56BA0e2w6FaJPvnFywSP3DydwCps9h7RvWadd5q8zmOxWu159LaG18faz3QDNzk1cDg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:19Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "FC39AEAA36E13E57C58548B78771108C1A835BAF6B43E1D8BD9BAED4AC3AF7E6", + "part_set_header": { + "total": 1, + "hash": "FC39AEAA36E13E57C58548B78771108C1A835BAF6B43E1D8BD9BAED4AC3AF7E6" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "N3kF/+Ca4oaQx/wLGd7yKakY9vT77EG2meaRVpjCrsZELLL/NpUx9A9FJXjMgPkWv4oCwYXUMYGh1f9S7to7Bw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "2A4496134C5FF1E2C24BAEE18A3F5B16DCE2F2F05437A838C35A22A7A7940053", + "part_set_header": { + "total": 1, + "hash": "2A4496134C5FF1E2C24BAEE18A3F5B16DCE2F2F05437A838C35A22A7A7940053" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "iIsSlrbh8LUEmjeT+WFoExxn0/r4EEOu3J2mt2eYnBWAp/38Z2BHvel0eJeUMX68y2rd9mgeiK+LaeR58DJwAw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:21Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictSuccess.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictSuccess.tla new file mode 100644 index 000000000..719544c06 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHalfValsetChangesVerdictSuccess.tla @@ -0,0 +1,557 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {"n3"} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1399 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1399 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {"n3"} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4]] +/\ prevNow = 1399 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 2 to State4 *) + +State4 == +/\ Faulty = {"n3"} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] + @@ 4 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1401 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State5 *) + +State5 == +/\ Faulty = {"n3"} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] + @@ 3 + :> [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3]] + @@ 4 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> {"n1"}, + time |-> 4]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3]], + now |-> 1401, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]]] +/\ latestVerified = [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3]] +/\ lightBlockStatus = 1 :> "StateVerified" + @@ 2 :> "StateVerified" + @@ 3 :> "StateVerified" + @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 1401 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3]] +/\ prevNow = 1401 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n1"}, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ history[s2$2]["verdict"] = "SUCCESS" + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 3)) + /\ 2 + * Cardinality({ + t_2s$1 \in history[s1$2]["current"]["header"]["VS"]: + t_2s$1 \in history[s2$2]["current"]["header"]["VS"] + }) + < Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:18:23 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.tla index ff398ff2d..79b2f029d 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderFromFuture.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {} +/\ Faulty = {"n1"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n2", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, lastCommit |-> { "n2", "n3", "n4" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3" }, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n1"}, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,44 +52,44 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1401, + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 1401 +/\ now = 1400 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 1401 +/\ prevNow = 1400 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,68 +99,68 @@ State2 == (* Transition 5 to State3 *) State3 == -/\ Faulty = {} +/\ Faulty = {"n1"} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 2] @@ 3 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n2", "n3", "n4" }, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n2", "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n3", "n4" }, + lastCommit |-> { "n2", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n2", "n3" }, - VS |-> {"n1"}, + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, lastCommit |-> { "n2", "n3", "n4" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3" }, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> {"n1"}, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] - @@ 4 + @@ 3 :> [Commits |-> {}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, - height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 1402]] + [NextVS |-> {"n4"}, + VS |-> {}, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 1401]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1401, + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -169,44 +169,44 @@ State3 == :> [current |-> [Commits |-> {}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, - height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 1402]], - now |-> 1401, + [NextVS |-> {"n4"}, + VS |-> {}, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 1401]], + now |-> 1400, verdict |-> "INVALID", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateFailed" /\ nextHeight = 4 -/\ now = 1401 +/\ now = 1400 /\ nprobes = 1 /\ prevCurrent = [Commits |-> {}, header |-> - [NextVS |-> {"n2"}, - VS |-> { "n1", "n3", "n4" }, - height |-> 4, - lastCommit |-> { "n1", "n2", "n3", "n4" }, - time |-> 1402]] -/\ prevNow = 1401 + [NextVS |-> {"n4"}, + VS |-> {}, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 1401]] +/\ prevNow = 1400 /\ prevVerdict = "INVALID" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2", "n3", "n4" }, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -217,8 +217,10 @@ State3 == InvariantViolation == BMC!Skolem((\E s$2 \in DOMAIN history: - history[s$2]["now"] < history[s$2]["current"]["header"]["time"])) + history[s$2]["now"] < history[s$2]["current"]["header"]["time"] + /\ history[s$2]["now"] + < history[s$2]["verified"]["header"]["time"] + 1400)) ================================================================================ -\* Created by Apalache on Wed Oct 21 12:41:40 UTC 2020 +\* Created by Apalache on Fri Nov 06 10:13:53 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderNotWithinTrustingPeriod.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderNotWithinTrustingPeriod.json new file mode 100644 index 000000000..d392c76fd --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderNotWithinTrustingPeriod.json @@ -0,0 +1,983 @@ +{ + "description": "MC4_4_faulty_TestHeaderNotWithinTrustingPeriod.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "A5ED6144C7003D68A267156E28228A4ADC690A03FC491A83920B41F855BB299B", + "part_set_header": { + "total": 1, + "hash": "A5ED6144C7003D68A267156E28228A4ADC690A03FC491A83920B41F855BB299B" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "hTOXQPlsMVnL7Zf0W7SMrjRHu/toFNmvl11nKlabnqGS/+HwdMuXPl9NUJ+6TeLoeLbMd4jlL9VlFFsHGFw5Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "I8KITnGyQ8/CPgotAOzRzJFnxWY1+0EtUjCqTbGGzZYGvMVdOCBI0vJSSfFKrotDdiBX+LEujwDhvanzYo9ZAg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "WARVzJvfwdy//eW5vBhVUkc7JotrzW9gokFrRHhbB0teuejlv5E1CoghipOtCwL+5TC7DrDjO1nAVMN6UOY2Bg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FDtH8Wf3oJfknMVVKaoA2Veh0OSPOBzKA24iapbcXyOVaMVGeDmOAJIDRGXS6dUMtNM4QCnod8IvyDTpfO9rDg==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:14:31.160465767Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:06Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "F6C2AB674E884AE4C7E72F9B7832794A354A2BBE6142C35CD26D9791458F6BC4", + "part_set_header": { + "total": 1, + "hash": "F6C2AB674E884AE4C7E72F9B7832794A354A2BBE6142C35CD26D9791458F6BC4" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:06Z", + "signature": "/vKS0G2KhRLlrAW96Z/j4t0dnv25tO7Lq/roiGNFU4+Kmna73n9GMPVYaNSXT5IdRSy2udp/eXFwyZMAjjB9DA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:06Z", + "signature": "/U3q6L34gfzmm3/0PoLfudijwxCT6rglL0NbAIvpJzaU+1/yFgqWEfQOsK6Hd3vOkV3lw01iXOCfCcnhxhJGDw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 6, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 6, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 6, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 6, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:17Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "consensus_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "41DF08F21165A7C2EAA562261D3B3A74BF49685FA02DC5ACBD77D4AAB9AF6A0B", + "part_set_header": { + "total": 1, + "hash": "41DF08F21165A7C2EAA562261D3B3A74BF49685FA02DC5ACBD77D4AAB9AF6A0B" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "k/SOVKadcNjkGtV+p/5QdO9dQ3hPWmut+z6tAza0EHgb5gIvw1J71Kd0dR9nOl7eWdXaWiYH0d1A1J74bIz4Bw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "sqwyK9G5PNzS2ZTlVGrp2ScUZRbh+kcbujEHD/zluH7tkoHOWZKkvVu9cTPUX5TV4OPqEagaMU1pfYFXjNZcAg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "6dhb8WYp1FjlHQIvP9FSAkPm9zcM493PN+cCaofgvaiK6civgvVTOONgpXRhHj+X2DfnTILqt7oKyzGqRCzmBQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:17Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:05Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "next_validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "consensus_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "DEF217C916C3A2B55DD3137295273F7ECA3DF1AB6DB9C362D0C5306E39E5D854", + "part_set_header": { + "total": 1, + "hash": "DEF217C916C3A2B55DD3137295273F7ECA3DF1AB6DB9C362D0C5306E39E5D854" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "E1T3JcaOkNuH375v1p3Uomsdy3Wg0lcfAqZc7S1zXyTpLPYtx4kdBst+BQNBLINY6lHXF9xu9WDnhei5iYzgAw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "66PVgL/DnqYisTSTrke1ySlZmOpOn6cATr0AtHAW6zN6TylQpIQUQzVz9oOZc4/e4UmpoX6aYnuPga3hyAA6Aw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:24Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderNotWithinTrustingPeriod.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderNotWithinTrustingPeriod.tla new file mode 100644 index 000000000..46b770345 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestHeaderNotWithinTrustingPeriod.tla @@ -0,0 +1,544 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] + @@ 3 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3" }, + height |-> 3, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 7] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1397 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1397 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] + @@ 3 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3" }, + height |-> 3, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 7] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 1397, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1397 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6]] +/\ prevNow = 1397 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 2 to State4 *) + +State4 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] + @@ 3 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3" }, + height |-> 3, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 7] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] + @@ 4 + :> [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 1397, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1404 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] +/\ prevNow = 1397 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State5 *) + +State5 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3] + @@ 3 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3" }, + height |-> 3, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n3"}, + height |-> 5, + lastCommit |-> { "n1", "n2" }, + time |-> 7] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] + @@ 3 + :> [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3" }, + height |-> 3, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]] + @@ 4 + :> [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2" }, + height |-> 4, + lastCommit |-> { "n2", "n3" }, + time |-> 6]], + now |-> 1397, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]], + now |-> 1397, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3" }, + height |-> 3, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]], + now |-> 1404, + verdict |-> "INVALID", + verified |-> + [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]]] +/\ latestVerified = [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] +/\ lightBlockStatus = 1 :> "StateVerified" + @@ 2 :> "StateVerified" + @@ 3 :> "StateFailed" + @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1404 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n2", "n3" }, + height |-> 3, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]] +/\ prevNow = 1404 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 3]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["now"] > history[s$2]["verified"]["header"]["time"] + 1400 + /\ history[s$2]["current"]["header"]["time"] < history[s$2]["now"])) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:14:30 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanThirdValsetChanges.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanThirdValsetChanges.json new file mode 100644 index 000000000..cddade390 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanThirdValsetChanges.json @@ -0,0 +1,1190 @@ +{ + "description": "MC4_4_faulty_TestLessThanThirdValsetChanges.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "658DEEC010B33EDB1977FA7B38087A8C547D65272F6A63854959E517AAD20597", + "part_set_header": { + "total": 1, + "hash": "658DEEC010B33EDB1977FA7B38087A8C547D65272F6A63854959E517AAD20597" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gUvww0D+bCNnq0wY4GvDkWAUQO3kbi9YvmoRBAC3goRZ6mW8Fh6V9hrMQYbpRpf7LZqFAdnleFgXnnEuKz17Bg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "54nTri+VJoBu8HCTb+c92aYrPiMSM71qVDkdRtwmE40LWPUFkTJNTqTLXbBXutQ1p5s6PyuB+p4UfWAwYCuUCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PWesm77j/+sQh1p00pDJv3R3B9tpe1HlfhaTS2be/5FZfq3EMH3ceplTSNGsQKo0p4f8N9UUq+TYwm+3dsZeBg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ngAHu3FpNX6aW4B7xmFd7ckNScOM+lfuCQuMDs7uq20UoNnnGasFOcFMXD+0dQnRndEu1RItr+0kgxKaD6OtAQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:20:02.160465800Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "3B0D5152C00E2DA9F1898CF0130D5353AB449C8A02C53F2CE4B933B841CD15E3", + "part_set_header": { + "total": 1, + "hash": "3B0D5152C00E2DA9F1898CF0130D5353AB449C8A02C53F2CE4B933B841CD15E3" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "Cw4T+YralWTczKSwU4bM7R+5YVO/+AFszlJNZhCPloVSOlONDA2bauopsvYzXuO7eT+tj+HtxFO5lKYuFZC9Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "zN+KCsNkRxUa0e9Jv6tWwCY6B5zWnItp84p1AAcOTrRflKYSQuQm3Isbm6Umdtpm4WdczqoHD85B7H3zlUtkAw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "vY+WO7KplivrFLO8zOnUQS9VandsiTCyigxeGkMivswgLAWY7d8nvXgbUiVVvdkzWGZBrHgYAomLVVk7XnkWCg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:05Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "EB5027D50E1B15C70BC5F816A5B5BF3836B15EB10F0B0825A776D73B9D3F709B", + "part_set_header": { + "total": 1, + "hash": "EB5027D50E1B15C70BC5F816A5B5BF3836B15EB10F0B0825A776D73B9D3F709B" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "7mt6RRBNlo2jXujxP6B9Tbme1pkg4KQO6Z58V/vvqHkgJRcVbpgBdADjGQldkBhDdUzWwHKaSot0EZkLbC6xCg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "AVWHhd6GOiDgQQHoCSFqKskxzblBhVFjxH9Gt9hwvl2AqAJaxVXfwL8zR6/dQ9hnPQJ5MbGCMEFESHksX1vbCg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "Rbyyp0tX9GchSer0QUVM/0x9BwuCst2kmE6ES9G1PN9VAJj7ZAIlec2c5HWMH9ph1xQE0NeycK1USRtdZXTdAw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:05Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "CDF60827A318F7C971662EEC2A967CCCB28CB684C7E161CEC218662CB38FE14B", + "part_set_header": { + "total": 1, + "hash": "CDF60827A318F7C971662EEC2A967CCCB28CB684C7E161CEC218662CB38FE14B" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Cv8NSnWlAnYQRaaUZ23TvNqBGxTiTLwpejAzypqN52+k9kPAwqz3TI4SVGHe0PnJM2Q2uwLz45mlMLnXq8j4Bg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:05Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanThirdValsetChanges.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanThirdValsetChanges.tla new file mode 100644 index 000000000..2eef84b3f --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanThirdValsetChanges.tla @@ -0,0 +1,558 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 5, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 5 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 5 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 5, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 5 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4]] +/\ prevNow = 5 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3]] + @@ 4 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 5, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 5 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3]] +/\ prevNow = 5 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State5 *) + +State5 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3]] + @@ 4 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 5, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 4]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n4"}, + time |-> 3]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2]], + now |-> 5, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" + @@ 2 :> "StateVerified" + @@ 3 :> "StateUnverified" + @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 5 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 2]] +/\ prevNow = 5 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 4)) + /\ ~(history[s2$2]["current"]["header"]["VS"] + = history[s1$2]["current"]["header"]["VS"]) + /\ 3 + * Cardinality({ + t_2s$1 \in history[s2$2]["current"]["header"]["VS"]: + ~(t_2s$1 \in history[s1$2]["current"]["header"]["VS"]) + }) + < Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:20:02 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanTwoThirdsSign.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanTwoThirdsSign.json new file mode 100644 index 000000000..5a04ab412 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanTwoThirdsSign.json @@ -0,0 +1,866 @@ +{ + "description": "MC4_4_faulty_TestLessThanTwoThirdsSign.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32", + "part_set_header": { + "total": 1, + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "BwKig3Giy91zDlZ5BSa67+E0EV1K4q6At2piQgg1h48odVOAjEiC4Tt772ologMWt0gdjYzeYtYR15OKtza1Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "EYx9XdH96HYFIJtaddpFF+u/1GBwE1A3/Ds2e5BGHnti62RBwgsdIWe3denuQxgYNPnIymqvrCiBAGEEtYJHBg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QctMtMK8Zes6OspVTkVvKtwWix70IAp0okAi4zJjV981FEnOuK2j8Fd0WQNHHDyqFX7uGTVL5L7JqbBfLuvBAA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "yWtJtDMH9NOtAeRqomUYDa23BePOZ+y7FNiAxWZ9a8iYUOOxUU3CoCqxfRm6wpJWW2QUwBicQs7ntnU3z7cpBg==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:20:43.160465804Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "F0D9B50599DAA65DE595D76B991F16B50276452300D4BCED076FFB07C980A7D3", + "part_set_header": { + "total": 1, + "hash": "F0D9B50599DAA65DE595D76B991F16B50276452300D4BCED076FFB07C980A7D3" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "A4PJU3Sgm3jv5RLY1lgGFv+HOhhkV7Bo5zoM+6QIu0dDfOBBEQ8eNcCe9JU3Mc29xrxYa9KDezOvo5s2nLSGCA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "+Z07h8rQTsjlXvIJ6DJesVrgqhex9Gm+eQp52Mm0WL+nqEd1TvC9zV7I6YhJZNao6ri6hmDWXFZzI8+5y/zfBw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:05Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "next_validators_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", + "consensus_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "B5A9B94219C0FEF38DAC952E4470696AECE5AECDABD33A828BE7CFB026CDBD10", + "part_set_header": { + "total": 1, + "hash": "B5A9B94219C0FEF38DAC952E4470696AECE5AECDABD33A828BE7CFB026CDBD10" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "FOjC6SAHWmci4H7R8KTyGJDIJOZLmxbFqU++OS5qg3IrWtrUgkbMLWvQS7+q4wN0zPVQ28L9+HhgEqBBzQrTAA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "ZV++tNSg8tztP0fL7Cq7L2tjvlk311GSE9iBk9LIkRlzMyZ6D2RBNNvHH6hbXZrqP9n8CvuXTwS13dV9PT4bAg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "OQkhc70ElaRDdyXV56h1GxlMJ24LvW91m52AlJeSSDHlgNOOXLcxfqlIu5Zn8jnIPDPVqYOKpogTDzwx2ZpHCQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:05Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "51608FD0EA852BF3BF8D478D14E42A614DA3EAEC6C623B7D45CC9DA24FC5B966", + "part_set_header": { + "total": 1, + "hash": "51608FD0EA852BF3BF8D478D14E42A614DA3EAEC6C623B7D45CC9DA24FC5B966" + } + }, + "signatures": [ + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanTwoThirdsSign.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanTwoThirdsSign.tla new file mode 100644 index 000000000..2eaeb9b18 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestLessThanTwoThirdsSign.tla @@ -0,0 +1,584 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 5, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 5 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 5 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 5, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 5 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]] +/\ prevNow = 5 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State4 *) + +State4 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]] + @@ 4 + :> [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 5, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateUnverified" @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]] +/\ prevNow = 5 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State5 *) + +State5 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]] + @@ 3 + :> [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]] + @@ 4 + :> [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 5, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n2", "n4" }, + VS |-> { "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]], + now |-> 5, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> {}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]], + now |-> 1400, + verdict |-> "INVALID", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" + @@ 2 :> "StateFailed" + @@ 3 :> "StateUnverified" + @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> {}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]] +/\ prevNow = 1400 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["verified"]["header"]["time"] + 1400 > history[s$2]["now"] + /\ BMC!Skolem((\E commits$2 \in SUBSET ({ "n1", "n2", "n3", "n4" }): + BMC!Skolem((\E t_3a$1 \in SUBSET ({ "n1", "n2", "n3", "n4" }): + BMC!Skolem((\E t_38$1 \in SUBSET ({ "n1", "n2", "n3", "n4" }): + BMC!Skolem((\E t_37$1 \in SUBSET ({ "n1", "n2", "n3", "n4" }): + BMC!Skolem((\E t_36$1 \in SUBSET ({ "n1", "n2", "n3", "n4" }): + BMC!Skolem((\E t_35$1 \in Int: + BMC!Skolem((\E t_34$1 \in 1 .. 5: + LET t_3o == + [height |-> t_34$1, + time |-> t_35$1, + lastCommit |-> t_36$1, + VS |-> t_37$1, + NextVS |-> t_38$1] + IN + LET t_3n == [header |-> t_3o, Commits |-> t_3a$1] IN + 3 * Cardinality(commits$2) + < 2 + * Cardinality(history[s$2]["current"]["header"][ + "VS" + ]) + /\ LET ref$5 == + blockchain[ + history[s$2]["current"]["header"]["height"] + ] + IN + LET lastCommit$6 == + IF history[s$2]["current"]["header"]["height"] < 5 + THEN blockchain[ + (history[s$2]["current"]["header"]["height"] + 1) + ][ + "lastCommit" + ] + ELSE blockchain[ + history[s$2]["current"]["header"]["height"] + ][ + "VS" + ] + IN + t_3n = [header |-> ref$5, Commits |-> lastCommit$6] + /\ history[s$2]["current"] + = [ (t_3n) EXCEPT ![<<"Commits">>] = commits$2 ])))))))))))))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:20:43 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestMoreThanTwoThirdsSign.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestMoreThanTwoThirdsSign.json new file mode 100644 index 000000000..b21153abb --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestMoreThanTwoThirdsSign.json @@ -0,0 +1,798 @@ +{ + "description": "MC4_4_faulty_TestMoreThanTwoThirdsSign.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32", + "part_set_header": { + "total": 1, + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "BwKig3Giy91zDlZ5BSa67+E0EV1K4q6At2piQgg1h48odVOAjEiC4Tt772ologMWt0gdjYzeYtYR15OKtza1Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "EYx9XdH96HYFIJtaddpFF+u/1GBwE1A3/Ds2e5BGHnti62RBwgsdIWe3denuQxgYNPnIymqvrCiBAGEEtYJHBg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QctMtMK8Zes6OspVTkVvKtwWix70IAp0okAi4zJjV981FEnOuK2j8Fd0WQNHHDyqFX7uGTVL5L7JqbBfLuvBAA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "yWtJtDMH9NOtAeRqomUYDa23BePOZ+y7FNiAxWZ9a8iYUOOxUU3CoCqxfRm6wpJWW2QUwBicQs7ntnU3z7cpBg==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:21:03.160465806Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:08Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "FE3159AB46B6BDE4DF3162AFE26EF1D32AAEF04478AACEA5BE44C48274A7F8E8", + "part_set_header": { + "total": 1, + "hash": "FE3159AB46B6BDE4DF3162AFE26EF1D32AAEF04478AACEA5BE44C48274A7F8E8" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:08Z", + "signature": "gv4ezkqIWeMHsu+3EL4iXHk+MSr9aynXKNd7k3yoyASgcFf99qXiisMoWUfK3lftgIRyYHtz9wio4/LfsX8fCw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 8, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 8, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 8, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:19Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "D1F23A44681EBF0714B044E0338812705121A5130CFB11498EDDF516A33D9AB9", + "part_set_header": { + "total": 1, + "hash": "D1F23A44681EBF0714B044E0338812705121A5130CFB11498EDDF516A33D9AB9" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "2z0rhaLRQROOBfgM9RAGm4FCioElHicnu+mDtC3MQ9iVqsW1xDgIZebSdqVkp0x/Q0l4rMjVCXY4FgfCPi5KDw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:05Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "7C0BE3DA9C67F40D978D8B2F1E07AC1111D46B04C98A855757731EB3A225562A", + "part_set_header": { + "total": 1, + "hash": "7C0BE3DA9C67F40D978D8B2F1E07AC1111D46B04C98A855757731EB3A225562A" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "KC3sjzFFLnWLtS8j0O1YCiifeG7R3F9/DrQNPZ1Q/h25+uZdgiQjvZ0QFXCwT/aNUZxqBGE8BJYf4M0SH9FvDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "nC/JmykLd2Fixw/r+/b4djRCLvlJgZNjgYT0MNTQExlJs4378VpwmaItUjUCSy6AnEG4bmCT4JiYgMZBoNm3BQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "T3673SLUrqKRKsHT9LQlnIesbHOVvBnL1rJfi4d5SupOPvM3WE3kPm8nzUQs7cGzg6DQNm0G1RhkVQ/8+kzMBw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestMoreThanTwoThirdsSign.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestMoreThanTwoThirdsSign.tla new file mode 100644 index 000000000..216f6e4c6 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestMoreThanTwoThirdsSign.tla @@ -0,0 +1,544 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {"n2"} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {"n3"}, + time |-> 9] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1399 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1399 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {"n2"} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {"n3"}, + time |-> 9] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] +/\ prevNow = 1399 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 2 to State4 *) + +State4 == +/\ Faulty = {"n2"} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {"n3"}, + time |-> 9] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]] + @@ 4 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State5 *) + +State5 == +/\ Faulty = {"n2"} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {"n3"}, + time |-> 9] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]] + @@ 3 + :> [Commits |-> { "n1", "n3", "n4" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 5]] + @@ 4 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n3"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 8]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> { "n1", "n3", "n4" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 5]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]]] +/\ latestVerified = [Commits |-> { "n1", "n3", "n4" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 5]] +/\ lightBlockStatus = 1 :> "StateVerified" + @@ 2 :> "StateVerified" + @@ 3 :> "StateVerified" + @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> { "n1", "n3", "n4" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 5]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> {"n1"}, + header |-> + [NextVS |-> { "n1", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 4]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s$2 \in DOMAIN history: + 3 * Cardinality(history[s$2]["current"]["Commits"]) + >= 2 * Cardinality(history[s$2]["current"]["header"]["VS"]))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:21:03 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestNonMonotonicHeight.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestNonMonotonicHeight.json new file mode 100644 index 000000000..f54f92e8c --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestNonMonotonicHeight.json @@ -0,0 +1,306 @@ +{ + "description": "MC4_4_faulty_TestNonMonotonicHeight.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32", + "part_set_header": { + "total": 1, + "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "BwKig3Giy91zDlZ5BSa67+E0EV1K4q6At2piQgg1h48odVOAjEiC4Tt772ologMWt0gdjYzeYtYR15OKtza1Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "EYx9XdH96HYFIJtaddpFF+u/1GBwE1A3/Ds2e5BGHnti62RBwgsdIWe3denuQxgYNPnIymqvrCiBAGEEtYJHBg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QctMtMK8Zes6OspVTkVvKtwWix70IAp0okAi4zJjV981FEnOuK2j8Fd0WQNHHDyqFX7uGTVL5L7JqbBfLuvBAA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "yWtJtDMH9NOtAeRqomUYDa23BePOZ+y7FNiAxWZ9a8iYUOOxUU3CoCqxfRm6wpJWW2QUwBicQs7ntnU3z7cpBg==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:12:59.160465757Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "A60D7D61B5FDF557664FEE57EB7915FB7A5165B3CFF0077222CD9852F7840270", + "part_set_header": { + "total": 1, + "hash": "A60D7D61B5FDF557664FEE57EB7915FB7A5165B3CFF0077222CD9852F7840270" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "BPIax+zDSSm9wH/UNa/tC4egqpV8dzFDZk7LCxAWUmfAw/F/Youx7yZcIVEyRDbcQSBW4F6YHXFGhMuMFavLDw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 1, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 1, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 1, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestNonMonotonicHeight.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestNonMonotonicHeight.tla new file mode 100644 index 000000000..7e5b7cce1 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestNonMonotonicHeight.tla @@ -0,0 +1,227 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {"n2"} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 5, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = {"n2"} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n3", "n4" }, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n3", "n4" }, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n3", "n4" }, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 5, + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 1, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 1, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]], + now |-> 1400, + verdict |-> "INVALID", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateFailed" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {"n2"}, + header |-> + [NextVS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 1, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 4]] +/\ prevNow = 1400 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + BMC!Skolem((\E s$2 \in DOMAIN history: + history[s$2]["current"]["header"]["height"] + <= history[s$2]["verified"]["header"]["height"] + /\ ~(history[s$2]["current"]["header"] + = history[s$2]["verified"]["header"]) + /\ history[s$2]["current"]["header"]["time"] + > history[s$2]["verified"]["header"]["time"] + /\ history[s$2]["current"]["header"]["time"] < history[s$2]["now"] + /\ history[s$2]["verified"]["header"]["time"] + 1400 + > history[s$2]["now"] + /\ ~(history[s$2]["current"]["Commits"] = {} <: {STRING}) + /\ history[s$2]["current"]["Commits"] + \subseteq history[s$2]["current"]["header"]["VS"])) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:12:59 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestOneThirdValsetChanges.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestOneThirdValsetChanges.json new file mode 100644 index 000000000..e02b50377 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestOneThirdValsetChanges.json @@ -0,0 +1,1153 @@ +{ + "description": "MC4_4_faulty_TestOneThirdValsetChanges.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "EAA36857D0DB20A7B1E315A74E9871F509D7FD52CD3172CFD7A0A9E360CD6759", + "part_set_header": { + "total": 1, + "hash": "EAA36857D0DB20A7B1E315A74E9871F509D7FD52CD3172CFD7A0A9E360CD6759" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "qnqWPNmmyQfNJkhPH2YBpWRlGjoLOoTzGLAKYuBuDzuLpDhvh+F4AOwsalo+qR70Lpx/yKU/+BTLPGxIIP47DA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "n0hMeOMwr+ZtcObdo2T99UzOfulXuCS7nbNCVbo7IrgqLHfo6xlxEddlOdYQp+3quMGI79osrl4EYvTB5wU4Cw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "v52uJnW0wNu4YPG7K46I+sGGJxj+0wx09KQZZsbmspL02nH3LhZahLFb3KBhswHevKKlo52X4VKszwRnlw+yDA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "HuW1zhtKSgz1Z5JXr2Gyvw3q/bh2Wxf34cmkn8j/d5v3EZtDzfl+T4Y42Pgb9cnBLpKF2YmUkKcv2pyoctf5AA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:20:21.160465802Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:05Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "541731B9610684F47F381A42B290CC3C8D0A1EFA0526B812BE4DFEBBE007FC1C", + "part_set_header": { + "total": 1, + "hash": "541731B9610684F47F381A42B290CC3C8D0A1EFA0526B812BE4DFEBBE007FC1C" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "wMpXrrUb8tepcQ6Q3XeT/ZxBQAaNaY2YRpGjV45EaF17HroeYO3lFiN1Pcj48oCA9uU+9cR9ZIqC2Ys/GONxAg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 5, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:06Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "4F7838FEC66A30955AB8185BBD56FFF4A754E235951F2ED9907B504521C31F01", + "part_set_header": { + "total": 1, + "hash": "4F7838FEC66A30955AB8185BBD56FFF4A754E235951F2ED9907B504521C31F01" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "WBRGqisW1OQk3fxEQJZlQqwMGn+zYGcAjEkQpZwu1Xhi0DGXI7usU2BiSIXmLPlj5jSMdCI84i66il862Yy0Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "lKiheG4sDX8lLotVkIfRn/ULazQOMupCoVT7K2LfyENFGEs84qeUt3VmgDCL87XmT6EAIYwQVb68X8ZIHVxwAw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "jbzLWuVq00YO+NMFAuH/giuJg2pleW3iKJyeJ6wpUELt3iIDHMIg3TPF/CLtlMZv+g5r5bxoLwjJY+hzsrhrDw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "9930131577CDD8F0499FD2CF538CCA05C044DA092427F41697C2D520312E3746", + "part_set_header": { + "total": 1, + "hash": "9930131577CDD8F0499FD2CF538CCA05C044DA092427F41697C2D520312E3746" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "cQKkeKNUoiB/gOCt+80/Gb9d4tSzfRoIK7tkm8eWiGB3WK7xwONDV8XKl9qgBS4k/7OYWrPRo8eKyEzegEdNBA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "KZe62Xu3EIiVKMOMIBZYuajjOmSw13cMwvKKvWcyKfZTOeS/1LZIbf8seitL6jJWFhp5fM+dskbjsgYy+s3DCw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "oUh45TCiwEJKKkGv4TErtAeY9iIIarHTS6T06BjH1zBAmclyzUT0+ZzlIALJsyJG+/EUv8ciadA8WjeNs54vDw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "Qf4MpO+tXos5ieJi+TEEvzJImusY+lZcxS/e/QTpZirIVQijHMozXnieOSH5CIHNVw7NZMcpY/644qkuZXTTCw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestOneThirdValsetChanges.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestOneThirdValsetChanges.tla new file mode 100644 index 000000000..548235bfc --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestOneThirdValsetChanges.tla @@ -0,0 +1,556 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4] + @@ 4 + :> [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n3" }, + height |-> 5, + lastCommit |-> {"n3"}, + time |-> 6] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 6, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 6 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 6 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4] + @@ 4 + :> [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n3" }, + height |-> 5, + lastCommit |-> {"n3"}, + time |-> 6] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 6, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]], + now |-> 6, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1398 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]] +/\ prevNow = 6 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 2 to State4 *) + +State4 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4] + @@ 4 + :> [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n3" }, + height |-> 5, + lastCommit |-> {"n3"}, + time |-> 6] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] + @@ 4 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 6, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]], + now |-> 6, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] +/\ prevNow = 1398 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State5 *) + +State5 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3] + @@ 3 + :> [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4] + @@ 4 + :> [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n3" }, + height |-> 5, + lastCommit |-> {"n3"}, + time |-> 6] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] + @@ 3 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4]] + @@ 4 + :> [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 6, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n3"}, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> {"n3"}, + height |-> 4, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 5]], + now |-> 6, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4]] +/\ lightBlockStatus = 1 :> "StateVerified" + @@ 2 :> "StateVerified" + @@ 3 :> "StateVerified" + @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n3"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 3, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 3]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 3)) + /\ 3 + * Cardinality({ + t_2s$1 \in history[s2$2]["current"]["header"]["VS"]: + ~(t_2s$1 \in history[s1$2]["current"]["header"]["VS"]) + }) + = Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:20:20 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.json index c1cf062b8..3c28b4f82 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.json @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32", + "hash": "A85B7F07FE8746ABBD0F58DCAB3FF6FD9D9AA167B0BF1DA9C963B9004F37CA40", "part_set_header": { "total": 1, - "hash": "533DE06C9907E5E41EF18C68E28B04BF8F16D35EA053EE413ACE9A9F3A106B32" + "hash": "A85B7F07FE8746ABBD0F58DCAB3FF6FD9D9AA167B0BF1DA9C963B9004F37CA40" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "BwKig3Giy91zDlZ5BSa67+E0EV1K4q6At2piQgg1h48odVOAjEiC4Tt772ologMWt0gdjYzeYtYR15OKtza1Ag==" + "signature": "jh+PtBHMF7RkPfgNfUv91C029lyCwcX2ZUFS2ZF6QJ3WbVnOrAV5a6KvGSHZwv1mdDzvacxkxyMeVO+cKXreBg==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "EYx9XdH96HYFIJtaddpFF+u/1GBwE1A3/Ds2e5BGHnti62RBwgsdIWe3denuQxgYNPnIymqvrCiBAGEEtYJHBg==" + "signature": "tC/aOP3Ombl0MO3DpMjvbf5s/CnghG9O6KKcMcuyCjx/0U/+K/5trmgSoFUU8QM9lL1FYkR3f2moX48n3yw/CA==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "QctMtMK8Zes6OspVTkVvKtwWix70IAp0okAi4zJjV981FEnOuK2j8Fd0WQNHHDyqFX7uGTVL5L7JqbBfLuvBAA==" + "signature": "+OTQXTzlNtYPUk9f9yENJrTynpy3mCRHSGUHoOkAoFciWjoqkf+kkI+BiPJcci72zrXz3rcsKV82ukPdtv4YDg==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "yWtJtDMH9NOtAeRqomUYDa23BePOZ+y7FNiAxWZ9a8iYUOOxUU3CoCqxfRm6wpJWW2QUwBicQs7ntnU3z7cpBg==" + "signature": "9bD1oaXHT1uSEAid7YGIgUVSRzBdgYzDJd32I7h8kUmL+Mo9sTX/cxLvPYY29PKrZ6Q/ffaDTZG3MwRWorEVAg==" } ] } @@ -62,10 +62,19 @@ "next_validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null @@ -73,7 +82,7 @@ ] }, "trusting_period": "1400000000000", - "now": "2020-10-21T12:39:15.160328395Z" + "now": "2020-11-06T10:09:54.160465739Z" }, "input": [ { @@ -85,35 +94,35 @@ "app": "0" }, "chain_id": "test-chain", - "height": "4", + "height": "5", "time": "1970-01-01T00:00:05Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" }, "commit": { - "height": "4", + "height": "5", "round": 1, "block_id": { - "hash": "C42E41B9448734056B715284B71A2A0E4B4AF3D9542FA65186000AB3E77515B4", + "hash": "5BEBB742FD1E3B03DA1B591F23E8FD4EDEA50D1DC39DAC3502D5962F3046D2FE", "part_set_header": { "total": 1, - "hash": "C42E41B9448734056B715284B71A2A0E4B4AF3D9542FA65186000AB3E77515B4" + "hash": "5BEBB742FD1E3B03DA1B591F23E8FD4EDEA50D1DC39DAC3502D5962F3046D2FE" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:05Z", - "signature": "S5fqAkv8esKaY/BBX1KXvLNOGncIfUqOsejYykzdNhCaCZ1XYGx4vh4IPVBvthpyAT+qrKmAbYKrLAVLDF2JCA==" + "signature": "A1W7fo6Gk2d1jvLwHlNDuRqF9pd+MwX1tvq5xbA2W7ffAFdWKYB9aV9R1OoPPCcjfl0/4ilbjWj7G7pphFRYAQ==" } ] } @@ -121,10 +130,10 @@ "validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null @@ -133,6 +142,15 @@ }, "next_validator_set": { "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { @@ -146,7 +164,122 @@ }, "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:07Z", + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 5, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 5, + "time": 5, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 5, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -159,34 +292,40 @@ }, "chain_id": "test-chain", "height": "2", - "time": "1970-01-01T00:00:03Z", + "time": "1970-01-01T00:00:02Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "consensus_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "2", "round": 1, "block_id": { - "hash": "08D83797F35A8B8BAB3A9942D689B7FB8005C4FB6A212C96A4E1276868414D78", + "hash": "B24DF4873E4D3C1EB890A4748234276272344A4C0FEDA42BC998BF3332632872", "part_set_header": { "total": 1, - "hash": "08D83797F35A8B8BAB3A9942D689B7FB8005C4FB6A212C96A4E1276868414D78" + "hash": "B24DF4873E4D3C1EB890A4748234276272344A4C0FEDA42BC998BF3332632872" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "HgtEpK1J+GYrEeJUun6NhucTVZHUKw4W4C6Oyd+Q4ni8b06yKawPAx6FskiPIzhCnLo6rGRhogTdlE7rQJNlBQ==" + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "kVvq3W0k7hpEdhBr4i9mj8pEW5pn7d2pejbUbmBUwc4H2t2mfUFWceKWjm07fDFYNZqerRCqebQ/wgQDc3yZBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "pmUtQHNkYJ9GAI0eLW8tI8Ni/N111tusgDjM77PgD01IKen9GofIE/amYGMjgAFbWp2w6XemrQ8FdYRhc39UCA==" } ] } @@ -194,10 +333,19 @@ "validator_set": { "validators": [ { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null @@ -206,6 +354,24 @@ }, "next_validator_set": { "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { @@ -219,7 +385,210 @@ }, "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:07Z", + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", "verdict": "SUCCESS" }, { @@ -231,35 +600,53 @@ "app": "0" }, "chain_id": "test-chain", - "height": "3", + "height": "4", "time": "1970-01-01T00:00:04Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" }, "commit": { - "height": "3", + "height": "4", "round": 1, "block_id": { - "hash": "703604A5B309697FE9306E77BA7825D6BE46D6B7F6106D4FA0F0B22C4F5E3EE2", + "hash": "A9AD3A4686D5715B45FA396B119DA6475E9D3B1E0E96AEDEDDEE11BADE77E758", "part_set_header": { "total": 1, - "hash": "703604A5B309697FE9306E77BA7825D6BE46D6B7F6106D4FA0F0B22C4F5E3EE2" + "hash": "A9AD3A4686D5715B45FA396B119DA6475E9D3B1E0E96AEDEDDEE11BADE77E758" } }, "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "4oNXmHw1CtmHWYTFyY6TmhSnOzuReZ2iSpOdJaCuLBqjPnRUk5Ws+HTA1He825IgGm0WOj/71oB2Kyk2ATkjCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "/2+qvXBpck+/elQ6jhF9fE4Z6Z8yeQnqF3C3P+tQXxDdRQ4pB3eukSMci88VgTcYM0WjX3VT+0YyLIk42mZ4Cg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:04Z", - "signature": "641Vqx+jGWGjlDlOMij0QZ6O95fSVCJ9FNLoUkVJ881JuT9n37r8xeb6YG8i/QEfCO83IZr38rXrs8OWs1ZwDw==" + "signature": "BoSFwwMJYa23M+PSzh+56BA0e2w6FaJPvnFywSP3DydwCps9h7RvWadd5q8zmOxWu159LaG18faz3QDNzk1cDg==" } ] } @@ -267,78 +654,32 @@ "validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ + }, { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null - } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:23:22Z", - "verdict": "SUCCESS" - }, - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" }, - "chain_id": "test-chain", - "height": "4", - "time": "1970-01-01T00:00:05Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" - }, - "commit": { - "height": "4", - "round": 1, - "block_id": { - "hash": "C42E41B9448734056B715284B71A2A0E4B4AF3D9542FA65186000AB3E77515B4", - "part_set_header": { - "total": 1, - "hash": "C42E41B9448734056B715284B71A2A0E4B4AF3D9542FA65186000AB3E77515B4" - } + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:05Z", - "signature": "S5fqAkv8esKaY/BBX1KXvLNOGncIfUqOsejYykzdNhCaCZ1XYGx4vh4IPVBvthpyAT+qrKmAbYKrLAVLDF2JCA==" - } - ] - } - }, - "validator_set": { - "validators": [ { "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { @@ -353,10 +694,10 @@ "next_validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null @@ -365,7 +706,258 @@ }, "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:23:22Z", + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:21Z", "verdict": "SUCCESS" } ] diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.tla index d56702264..ca91942e4 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestSuccess.tla @@ -9,41 +9,41 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {"n2"} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 3] @@ 4 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> {"n1"}, height |-> 5, - lastCommit |-> {"n3"}, - time |-> 6] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,44 +52,44 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 7 +/\ now = 1400 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 7 +/\ prevNow = 1400 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -99,258 +99,258 @@ State2 == (* Transition 1 to State3 *) State3 == -/\ Faulty = {"n2"} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 3] @@ 4 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> {"n1"}, height |-> 5, - lastCommit |-> {"n3"}, - time |-> 6] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] - @@ 4 - :> [Commits |-> {"n3"}, + @@ 5 + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, + [NextVS |-> { "n1", "n3" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3" }, time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, + [NextVS |-> { "n1", "n3" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3" }, time |-> 5]], - now |-> 7, + now |-> 1400, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 7 +/\ now = 1400 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> {"n3"}, +/\ prevCurrent = [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, + [NextVS |-> { "n1", "n3" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3" }, time |-> 5]] -/\ prevNow = 7 +/\ prevNow = 1400 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ state = "working" -(* Transition 0 to State4 *) +(* Transition 2 to State4 *) State4 == -/\ Faulty = {"n2"} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 3] @@ 4 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> {"n1"}, height |-> 5, - lastCommit |-> {"n3"}, - time |-> 6] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n2", "n3" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] - @@ 4 - :> [Commits |-> {"n3"}, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]] + @@ 5 + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, + [NextVS |-> { "n1", "n3" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3" }, time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, + [NextVS |-> { "n1", "n3" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3" }, time |-> 5]], - now |-> 7, + now |-> 1400, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n2", "n3" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]], - now |-> 7, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]], + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> {"n1"}, +/\ latestVerified = [Commits |-> { "n2", "n3" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" -/\ nextHeight = 3 -/\ now = 1402 +/\ nextHeight = 4 +/\ now = 1401 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> {"n1"}, +/\ prevCurrent = [Commits |-> { "n2", "n3" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] -/\ prevNow = 7 + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]] +/\ prevNow = 1400 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -360,368 +360,172 @@ State4 == (* Transition 3 to State5 *) State5 == -/\ Faulty = {"n2"} +/\ Faulty = {"n4"} /\ blockchain = 1 - :> [NextVS |-> {"n1"}, + :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + :> [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2] @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2", "n3" }, height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] + lastCommit |-> { "n2", "n3" }, + time |-> 3] @@ 4 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, + VS |-> {"n1"}, height |-> 5, - lastCommit |-> {"n3"}, - time |-> 6] + lastCommit |-> { "n1", "n2", "n4" }, + time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n2", "n3" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] - @@ 3 - :> [Commits |-> {"n3"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]] @@ 4 - :> [Commits |-> {"n3"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]] -/\ history = 0 - :> [current |-> - [Commits |-> { "n1", "n2", "n3", "n4" }, - header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1]], - now |-> 7, - verdict |-> "SUCCESS", - verified |-> - [Commits |-> { "n1", "n2", "n3", "n4" }, - header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1]]] - @@ 1 - :> [current |-> - [Commits |-> {"n3"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]], - now |-> 7, - verdict |-> "NOT_ENOUGH_TRUST", - verified |-> - [Commits |-> { "n1", "n2", "n3", "n4" }, - header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1]]] - @@ 2 - :> [current |-> - [Commits |-> {"n1"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]], - now |-> 7, - verdict |-> "SUCCESS", - verified |-> - [Commits |-> { "n1", "n2", "n3", "n4" }, - header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1]]] - @@ 3 - :> [current |-> - [Commits |-> {"n3"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]], - now |-> 1402, - verdict |-> "SUCCESS", - verified |-> - [Commits |-> {"n1"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]]] -/\ latestVerified = [Commits |-> {"n3"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] -/\ lightBlockStatus = 1 :> "StateVerified" - @@ 2 :> "StateVerified" - @@ 3 :> "StateVerified" - @@ 4 :> "StateUnverified" -/\ nextHeight = 4 -/\ now = 1402 -/\ nprobes = 3 -/\ prevCurrent = [Commits |-> {"n3"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] -/\ prevNow = 1402 -/\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> {"n1"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] -/\ state = "working" - -(* Transition 0 to State6 *) - -State6 == -/\ Faulty = {"n2"} -/\ blockchain = 1 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1] - @@ 2 - :> [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3] - @@ 3 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4] - @@ 4 - :> [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5] - @@ 5 - :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n3"}, - height |-> 5, - lastCommit |-> {"n3"}, - time |-> 6] -/\ fetchedLightBlocks = 1 - :> [Commits |-> { "n1", "n2", "n3", "n4" }, + :> [Commits |-> { "n1", "n3", "n4" }, header |-> [NextVS |-> {"n1"}, VS |-> { "n1", "n2", "n3", "n4" }, - height |-> 1, - lastCommit |-> {}, - time |-> 1]] - @@ 2 - :> [Commits |-> {"n1"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, - height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]] - @@ 3 - :> [Commits |-> {"n3"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 3, - lastCommit |-> {"n1"}, + height |-> 4, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 4]] - @@ 4 - :> [Commits |-> {"n3"}, + @@ 5 + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, + [NextVS |-> { "n1", "n3" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3" }, time |-> 5]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 7, + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, + [NextVS |-> { "n1", "n3" }, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> { "n1", "n3" }, time |-> 5]], - now |-> 7, + now |-> 1400, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n2", "n3" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]], - now |-> 7, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]], + now |-> 1400, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, + [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n3"}, + [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 3, - lastCommit |-> {"n1"}, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n2", "n3" }, time |-> 4]], - now |-> 1402, + now |-> 1401, verdict |-> "SUCCESS", verified |-> - [Commits |-> {"n1"}, + [Commits |-> { "n2", "n3" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n1"}, + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, height |-> 2, - lastCommit |-> { "n1", "n3", "n4" }, - time |-> 3]]] - @@ 4 - :> [current |-> - [Commits |-> {"n3"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]], - now |-> 1402, - verdict |-> "SUCCESS", - verified |-> - [Commits |-> {"n3"}, - header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]]] -/\ latestVerified = [Commits |-> {"n3"}, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]]] +/\ latestVerified = [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]] -/\ lightBlockStatus = 1 :> "StateVerified" - @@ 2 :> "StateVerified" - @@ 3 :> "StateVerified" - @@ 4 :> "StateVerified" + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateVerified" /\ nextHeight = 4 -/\ now = 1402 -/\ nprobes = 4 -/\ prevCurrent = [Commits |-> {"n3"}, +/\ now = 1401 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, height |-> 4, - lastCommit |-> {"n3"}, - time |-> 5]] -/\ prevNow = 1402 + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 4]] +/\ prevNow = 1401 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> {"n3"}, +/\ prevVerified = [Commits |-> { "n2", "n3" }, header |-> - [NextVS |-> {"n3"}, - VS |-> {"n3"}, - height |-> 3, - lastCommit |-> {"n1"}, - time |-> 4]] + [NextVS |-> { "n1", "n2", "n3" }, + VS |-> { "n2", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 2]] /\ state = "finishedSuccess" (* The following formula holds true in the last state and violates the invariant *) @@ -730,5 +534,5 @@ InvariantViolation == state = "finishedSuccess" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 4 ================================================================================ -\* Created by Apalache on Wed Oct 21 12:39:14 UTC 2020 +\* Created by Apalache on Fri Nov 06 10:09:53 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.tla index 0b9a00984..18bf85915 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.tla @@ -9,7 +9,7 @@ TRUE (* Transition 0 to State2 *) State2 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, @@ -17,28 +17,28 @@ State2 == lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n4"}, + :> [NextVS |-> {"n3"}, VS |-> { "n2", "n3" }, height |-> 2, lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> { "n1", "n3" }, - VS |-> {"n4"}, + :> [NextVS |-> {"n2"}, + VS |-> {"n3"}, height |-> 3, lastCommit |-> { "n2", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n4"}, + lastCommit |-> {"n3"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n2"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> { "n1", "n3" }, + lastCommit |-> {"n2"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -57,7 +57,7 @@ State2 == height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1401, + now |-> 1399, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -76,7 +76,7 @@ State2 == time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" /\ nextHeight = 4 -/\ now = 1401 +/\ now = 1399 /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> @@ -85,7 +85,7 @@ State2 == height |-> 1, lastCommit |-> {}, time |-> 1]] -/\ prevNow = 1401 +/\ prevNow = 1399 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> @@ -99,7 +99,7 @@ State2 == (* Transition 5 to State3 *) State3 == -/\ Faulty = {} +/\ Faulty = {"n4"} /\ blockchain = 1 :> [NextVS |-> { "n2", "n3" }, VS |-> { "n1", "n2", "n3", "n4" }, @@ -107,28 +107,28 @@ State3 == lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n4"}, + :> [NextVS |-> {"n3"}, VS |-> { "n2", "n3" }, height |-> 2, lastCommit |-> { "n2", "n3", "n4" }, time |-> 2] @@ 3 - :> [NextVS |-> { "n1", "n3" }, - VS |-> {"n4"}, + :> [NextVS |-> {"n2"}, + VS |-> {"n3"}, height |-> 3, lastCommit |-> { "n2", "n3" }, time |-> 3] @@ 4 - :> [NextVS |-> {"n2"}, - VS |-> { "n1", "n3" }, + :> [NextVS |-> {"n3"}, + VS |-> {"n2"}, height |-> 4, - lastCommit |-> {"n4"}, + lastCommit |-> {"n3"}, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> {"n2"}, + VS |-> {"n3"}, height |-> 5, - lastCommit |-> { "n1", "n3" }, + lastCommit |-> {"n2"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -139,12 +139,12 @@ State3 == lastCommit |-> {}, time |-> 1]] @@ 4 - :> [Commits |-> {}, + :> [Commits |-> {"n4"}, header |-> - [NextVS |-> {}, - VS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2" }, height |-> 4, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 0]] /\ history = 0 :> [current |-> @@ -155,7 +155,7 @@ State3 == height |-> 1, lastCommit |-> {}, time |-> 1]], - now |-> 1401, + now |-> 1399, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -167,14 +167,14 @@ State3 == time |-> 1]]] @@ 1 :> [current |-> - [Commits |-> {}, + [Commits |-> {"n4"}, header |-> - [NextVS |-> {}, - VS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2" }, height |-> 4, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 0]], - now |-> 1401, + now |-> 1399, verdict |-> "INVALID", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, @@ -193,16 +193,16 @@ State3 == time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateFailed" /\ nextHeight = 4 -/\ now = 1401 +/\ now = 1399 /\ nprobes = 1 -/\ prevCurrent = [Commits |-> {}, +/\ prevCurrent = [Commits |-> {"n4"}, header |-> - [NextVS |-> {}, - VS |-> { "n2", "n3" }, + [NextVS |-> { "n1", "n4" }, + VS |-> { "n1", "n2" }, height |-> 4, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n2", "n3", "n4" }, time |-> 0]] -/\ prevNow = 1401 +/\ prevNow = 1399 /\ prevVerdict = "INVALID" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> @@ -217,9 +217,16 @@ State3 == InvariantViolation == BMC!Skolem((\E s$2 \in DOMAIN history: + LET CMS$2 == history[s$2]["current"]["Commits"] IN + LET UVS$2 == history[s$2]["current"]["header"]["VS"] IN history[s$2]["current"]["header"]["time"] - < history[s$2]["verified"]["header"]["time"])) + < history[s$2]["verified"]["header"]["time"] + /\ history[s$2]["now"] + < history[s$2]["verified"]["header"]["time"] + 1400 + /\ ~(CMS$2 = {} <: {STRING}) + /\ ~(UVS$2 = {} <: {STRING}) + /\ Cardinality((CMS$2)) < Cardinality((UVS$2)))) ================================================================================ -\* Created by Apalache on Wed Oct 21 12:41:51 UTC 2020 +\* Created by Apalache on Fri Nov 06 10:14:09 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetChangesFully.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetChangesFully.json new file mode 100644 index 000000000..3eb22380c --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetChangesFully.json @@ -0,0 +1,768 @@ +{ + "description": "MC4_4_faulty_TestValsetChangesFully.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "6F70738E1F789E42D6F424F15A85D4B90BE287EB5A1E78DC3B2C8502EBAD2B28", + "part_set_header": { + "total": 1, + "hash": "6F70738E1F789E42D6F424F15A85D4B90BE287EB5A1E78DC3B2C8502EBAD2B28" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "I5AZkBd3JQaOh2sqLkyym3I+sKJqP/4o9hFZW1+PPsIV46C2AkRqNC8OeElW02bTEOncxk5+XLI2M9LGkUfjCg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "XdFpwQTWY5ZIxAViOD1EC+sA5KCDMLLhoFaYjHp0Zuu1o+nDIhVKyuS8CD5IatLtHc7pN6APMZruCrUhKuc7Dg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "lpBxn4D/foZUdjZbl/wkWmRKCMm201a7tc1DuQ81KqEUW3jSer6qJWhXLkkVWd03MaSuA5SDegG3pjrvXdegBw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "e2kVRdlz5BMgxQMeAeL36SiywpgUyrePcbBUwuZbdFUiK9B3JlNgxg84ZN1OYV5JRIrwaGoIQtE0xHmOr0YgDg==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:19:42.160465798Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:07Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "3683BF5B9C99E40A66BCF6962673F01A9D93A05160D07E35437AB181C6167827", + "part_set_header": { + "total": 1, + "hash": "3683BF5B9C99E40A66BCF6962673F01A9D93A05160D07E35437AB181C6167827" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:07Z", + "signature": "wBt5J5u1DeNtNJXQAVjz9oeTwEbHerCch0mlYqg9VmiI+JqkMwgV+qGDDVpVD2tld1wsgU9tqA/p1WsF6i0mDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:07Z", + "signature": "gAIPPcw8YpSDBDm7gCse4TOrT2/gdy6jf3bQPZBuQ1BuJ42ylQ1OEX+ATp85wWWxkzg+d8jKADPizbd5riOTDg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:05Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "2E0E93978639DFEBEB90D2312671F6AD820F36D0CC88FFC27EF0E61F7E811240", + "part_set_header": { + "total": 1, + "hash": "2E0E93978639DFEBEB90D2312671F6AD820F36D0CC88FFC27EF0E61F7E811240" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "AiQfMXJeiM5SEziZNjsR/FvA1VR1YrmhxmqhoCcBJgmwW8pOLmAaVNTDlymqW2GnkRijlQ3V6NiC07ptzlB/AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "myW/ck4Ix9I9Lf/2GY4IRcYLDlBWJVn0PMj6VTuuGqjaVEp/5gGGTUrBLmiY11TGRJDI7rhejMKBTVUnUWGFDw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 5, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:06Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "2B141A0A08B7EF0A65BC5F4D92F00BDEF0279124DEAC497BEF4C4336D0A3CE6F", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "9E1B767F05E349DDF0327D57560944655298501ED2B827BEC4E9264CBA33E5F2", + "part_set_header": { + "total": 1, + "hash": "9E1B767F05E349DDF0327D57560944655298501ED2B827BEC4E9264CBA33E5F2" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:06Z", + "signature": "NVPzOvhLCYTNpwabDE9wlS4vljyxK3LanPZOnBi5IPgQkQB/lKSIDLHyj1aEdedS4sskvToe1n2r8H3CrjemDQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetChangesFully.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetChangesFully.tla new file mode 100644 index 000000000..66644d00d --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetChangesFully.tla @@ -0,0 +1,552 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> { "n1", "n3" }, + time |-> 6] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 8] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1398 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1398 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> { "n1", "n3" }, + time |-> 6] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 8] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1400 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7]] +/\ prevNow = 1398 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 2 to State4 *) + +State4 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> { "n1", "n3" }, + time |-> 6] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 8] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5]] + @@ 4 + :> [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State5 *) + +State5 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5] + @@ 3 + :> [NextVS |-> { "n2", "n4" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> { "n1", "n3" }, + time |-> 6] + @@ 4 + :> [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n1"}, + height |-> 5, + lastCommit |-> { "n2", "n4" }, + time |-> 8] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5]] + @@ 3 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n2", "n4" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> { "n1", "n3" }, + time |-> 6]] + @@ 4 + :> [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n2", "n4" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 7]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n3" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n2", "n4" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> { "n1", "n3" }, + time |-> 6]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5]]] +/\ latestVerified = [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n2", "n4" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> { "n1", "n3" }, + time |-> 6]] +/\ lightBlockStatus = 1 :> "StateVerified" + @@ 2 :> "StateVerified" + @@ 3 :> "StateVerified" + @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n2", "n4" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> { "n1", "n3" }, + time |-> 6]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n3" }, + header |-> + [NextVS |-> {"n4"}, + VS |-> { "n1", "n3" }, + height |-> 2, + lastCommit |-> { "n1", "n2", "n3", "n4" }, + time |-> 5]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ LET t_37 == history[s1$2]["current"]["header"]["VS"] IN + BMC!Skolem((\E t_35 \in t_37: + BMC!Skolem((\E t_36 \in t_37: ~(t_35 = t_36))))) + /\ { + t_2s$1 \in history[s1$2]["current"]["header"]["VS"]: + t_2s$1 \in history[s2$2]["current"]["header"]["VS"] + } + = {} <: {STRING})))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:19:42 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.json deleted file mode 100644 index 855695017..000000000 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.json +++ /dev/null @@ -1,341 +0,0 @@ -{ - "description": "MC4_4_faulty_TestValsetDifferentAllSteps.json", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "1", - "time": "1970-01-01T00:00:01Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", - "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "5AD522AA6CAD611640B450F30A3B3A5D5CE38C4FF9F0116B5786676F8C8EE665", - "part_set_header": { - "total": 1, - "hash": "5AD522AA6CAD611640B450F30A3B3A5D5CE38C4FF9F0116B5786676F8C8EE665" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:01Z", - "signature": "EsC5Pps5k8qHsRQuKZFA6V5im6+4tqBFeeHNwZreaMuD1+wrkiDGs3Uqfg+eKPOkvJ8vFHRZiI+lgfDXWKiEDA==" - }, - { - "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:01Z", - "signature": "5l2jo2hx8+S8ayDp5CTaZzGJJvgacARjdCx5qJDKc11txgSxtxTeQXRtDccY1PnQ4Yyj9hzFOLK5ZlPCiFFrBA==" - }, - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:01Z", - "signature": "koV3vjxo//+D/LlD5x/fRgVq2zecKHF0pynr0Cz0TgkvCy1VCBdY8HJDyjR0h/p9Yc+hPW4cCeAH/FfD7z6UBA==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:01Z", - "signature": "BIHRCxuw6CSk/WbPie4q2Mpt0QQIqdQv+4P8SV8JuwmIv0ZW4jew+YW8W7cN6WtbL8gcJb/g33x39APjWNMhDw==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "trusting_period": "1400000000000", - "now": "2020-10-21T12:41:29.160328408Z" - }, - "input": [ - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "4", - "time": "1970-01-01T00:00:04Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "next_validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", - "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" - }, - "commit": { - "height": "4", - "round": 1, - "block_id": { - "hash": "085FE1BC05000D11CEFE84CE805441658B991ECD63E3A557E2618C1980564CC1", - "part_set_header": { - "total": 1, - "hash": "085FE1BC05000D11CEFE84CE805441658B991ECD63E3A557E2618C1980564CC1" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "9agLzbT8r4o/JulKrtF/Nz1AHTAeSpE6rJWOH0YbdCtmNVwMg5HRxGsq851o0DdzOo9jr++bCkbHH36Sdh+dAQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:00:05Z", - "verdict": "NOT_ENOUGH_TRUST" - }, - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "2", - "time": "1970-01-01T00:00:02Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", - "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "consensus_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "6620822B327672CF09FB590624C38030127A5833C19D581777CADF0AA6468D01", - "part_set_header": { - "total": 1, - "hash": "6620822B327672CF09FB590624C38030127A5833C19D581777CADF0AA6468D01" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "h5QLJ56GQpI4/7BTPpu9bIjTXTVOkJmg00eglmNu8DDRkzOZ0Y8oQBwHfPF5oTemQuldKIcIp+7CXqTAyOifAA==" - }, - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "5+qd7jmx2o5GIBlXkivZnUbuzIE8VxqpoOnrzeZWTa3F3nddEZ5cT6v+fpUMNWfNaWLlIuc28ddKEQtenpflBA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:00:05Z", - "verdict": "SUCCESS" - }, - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "3", - "time": "1970-01-01T00:00:03Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" - }, - "commit": { - "height": "3", - "round": 1, - "block_id": { - "hash": "E60D3DC5A38CE0773BF911BE62514F5FE6C12FA574F0571965E8EDE2D8899C01", - "part_set_header": { - "total": 1, - "hash": "E60D3DC5A38CE0773BF911BE62514F5FE6C12FA574F0571965E8EDE2D8899C01" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "L5MQUXKrrRk9I/wnx3Pai49qFdzSkkYRzM9eO7gOI5ofG2LaJoDMttkCKp2kp9/3koSWssnX+/Uuvy62XU/hCA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:00:05Z", - "verdict": "SUCCESS" - } - ] -} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.tla index a2a85760e..167d20d1b 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.tla +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDifferentAllSteps.tla @@ -11,39 +11,39 @@ TRUE State2 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2" }, + :> [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n2", "n3", "n4" }, + :> [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, height |-> 5, lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -52,7 +52,7 @@ State2 == :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -62,14 +62,14 @@ State2 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -80,7 +80,7 @@ State2 == /\ nprobes = 0 /\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -89,7 +89,7 @@ State2 == /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -101,39 +101,39 @@ State2 == State3 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2" }, + :> [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n2", "n3", "n4" }, + :> [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, height |-> 5, lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -141,16 +141,16 @@ State3 == @@ 4 :> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n2", "n3", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -160,7 +160,7 @@ State3 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -169,113 +169,113 @@ State3 == :> [current |-> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n2", "n3", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] /\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 2 -/\ now = 5 +/\ now = 1398 /\ nprobes = 1 /\ prevCurrent = [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n2", "n3", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4]] /\ prevNow = 5 /\ prevVerdict = "NOT_ENOUGH_TRUST" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] /\ state = "working" -(* Transition 0 to State4 *) +(* Transition 2 to State4 *) State4 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2" }, + :> [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n2", "n3", "n4" }, + :> [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, height |-> 5, lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2" }, + :> [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2]] @@ 4 :> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n2", "n3", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -285,7 +285,7 @@ State4 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -294,63 +294,63 @@ State4 == :> [current |-> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n2", "n3", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n2" }, + [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2]], - now |-> 5, + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] -/\ latestVerified = [Commits |-> { "n1", "n2" }, +/\ latestVerified = [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 3 -/\ now = 5 +/\ now = 1398 /\ nprobes = 2 -/\ prevCurrent = [Commits |-> { "n1", "n2" }, +/\ prevCurrent = [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2]] -/\ prevNow = 5 +/\ prevNow = 1398 /\ prevVerdict = "SUCCESS" /\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -362,72 +362,72 @@ State4 == State5 == /\ Faulty = {} /\ blockchain = 1 - :> [NextVS |-> { "n1", "n2" }, + :> [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1] @@ 2 - :> [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + :> [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2] @@ 3 :> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3] @@ 4 - :> [NextVS |-> { "n2", "n3", "n4" }, + :> [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4] @@ 5 :> [NextVS |-> { "n1", "n2", "n3", "n4" }, - VS |-> { "n2", "n3", "n4" }, + VS |-> {"n2"}, height |-> 5, lastCommit |-> {"n3"}, time |-> 5] /\ fetchedLightBlocks = 1 :> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]] @@ 2 - :> [Commits |-> { "n1", "n2" }, + :> [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2]] @@ 3 - :> [Commits |-> {"n1"}, + :> [Commits |-> { "n3", "n4" }, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] @@ 4 :> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n2", "n3", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4]] /\ history = 0 :> [current |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -437,7 +437,7 @@ State5 == verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, @@ -446,88 +446,88 @@ State5 == :> [current |-> [Commits |-> {"n3"}, header |-> - [NextVS |-> { "n2", "n3", "n4" }, + [NextVS |-> {"n2"}, VS |-> {"n3"}, height |-> 4, - lastCommit |-> {"n1"}, + lastCommit |-> { "n3", "n4" }, time |-> 4]], now |-> 5, verdict |-> "NOT_ENOUGH_TRUST", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 2 :> [current |-> - [Commits |-> { "n1", "n2" }, + [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2]], - now |-> 5, + now |-> 1398, verdict |-> "SUCCESS", verified |-> [Commits |-> { "n1", "n2", "n3", "n4" }, header |-> - [NextVS |-> { "n1", "n2" }, + [NextVS |-> { "n1", "n3", "n4" }, VS |-> { "n1", "n2", "n3", "n4" }, height |-> 1, lastCommit |-> {}, time |-> 1]]] @@ 3 :> [current |-> - [Commits |-> {"n1"}, + [Commits |-> { "n3", "n4" }, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]], - now |-> 5, + now |-> 1398, verdict |-> "SUCCESS", verified |-> - [Commits |-> { "n1", "n2" }, + [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2]]] -/\ latestVerified = [Commits |-> {"n1"}, +/\ latestVerified = [Commits |-> { "n3", "n4" }, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] /\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 3 :> "StateVerified" @@ 4 :> "StateUnverified" /\ nextHeight = 4 -/\ now = 5 +/\ now = 1398 /\ nprobes = 3 -/\ prevCurrent = [Commits |-> {"n1"}, +/\ prevCurrent = [Commits |-> { "n3", "n4" }, header |-> [NextVS |-> {"n3"}, - VS |-> {"n1"}, + VS |-> { "n3", "n4" }, height |-> 3, - lastCommit |-> { "n1", "n2" }, + lastCommit |-> { "n1", "n3", "n4" }, time |-> 3]] -/\ prevNow = 5 +/\ prevNow = 1398 /\ prevVerdict = "SUCCESS" -/\ prevVerified = [Commits |-> { "n1", "n2" }, +/\ prevVerified = [Commits |-> { "n1", "n3", "n4" }, header |-> - [NextVS |-> {"n1"}, - VS |-> { "n1", "n2" }, + [NextVS |-> { "n3", "n4" }, + VS |-> { "n1", "n3", "n4" }, height |-> 2, - lastCommit |-> { "n1", "n2", "n3", "n4" }, + lastCommit |-> { "n1", "n2", "n4" }, time |-> 2]] /\ state = "working" @@ -542,5 +542,5 @@ InvariantViolation == = history[s2$2]["current"]["header"]["VS"])) ================================================================================ -\* Created by Apalache on Wed Oct 21 12:41:29 UTC 2020 +\* Created by Apalache on Fri Nov 06 10:17:43 UTC 2020 \* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDoubles.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDoubles.json new file mode 100644 index 000000000..783f94282 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDoubles.json @@ -0,0 +1,969 @@ +{ + "description": "MC4_4_faulty_TestValsetDoubles.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "5AD522AA6CAD611640B450F30A3B3A5D5CE38C4FF9F0116B5786676F8C8EE665", + "part_set_header": { + "total": 1, + "hash": "5AD522AA6CAD611640B450F30A3B3A5D5CE38C4FF9F0116B5786676F8C8EE665" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "EsC5Pps5k8qHsRQuKZFA6V5im6+4tqBFeeHNwZreaMuD1+wrkiDGs3Uqfg+eKPOkvJ8vFHRZiI+lgfDXWKiEDA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "5l2jo2hx8+S8ayDp5CTaZzGJJvgacARjdCx5qJDKc11txgSxtxTeQXRtDccY1PnQ4Yyj9hzFOLK5ZlPCiFFrBA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "koV3vjxo//+D/LlD5x/fRgVq2zecKHF0pynr0Cz0TgkvCy1VCBdY8HJDyjR0h/p9Yc+hPW4cCeAH/FfD7z6UBA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "BIHRCxuw6CSk/WbPie4q2Mpt0QQIqdQv+4P8SV8JuwmIv0ZW4jew+YW8W7cN6WtbL8gcJb/g33x39APjWNMhDw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:19:02.160465794Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "5", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "5", + "round": 1, + "block_id": { + "hash": "B8CF8B629D9F80DF3637CD8F3E5E994130AAA07411941D64926CDA6AE95699C8", + "part_set_header": { + "total": 1, + "hash": "B8CF8B629D9F80DF3637CD8F3E5E994130AAA07411941D64926CDA6AE95699C8" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "vS6kg2N7jfvSZHTr6WtvpSBN4HX1fT11rc6oQUK9DbrZYIlaflKs3k6jMTcKxo1xIVWQQZUbOU9QsvjveLAbCQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 5, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 5, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 5, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:05Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "886823975F418A276BB1A0CFE1827628899C2B95326C5271B77C9C8150315CE9", + "part_set_header": { + "total": 1, + "hash": "886823975F418A276BB1A0CFE1827628899C2B95326C5271B77C9C8150315CE9" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "lhu81vt5xH7YNrS2+tXV1bH/tc7bOteZXV3NvWbkhzelm5psEf5fssukgHKfOMxhxUXYw0Q/QX52cJxiEv6BCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "EUa7RJrDFr36W9KQ7YtsR7P44EsecUgtiNwQxFFaqLoUJMy6vXQ+Y2eDD7jviynWvb12FqhJI4FOVAlakDq/Cg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:07Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "D8D42500E75F8D6F7B29CE46ABE3F0AF6F3EBF60EA02F39D84F97AA53B2D3C24", + "part_set_header": { + "total": 1, + "hash": "D8D42500E75F8D6F7B29CE46ABE3F0AF6F3EBF60EA02F39D84F97AA53B2D3C24" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:07Z", + "signature": "U/aY8exz7hAcfsaq51DPhovJoiD8Dk+Zks4aHI8XtC6HRhfTXAwGmH6KkYLGEtQiz4dw7LrRw93t2YciQ6RnDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:07Z", + "signature": "b1J+7g85iObbMxP6yR1kvrbEO2gntb8n5qIi/j7m+x8OhVT4DeqwQdTpY1FZA2OdNoZSoGrvPqASkF8lZ37JDQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:07Z", + "signature": "2qlEAqqy+qZc/N4gdSvOb/t1sWKS88NWL0OkWuwvAySuGxYhwAoZozTUtouFlu34SR7iAMw7StLn35oGHyeQCA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDoubles.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDoubles.tla new file mode 100644 index 000000000..523c42950 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetDoubles.tla @@ -0,0 +1,546 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n2" }, + time |-> 7] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 8] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1398 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1398 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n2" }, + time |-> 7] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 8] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 5 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {}, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {}, + time |-> 4]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1398 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {}, + time |-> 4]] +/\ prevNow = 1398 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 2 to State4 *) + +State4 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n2" }, + time |-> 7] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 8] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] + @@ 5 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {}, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {}, + time |-> 4]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 1398 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] +/\ prevNow = 1398 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State5 *) + +State5 == +/\ Faulty = {"n4"} +/\ blockchain = 1 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2" }, + height |-> 2, + lastCommit |-> { "n1", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n2" }, + time |-> 7] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n1", "n2", "n3" }, + time |-> 8] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 3 + :> [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] + @@ 4 + :> [Commits |-> { "n1", "n3", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n2" }, + time |-> 7]] + @@ 5 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {}, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> {"n2"}, + VS |-> {"n4"}, + height |-> 5, + lastCommit |-> {}, + time |-> 4]], + now |-> 1398, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> { "n1", "n2" }, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> { "n1", "n3", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n2" }, + time |-> 7]], + now |-> 1398, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5]]] +/\ latestVerified = [Commits |-> { "n1", "n3", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n2" }, + time |-> 7]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 3 :> "StateVerified" @@ 4 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1398 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> { "n1", "n3", "n4" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 4, + lastCommit |-> { "n1", "n2" }, + time |-> 7]] +/\ prevNow = 1398 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2" }, + header |-> + [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> { "n1", "n2" }, + height |-> 3, + lastCommit |-> { "n1", "n2" }, + time |-> 5]] +/\ state = "finishedSuccess" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ LET t_34 == history[s1$2]["current"]["header"]["VS"] IN + BMC!Skolem((\E t_32 \in t_34: + BMC!Skolem((\E t_33 \in t_34: ~(t_32 = t_33))))) + /\ Cardinality(history[s2$2]["current"]["header"]["VS"]) + = 2 * Cardinality(history[s1$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:19:02 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.json b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetHalves.json similarity index 52% rename from light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.json rename to light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetHalves.json index 7388856e8..a1433c899 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustFailure.json +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetHalves.json @@ -1,5 +1,5 @@ { - "description": "MC4_4_faulty_Test3NotEnoughTrustFailure.json", + "description": "MC4_4_faulty_TestValsetHalves.json", "initial": { "signed_header": { "header": { @@ -73,7 +73,7 @@ ] }, "trusting_period": "1400000000000", - "now": "2020-10-21T12:41:10.160328407Z" + "now": "2020-11-06T10:19:24.160465796Z" }, "input": [ { @@ -86,85 +86,12 @@ }, "chain_id": "test-chain", "height": "4", - "time": "1970-01-01T00:00:06Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" - }, - "commit": { - "height": "4", - "round": 1, - "block_id": { - "hash": "5FD797E3E8932D06A1B85117FAAA4EA0A94AE7C08D1F3956DB3DCFB5210CF9E1", - "part_set_header": { - "total": 1, - "hash": "5FD797E3E8932D06A1B85117FAAA4EA0A94AE7C08D1F3956DB3DCFB5210CF9E1" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:06Z", - "signature": "Dctn272+keDEml9Z43fxCMKQbMk8j5O77doKNFbW+UKB998sNVIKdhV3e51ofyNCuH1LU8MwUUL7/65bBbFGDA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:00:07Z", - "verdict": "NOT_ENOUGH_TRUST" - }, - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "3", "time": "1970-01-01T00:00:04Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, "validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "consensus_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "app_hash": "", "last_results_hash": null, @@ -172,13 +99,13 @@ "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { - "height": "3", + "height": "4", "round": 1, "block_id": { - "hash": "D3D9A1F2E19635D4706ABB6650C136A11689D909E39A75422B281B5069A315FF", + "hash": "34397F4AAC5467610F5ED9767E018C2CDE93F283E0E566884733652E6B4FCB72", "part_set_header": { "total": 1, - "hash": "D3D9A1F2E19635D4706ABB6650C136A11689D909E39A75422B281B5069A315FF" + "hash": "34397F4AAC5467610F5ED9767E018C2CDE93F283E0E566884733652E6B4FCB72" } }, "signatures": [ @@ -186,13 +113,13 @@ "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:04Z", - "signature": "3qlwh//0DfysS4XasdH6K7n0KlCZz+aPLdd7v46K61ndkp18fxb1ktdRDV+xfcveFA/gS8Bphgs8Z0Me2yMHAQ==" + "signature": "iBX8syYRPD9Syn4ZGU9xz5IYnBO4vAffgQ89jlfOgAIyyIbNxilAQ21QrQCqQSqIF9o8Cyq8jVp+dvU1tjPxBA==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:04Z", - "signature": "EZEuA3PPjFqMsotL3upErFgrXrAA5vl2YJ58sFiO5M87PUJKAZ0mxtc4ekW6aY+fBKlxgq0pyQSvc0WIjk03Aw==" + "signature": "XDcZ586mM7RWzhXBycTR6/kjzMdkJqB5AclcOWqQ6SSDynU0HVyTkWqGpsPOMBgGX12nnNrtaygUQOaLoM5XDQ==" } ] } @@ -222,10 +149,10 @@ "next_validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null @@ -234,7 +161,160 @@ }, "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:07Z", + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:19Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -247,12 +327,12 @@ }, "chain_id": "test-chain", "height": "2", - "time": "1970-01-01T00:00:03Z", + "time": "1970-01-01T00:00:02Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, @@ -263,18 +343,18 @@ "height": "2", "round": 1, "block_id": { - "hash": "112F17D3CFDDB085DA65556899952FDF4D7EAC40B58ED296191BE5BD6E8FA985", + "hash": "984DFDEECEDC96655232278F84C7E1D72D68E135E1CBDAF03BF1D0AFAD832CAD", "part_set_header": { "total": 1, - "hash": "112F17D3CFDDB085DA65556899952FDF4D7EAC40B58ED296191BE5BD6E8FA985" + "hash": "984DFDEECEDC96655232278F84C7E1D72D68E135E1CBDAF03BF1D0AFAD832CAD" } }, "signatures": [ { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:03Z", - "signature": "0Qk3H5kSYDCuUoVslBzaYh1j4Nb3h1II0a1KpIB1Ijj5NL6BZDovFev2bBTUKS1nkIO6dSIuNBfDTrKDX8o1Ag==" + "timestamp": "1970-01-01T00:00:02Z", + "signature": "TTgdXRj9C/TzqQaUBdHf+FeF/84ccuDzNfY3xLvWEtRQ2zl8zrx4QSVAhKRp1x+qog3FOA0T0utYh+XkdV98Aw==" } ] } @@ -295,19 +375,10 @@ "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null @@ -316,7 +387,102 @@ }, "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" }, - "now": "1970-01-01T00:00:07Z", + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:19Z", "verdict": "SUCCESS" }, { @@ -328,13 +494,13 @@ "app": "0" }, "chain_id": "test-chain", - "height": "4", - "time": "1970-01-01T00:00:06Z", + "height": "3", + "time": "1970-01-01T00:00:03Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", "app_hash": "", "last_results_hash": null, @@ -342,21 +508,21 @@ "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" }, "commit": { - "height": "4", + "height": "3", "round": 1, "block_id": { - "hash": "5FD797E3E8932D06A1B85117FAAA4EA0A94AE7C08D1F3956DB3DCFB5210CF9E1", + "hash": "C051C1F2EF0DA24140A04E3BD43252E90A262F8ABFF4ACECAD830EE4DA332C0D", "part_set_header": { "total": 1, - "hash": "5FD797E3E8932D06A1B85117FAAA4EA0A94AE7C08D1F3956DB3DCFB5210CF9E1" + "hash": "C051C1F2EF0DA24140A04E3BD43252E90A262F8ABFF4ACECAD830EE4DA332C0D" } }, "signatures": [ { "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:06Z", - "signature": "Dctn272+keDEml9Z43fxCMKQbMk8j5O77doKNFbW+UKB998sNVIKdhV3e51ofyNCuH1LU8MwUUL7/65bBbFGDA==" + "timestamp": "1970-01-01T00:00:03Z", + "signature": "5l1ryY8Migv9qBZOGs8B2wDyh6SUO4uTgTfbTS2ecTvPMGex8dxmXs6yfhp3sDjsyYm190Nq7TkTU76BQzqVCg==" } ] } @@ -375,72 +541,6 @@ ] }, "next_validator_set": { - "validators": [ - { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:23:22Z", - "verdict": "NOT_ENOUGH_TRUST" - }, - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" - }, - "chain_id": "test-chain", - "height": "3", - "time": "1970-01-01T00:00:04Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", - "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "consensus_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" - }, - "commit": { - "height": "3", - "round": 1, - "block_id": { - "hash": "D3D9A1F2E19635D4706ABB6650C136A11689D909E39A75422B281B5069A315FF", - "part_set_header": { - "total": 1, - "hash": "D3D9A1F2E19635D4706ABB6650C136A11689D909E39A75422B281B5069A315FF" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "3qlwh//0DfysS4XasdH6K7n0KlCZz+aPLdd7v46K61ndkp18fxb1ktdRDV+xfcveFA/gS8Bphgs8Z0Me2yMHAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:04Z", - "signature": "EZEuA3PPjFqMsotL3upErFgrXrAA5vl2YJ58sFiO5M87PUJKAZ0mxtc4ekW6aY+fBKlxgq0pyQSvc0WIjk03Aw==" - } - ] - } - }, - "validator_set": { "validators": [ { "address": "81D85BE9567F7069A4760C663062E66660DADF34", @@ -462,23 +562,125 @@ } ] }, - "next_validator_set": { + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", + "id": "n4", + "voting_power": 50, "proposer_priority": null } - ] + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null }, - "now": "1970-01-01T00:23:23Z", - "verdict": "INVALID" + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" } ] } \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetHalves.tla b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetHalves.tla new file mode 100644 index 000000000..e0f99abb2 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestValsetHalves.tla @@ -0,0 +1,552 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC4_4_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n2", "n3" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 4 +/\ now = 1399 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1399 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 1 to State3 *) + +State3 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n2", "n3" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 4 + :> [Commits |-> { "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 2 +/\ now = 1399 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> { "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4]] +/\ prevNow = 1399 +/\ prevVerdict = "NOT_ENOUGH_TRUST" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 2 to State4 *) + +State4 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n2", "n3" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]] + @@ 4 + :> [Commits |-> { "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" @@ 4 :> "StateUnverified" +/\ nextHeight = 3 +/\ now = 1400 +/\ nprobes = 2 +/\ prevCurrent = [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]] +/\ prevNow = 1399 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State5 *) + +State5 == +/\ Faulty = {} +/\ blockchain = 1 + :> [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2] + @@ 3 + :> [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3] + @@ 4 + :> [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4] + @@ 5 + :> [NextVS |-> { "n1", "n2", "n3", "n4" }, + VS |-> {"n2"}, + height |-> 5, + lastCommit |-> { "n2", "n3" }, + time |-> 5] +/\ fetchedLightBlocks = 1 + :> [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]] + @@ 3 + :> [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]] + @@ 4 + :> [Commits |-> { "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4]] +/\ history = 0 + :> [current |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> { "n2", "n3" }, + header |-> + [NextVS |-> {"n2"}, + VS |-> { "n2", "n3" }, + height |-> 4, + lastCommit |-> {"n4"}, + time |-> 4]], + now |-> 1399, + verdict |-> "NOT_ENOUGH_TRUST", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 2 + :> [current |-> + [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]], + now |-> 1399, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> { "n1", "n2", "n3", "n4" }, + header |-> + [NextVS |-> {"n1"}, + VS |-> { "n1", "n2", "n3", "n4" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 3 + :> [current |-> + [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]], + now |-> 1400, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]]] +/\ latestVerified = [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]] +/\ lightBlockStatus = 1 :> "StateVerified" + @@ 2 :> "StateVerified" + @@ 3 :> "StateVerified" + @@ 4 :> "StateUnverified" +/\ nextHeight = 4 +/\ now = 1400 +/\ nprobes = 3 +/\ prevCurrent = [Commits |-> {"n4"}, + header |-> + [NextVS |-> { "n2", "n3" }, + VS |-> {"n4"}, + height |-> 3, + lastCommit |-> {"n1"}, + time |-> 3]] +/\ prevNow = 1400 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> {"n1"}, + header |-> + [NextVS |-> {"n4"}, + VS |-> {"n1"}, + height |-> 2, + lastCommit |-> { "n2", "n3", "n4" }, + time |-> 2]] +/\ state = "working" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + Cardinality((DOMAIN fetchedLightBlocks)) = 4 + /\ BMC!Skolem((\E s1$2 \in DOMAIN history: + BMC!Skolem((\E s2$2 \in DOMAIN history: + s2$2 = s1$2 + 1 + /\ BMC!ConstCardinality((Cardinality(history[s1$2]["current"][ + "header" + ][ + "VS" + ]) + >= 4)) + /\ Cardinality(history[s1$2]["current"]["header"]["VS"]) + = 2 * Cardinality(history[s2$2]["current"]["header"]["VS"]))))) + +================================================================================ +\* Created by Apalache on Fri Nov 06 10:19:24 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestFailure.json b/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestFailure.json new file mode 100644 index 000000000..4c63a2eb4 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestFailure.json @@ -0,0 +1,4775 @@ +{ + "description": "MC50_2_faulty_TestFailure.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "E88731710E052776471249E555FE1C510FC8DF692F13D051B8381231233A38F5", + "next_validators_hash": "08EFD4829145455AE8394E9F22FFEFBF7B32E6883FCA991AA66AABF61CBD7DBA", + "consensus_hash": "E88731710E052776471249E555FE1C510FC8DF692F13D051B8381231233A38F5", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "60EF894E71B5D2A2FFA8361FD8D938C0BBAEBCC2AED1F87F3C8EAB7ACAA5C91A", + "part_set_header": { + "total": 1, + "hash": "60EF894E71B5D2A2FFA8361FD8D938C0BBAEBCC2AED1F87F3C8EAB7ACAA5C91A" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "G4dwaVxrzn2zPRYlvmq7J9C5GV/qqErImmMw9zD4kzjjMiXHA4OQEf3PdgMXIZNWctHeQCpjchJg2PRf5jlGCg==" + }, + { + "block_id_flag": 2, + "validator_address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TvHCQffC+fhLQIZbzjDs42ldHdU3u0BBbQtz7OxOGhQImDTSm+xETRPkMsGVXJ2FFS+PTQubgtoyOD1J+pYiCg==" + }, + { + "block_id_flag": 2, + "validator_address": "26E91E700545D79E8A18092C393DB76294DF393A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "IJILZYuLo/7bnDipEmWjgQ0HJMJiw4DFb0p0/iJt+Dim1Dn2Hpv0nvpBLgM3e8D5dCKo4IXlGizmGjulamWHBg==" + }, + { + "block_id_flag": 2, + "validator_address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "upE2uCBIBUaFL3R4XCzYGcSJCQMqEOxCd1Vsl8gLxbg0eZKqL5TSNWODT4MoOXNvrVYrZBYEFpWPbi0TO1DLBg==" + }, + { + "block_id_flag": 2, + "validator_address": "2D963CD0FA15D15C1C200D578CCDC2C692B72036", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "nAdLf6ykf+TKQ0pUrZJwzqGX8uN0pi2wBEAzLVtiRryvfqkh4Pmv/6Bk9FHsuQ0auv21ciZW+aQG8hQmteUtCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "361491162A6178776B903E57AB7C4D909394B4B4", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "UPUU3dKW1zYdqlAg+u7YO98t4v3lFI0GlCB1MSzBXS2sH1PW2hS5uPx9KcK9nALWV1own41CH9B1u5Y24b6qCA==" + }, + { + "block_id_flag": 2, + "validator_address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "yERY9ayNuVEUG2QqhR/iUE16Q4OaodAohz8sZd7/PtL22sYa85KQ/6rAy/rhgFnKyK1318laNbnxl6aCoREFCw==" + }, + { + "block_id_flag": 2, + "validator_address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gYjCXvB80z2DJUCSg0FA/FQ+DwE8l2531E0nH7JpJ0K6auHTQS9WZgEXYOKctCguHxrp1DEf1o4Nv9VKAupoBg==" + }, + { + "block_id_flag": 2, + "validator_address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "kpcQoxGUae6HPp6xiQx65XS1SudthvxddiwbV6d0t9fVS/8lqSObheJ+3ZM6pa0eSznPblDbEjTMwWPA74ZwCw==" + }, + { + "block_id_flag": 2, + "validator_address": "42D162EDB46B7C1FEA616810A7617A6369958ADE", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Z3hxLlYRckzoYevoEoxRI/YYLyUm4CtyFlfsE7cpYh0tUBroa2/h542LgyXUMSQUszLo7EMV0Gkm80hs3GdTDw==" + }, + { + "block_id_flag": 2, + "validator_address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "e7TiRKUXc/HY+PQfJ9+Y2Dx45ueMo2bYhFaLIjZjPBLuGAHSaQwzI9HroYUap29eN1DYXD3AcDCIXtDSoqH/CA==" + }, + { + "block_id_flag": 2, + "validator_address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "iOdWacB1tD0nOX8x2zv4KvjSGESJUligksPbXOwmrOnF958lmGc1gX6qEhRZlDh0jKY+PW4JG46iey4kdmHKCg==" + }, + { + "block_id_flag": 2, + "validator_address": "4D9FD26B2372FBFE05C0452D534C6014C4D7F887", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ek3FZW+ecbN+vP7tvrMX1vyKuZaUChkXRdUTHY+7Qw7dfCqieMhRA1QFt0IfICkBJU+KzO/9gRsZgfnRzpvVDg==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "7IUNadF+Pn0OF/gMfHlIQ9o2/ei5DRuChVPB01tkzETRAI5FeGHfDTXIXO0MNW0wSuEiHWzmTJsZ+QRlLbxCDw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "zzMOYeDgqz7WBZxn3SxsSmAnZNwLXpldrA47dV+5IQQc/wFez1YpzTr6aviuTnNd8zp/P6qhAqrLljdOGkEdCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "SmK9b2DB6mxmDcapySkLuE13bDUOtzmgYevX9V1piqVhtK7es7Shr00htwffMgmGUGJTlYaQpDK55ghcEm19DA==" + }, + { + "block_id_flag": 2, + "validator_address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "wWuyTQw0dTyh9elqqgJ3Kdgq7BOrjrqVqq5v8GOPcdj65jqk4TaqzJgeoWc5OI6an61XLgf9E0oL0QFe7wtUBA==" + }, + { + "block_id_flag": 2, + "validator_address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "XRsjunPv7zQ+SxpICJATc3Y86A2qRLvmsCB59oZEVoLB/SYc5OhoAvPKaLoONdRy1b0iNL0uaDyChU0wmSNWDg==" + }, + { + "block_id_flag": 2, + "validator_address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9bNmXEUcHAnE6m3+sCQoDwQcCRqD7YVjkJ3Lws3N1tSuMG5xHeHpYabZEsWA3I7uk8PFoW7W+h+gTCKkFo9QCA==" + }, + { + "block_id_flag": 2, + "validator_address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "C7YvZvNirpz4eCPK6ExOmb8Xdk3xUS/b7bj2xIHc+Lg7b1v5ejnvfndtIBdyW0ZveX2a/derViV8RYAauRPvBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Oc8hjH/GntZRifbRbFBgi8bFVMhzstRml1YojGy/D8GHTZPZg3v/ySClyfDDA7DPfS0ZfWdnPTtE5UuWPLtaDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZRB7YOTtZ8sRJB2LH+tNA9WmU+DZFPMFhDSCv0gVt+BgfiZ44d1ZaP00cc81IYCkW+0rw+wLBpwUiBtKtqLwCA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "h0iNs9ltNstgLam54z70rRHr6DUf8FiFFYuHeATh8ityZ20nv/CSft4/8Gv7mPDVvl6rg4JXIgVSm2RVqEaYCw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "eqZ//Pv5VaI4CRDBEiVxligsp17GMc307UKC2vCn4lqBrrCQTpSZd5GJ2reIoKOV1iIKxmFXdfTAA7emcT6xBw==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZclOOR28eHo4Un7VC1yeB78T73+A3nQj10FOCPq/J181zgZEJL/a+GApOqI3TVixinUDSnDX651mh00KhmnwBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "M43diG8Z/dBeti/rmiZXQquKtIHof5CccW6mfIZAEqEvueHjI8/KfqotLaTBSEyseQGtOmIXGPTvrwqEGu6LBw==" + }, + { + "block_id_flag": 2, + "validator_address": "92932AD7E082B90296C192F3113710CD6F99432E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "R45Da/p95BLfFliavdmjzLFSl789K7mG4d8bxyuPbB9ZajdDHFqiV+m756yzG5EP4yf1XA3hBxH9VPcVh9hYAg==" + }, + { + "block_id_flag": 2, + "validator_address": "990CDD32CD8EF97E5EC9D3E9F8C25543A7EDAA33", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "y/unf/7+uwfY5JGJ3li1+7bJqnr/A5nJ+otNcC3grMBWJvR1b4YJtzHc3NdgYGowqhW3BR+2DBfnuc6u7om/CA==" + }, + { + "block_id_flag": 2, + "validator_address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8OV7gllyfAnuE5BBJ8u8gHpend7kUerR7O/5AE2hPCgDaWzdzaoDEGH0MBZuBueElDUIMNYpz5MdKxbW8L/7CQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "rjtAnxAi7t1DBZ2sd/QTOK/ksKbV0hmm3Z5Td0YbSq5B0n4nsqz0UBhgxPLDkIJLS52Poomx4H6ttj7QJWffBg==" + }, + { + "block_id_flag": 2, + "validator_address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Wb4aE5q8WzdPbl61ibXNNKVVJ15PXWXv6E7BTUItDAUOadgCmYDucIKmxsu7gqMheknEclJ4Xq98bWpV3OiZAA==" + }, + { + "block_id_flag": 2, + "validator_address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FDzTwzXe3VZR5uVnPB701HUr00rqsfRT69MWu2/v+zx9C9MwQL/HucUhps7pGww1ZOiXEMRqQq3mzX7DOUfaBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PyzkScpZkEB3LQlGfuMPH6f1/e++Bd5ygnPDkSMpHGvocmqyEPMKXgKgZWo3FJ3tJgjNWKZu/xbXoJ7ebIvLBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "AD28DEF4048F1BC51A8800A26E697A7771A6AF40", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "AebYqcJf/S7/oN+FmtF9tyABp5sZuYVBe1ZvHcU7E3jZw7Mmqk0Jf0EbC6M95fEU1WSTYa5Ece6o7oQQY475CQ==" + }, + { + "block_id_flag": 2, + "validator_address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "VrYft1oNEkxV9bWlkrf4stU0hdb2ugpw/V0tvK2BDzgWObdzWFrV5GSeQDy8uhU4f5O7LF8+kb+2InebJOtoDg==" + }, + { + "block_id_flag": 2, + "validator_address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TTJG2Q1bjUBnfDwQImujbfxC5us0Ku12MQRCWUXK+pI23pm6CdaOC3n1Lri2CXiH0yWv3wLpzfKV4Zz8YlD9Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "JsDr+trotRoTBQg95zZX6JvJ59E8y+VK4LNuSn2ad/TOpym6KKdkfvZ2iDqLapvPI/lrh9LdY0iYmhpxWoJZCw==" + }, + { + "block_id_flag": 2, + "validator_address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "tQTER440cGX2OAgHpPvfs7U7vyyQyGKOnLHtBHqywdS2Mbj7yAtz0/0TWPOB8eoC9GEKn72v6vXyyKgueSyGCg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4+fS5kD8Bsu2tr6YAtKPn6qmbmGhr/lhfMEzdd7MmX9BlrYUwc5wHImPW3kMiwnrQSAlphbvYw2v+JPT0zJ6CA==" + }, + { + "block_id_flag": 2, + "validator_address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ewko0EHjK5upl5A/zOXfDSyDqdtYGvCM8Em5sFFpZo+X8n8O5cy8NW0gdWQgKrHxDubv1i2UXu4Ei2qs6eEqBg==" + }, + { + "block_id_flag": 2, + "validator_address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "JGFYKjXxPvr4VSYoRp7mrP53e0OyKwLvxft3kWJFf41HXfjxv4pEz7dohb9guiwJb4eHvD4fjOAvtWGKOAioDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D281629B8289556EC5E1C9C2A78FEB2B0A18B4EC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "pB3JG3TQYnSIH2KG1jHz+k5TWiCBH/3HGJVfVfKyJmUL55CQAwPx3XPHbN3V0b5SW63gbu05N6SPtg5wydXnDg==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "0e6vTCiR3743rG7Pq4hVdKonq/lqHI0ZiaAmFdTTZY+LfNSQpLc/78X4rCOzgLrFysGePirBfv5liByScICFAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D447195654516BE994064E03868856302AEAF1D1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "EXB+Ojwp19xAcB8Gbl6pMz7UtFnWAY0Mhopk9vM19BzmxLFRc/ToutmS8LvHzZ+bek5EcESCsX0FlVjgRngvBg==" + }, + { + "block_id_flag": 2, + "validator_address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "wL939iM/iyFLb8j4CPQKPVdkviFz0cWlb+PXLOdQLcHiJ9QnYRmX746lZXNG9i7ZGf9SteUSc5+ppi5uVCKyCA==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "cFDMfxtJyar2MQJ7Dww2/zyvoGvN1Aew2bET8ftgp3NV5ov5kZtA2QFrXaRdsy7DhTn4L7BMWEtBeh53KVWwCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NjeYnNJREdcUK7Tn+0vNR0dYS/Dr+WF6c+Fgig+QXoodPeVnmp0qcXlUQbOUS/Y1MttrhXpR6kmXBCmpvtkzDg==" + }, + { + "block_id_flag": 2, + "validator_address": "F1DA81336F50B87982CF10581D308080031406C6", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "TQiARNbvUJNN9quiaGf4GETYTVVCfTq81Ig2Xzl1yb++qJBk+rPNPICxaOlLjKcLF85RSdkKUE7Vhsu4rZlcCg==" + }, + { + "block_id_flag": 2, + "validator_address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "JaajCbODp2f/H8iBzSnROfaj832qsCcVyfcELQNH19wwWUgol26xAEIQp/CPMJB5orc+3TcItAo/7wXu3UMnAg==" + }, + { + "block_id_flag": 2, + "validator_address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "UloaY8qjgq4E1cbFhNw4QRnBlU29jr/FddTyG7HU00/VIpBdLIJ6F9nnLdYIQqkspcodlFPM04C08j8ZQO42AQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "26E91E700545D79E8A18092C393DB76294DF393A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F8xDDGP4gRkFMeuIlULpbOP6aGPdTe5gZT7kCCnAQIY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "fWMaYDTFwdDo7SVw9hBIraX2GVqvzKhNKEUkr/2ZnEc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "361491162A6178776B903E57AB7C4D909394B4B4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QlwrDiydr8tfRonzwMnML1JYtWUHQZiG6aqhWsXRriA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "etUp4mnEHDdNnJSwu5KW8EMXYt7n94iYZm+y7xa9ym8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R1rD/692T348fL4cA0mvvbK9aANwT0vBNAT5B9+p+rw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JqkfZ01ZvkPHj9ohj0F2Saa5t6KIX5uq1bhHS7YAyxk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GR4akX9jBcU4iFUBqB3NGwD3CuSTGPHiaWofAhCjCiE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "r7QqYEO8hh6xOwJMpsH+gYer+oOcuP/UQyG7NNsLLHk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "IPoyPEpBWphJbDnocj0x7bFbIX0grHlypAkknLjia3E=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JgRep5bgxhsdM6EVAEzE/cEaxMsdR6/VtG24KHgHDyc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2ekMO1AKawC1gbXty/y6KBVpUfC9RcKyf3sR0ZK7UR8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "92932AD7E082B90296C192F3113710CD6F99432E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GJlkT7S82nRWW34K5ax6ZCW9EV2nt1E/PF1P5LQgJdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "990CDD32CD8EF97E5EC9D3E9F8C25543A7EDAA33", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UseUFPt/FyVO1D19U7tHq4/CAsW/JxWOeTbw/ZftxMM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Hm8gqT6zv3BHDTjlY1nLMK2U4gte/cducumkYBgvXig=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQBydj5eqXzfBc++Y+9Q5RaUtEXtQghUR0duadGH9dk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "z7XkAAZ+x6klleinW1VTrsMLnAwNF9LHBFprFx1E4bA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEXsZIGASOuKR3SQn2cakTAkulEbm2kElVjj50W2oJw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZHfThztGFsj0VfR6xV1r5ZA09Q6/+np9oYXs8CWY4F8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AD28DEF4048F1BC51A8800A26E697A7771A6AF40", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "L7pTIdyDJ9DHXRXMGcDeLxQ7KUP3AKiPpggq385vkrA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6lcuin9eD6uwAu9qjsoRjtd+uCtVUZbn//5UqLng9mI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8f/zBc9sYTK1e73NefD07XG1gA/fqVsf8CZ5EyualYk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ct8qHvpO82bPqzj2YxHkFgE+fmxVF0q7fTuvXzsK6Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZDJSsUONDbWTaQATQjuhqxsQFTnSyzSburJRflWe6ro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "55KLg7eVl0IyiFhu7r38WGQizm6hglE4rsAo68dGK28=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D281629B8289556EC5E1C9C2A78FEB2B0A18B4EC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "xzIY0miEtnX/3fduBl9vYN2iDEmt7HIGK3Qb0bywdbU=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D447195654516BE994064E03868856302AEAF1D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u7GVl6wdnCsWjxNSxnOCwxnZTWLYTlaB6to7efS7RWY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "CkWTr7zqfXcDHuTn961EfHkJv82Ql1oibFWbfROfbCc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F1DA81336F50B87982CF10581D308080031406C6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TCNu3Qckfx5+zXKvDTIHAFd/FZgbk013UFYIZqWl7w8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F4d36ebIiyCzz/pk4sGrxYnls8XuzOfMRh/lF2LTdA4=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T09:48:36.160465611Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "420547B3F90F480D632E845B08F9B5845048DD9E21B8B0BD864AB8A9AE72149E", + "next_validators_hash": "1539DC64D3CE1586B2B31439DA6C2F09607E987D34F569A1A0A5B3E18CB022B6", + "consensus_hash": "420547B3F90F480D632E845B08F9B5845048DD9E21B8B0BD864AB8A9AE72149E", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "26E91E700545D79E8A18092C393DB76294DF393A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "8E768DE9D3826AA2459160B44589033858E646A3DF5CCC08E2EDBD04C487CBB6", + "part_set_header": { + "total": 1, + "hash": "8E768DE9D3826AA2459160B44589033858E646A3DF5CCC08E2EDBD04C487CBB6" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "efm3SY51AG7rgHScPF49ED7oK45+h/nGGVDxpOXh/2YBVde8ZQPAOKC2fiT4h7UOa2wfzTlL6MTIhIcP7Z3jAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "N5L+usNeF2JpIEOfkjYSbHm4ZjeSlU0cPiJLd392Kj+spzCcXGZWd1/ifAPw01TM6hhBKZAbllsuiEqCLlfzCg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "BOi2jeyFLFfPFlUXZtbywIIV72fyofiX/Fm1hEz0JsB7mDEYh7KfmtbauhwzHpJ4/dPKr/nl6oK7RMQsTMzrCw==" + }, + { + "block_id_flag": 2, + "validator_address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "WcLwYP3UlmK9KjqzC8sRHNd55xg9Tth27NhQmLY9SBDivmWzHv84ggj03zpjdfw2jG1VS4x+r3Q6YT1mkxRjAg==" + }, + { + "block_id_flag": 2, + "validator_address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "QCBI54dUjx3SpLAHop7iXoix0fWfhYReWO11UCi2iEaZSc0oKcTGt5mKSAQGgoNX0eH8z9TmXdQpX2BkXCjSCA==" + }, + { + "block_id_flag": 2, + "validator_address": "42D162EDB46B7C1FEA616810A7617A6369958ADE", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "G7snhsMHwie9JkVLXJU+t1N1CanQo+MR6ubXRnwynBMnc6cNQ338e9tW1UjJI70+Y2k1eJEjCvpykAmKPmD1Dg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "4D9FD26B2372FBFE05C0452D534C6014C4D7F887", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "H4GY7JlBIWIpMw5pSsj6qrwmp4OLNJjLjAm3I0c3jeuQTUbSEyJatPGEPO/CfJrGD0gI7sMaJlZt38zkuLzHDQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Rn7bjEFNumDO5AD2yBVJLlvZvIGDyJluT8cjrIARhYadtpnwk4cL68wOZNnIRNjkHlcMGY4IjGpc5sB3lb6cAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "UXtDpGzCrvyMK4x7ycgKsefCsELRPPOe4TGbmpW+SFJF9eUZWfWnhCcVs7JkdXL9Goa9flayFuFdfGFG/WkMAw==" + }, + { + "block_id_flag": 2, + "validator_address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "zyN3qWOHwAqr8yK3Hf7wZfINLlZ2XAXs73a4NrnMvPNcxht2QraX0rKwTbV0yHJqshfd0XqrFQd+ZRGTiLFRCw==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "hghzytbcEumyMA0Il3RN6r5oCL7xZBc7CU8sF5B8ttTji3HA2NCU0wBqbC0gkpOJ8rttekjJa8VLjfM7Os6YCg==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "KQ+Z76V5CE7mDqq9CoTeXYgQkxvCxbMvgInx6DE/CCVvN/w0tahgd5iOra7eIwrVTKy4Ims2OULvkPkAr/A+Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "92932AD7E082B90296C192F3113710CD6F99432E", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "R3I0PRRIhSsVTUQ/sGcA+l4mph/lcRQ2WtsiSqv08RAT4mJA1WRZ+57qSPQ7s3vXmLKtX8Ro4mKnDiU+t0ivCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "TBU+XfnCSMMSJbJ3GrB0jRwQkMj2/PB+vvbRvcddY5zwHBiLBe4MjLPJBumRlnor/TaH+Jecz7Jp4+3cJaaHCw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "9qUTLPf1IVLUWK4swB+e1s+hJoxcwYwsnEdRwgcwfCeqhhIb0g6jQVw8abD2i8+bnWGB4zelBv8SXtds908UAA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "26E91E700545D79E8A18092C393DB76294DF393A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F8xDDGP4gRkFMeuIlULpbOP6aGPdTe5gZT7kCCnAQIY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "fWMaYDTFwdDo7SVw9hBIraX2GVqvzKhNKEUkr/2ZnEc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "2D963CD0FA15D15C1C200D578CCDC2C692B72036", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Uq1fQj/TXkpg+zP37a//6YC04vQHWraWfYSg88fMHxw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "361491162A6178776B903E57AB7C4D909394B4B4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QlwrDiydr8tfRonzwMnML1JYtWUHQZiG6aqhWsXRriA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "42D162EDB46B7C1FEA616810A7617A6369958ADE", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "U4HzaR1kBj9HGcZU1I3rIZMwMoikUmYQyIMZktuBOF0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JqkfZ01ZvkPHj9ohj0F2Saa5t6KIX5uq1bhHS7YAyxk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GR4akX9jBcU4iFUBqB3NGwD3CuSTGPHiaWofAhCjCiE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "r7QqYEO8hh6xOwJMpsH+gYer+oOcuP/UQyG7NNsLLHk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Pfy3anXtYHMFjDLvM+5jJN3iS5Ypz9NMJ1KTNVjfJ7I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JgRep5bgxhsdM6EVAEzE/cEaxMsdR6/VtG24KHgHDyc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UGBPzd5VtGwtUkXOkCgJuzUO6s7Zk0RGKCo/Csdlqf4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2ekMO1AKawC1gbXty/y6KBVpUfC9RcKyf3sR0ZK7UR8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "92932AD7E082B90296C192F3113710CD6F99432E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GJlkT7S82nRWW34K5ax6ZCW9EV2nt1E/PF1P5LQgJdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Hm8gqT6zv3BHDTjlY1nLMK2U4gte/cducumkYBgvXig=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQBydj5eqXzfBc++Y+9Q5RaUtEXtQghUR0duadGH9dk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "z7XkAAZ+x6klleinW1VTrsMLnAwNF9LHBFprFx1E4bA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZHfThztGFsj0VfR6xV1r5ZA09Q6/+np9oYXs8CWY4F8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AD28DEF4048F1BC51A8800A26E697A7771A6AF40", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "L7pTIdyDJ9DHXRXMGcDeLxQ7KUP3AKiPpggq385vkrA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ct8qHvpO82bPqzj2YxHkFgE+fmxVF0q7fTuvXzsK6Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D447195654516BE994064E03868856302AEAF1D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u7GVl6wdnCsWjxNSxnOCwxnZTWLYTlaB6to7efS7RWY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F1DA81336F50B87982CF10581D308080031406C6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TCNu3Qckfx5+zXKvDTIHAFd/FZgbk013UFYIZqWl7w8=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "26E91E700545D79E8A18092C393DB76294DF393A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F8xDDGP4gRkFMeuIlULpbOP6aGPdTe5gZT7kCCnAQIY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Spb0BakJqr3uNaAEqdaGbv77bQEwym0/6cl/tnCdkGM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "M5rP8lPaJdES+Bd4oWI/va2sRUvbJiYINzOpUdiuO8Q=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Pfy3anXtYHMFjDLvM+5jJN3iS5Ypz9NMJ1KTNVjfJ7I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UGBPzd5VtGwtUkXOkCgJuzUO6s7Zk0RGKCo/Csdlqf4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEXsZIGASOuKR3SQn2cakTAkulEbm2kElVjj50W2oJw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZDJSsUONDbWTaQATQjuhqxsQFTnSyzSburJRflWe6ro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D447195654516BE994064E03868856302AEAF1D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u7GVl6wdnCsWjxNSxnOCwxnZTWLYTlaB6to7efS7RWY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F4d36ebIiyCzz/pk4sGrxYnls8XuzOfMRh/lF2LTdA4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "wqp6kT/3DEZ81E8BAdD802/NccJcCyBWBVrah3EOTFk=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n12", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n24", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:22Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestFailure.tla b/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestFailure.tla new file mode 100644 index 000000000..36bcf98e4 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestFailure.tla @@ -0,0 +1,2592 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC50_2_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n11", + "n16", + "n21", + "n25", + "n26", + "n28", + "n35", + "n36", + "n37", + "n39", + "n4", + "n43", + "n45", + "n46", + "n47", + "n48", + "n6", + "n7", + "n8" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n1", "n11", "n14", "n22", "n23", "n37", "n40", "n45", "n49", "n5" }, + VS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + height |-> 2, + lastCommit |-> + { "n1", + "n14", + "n15", + "n16", + "n19", + "n2", + "n20", + "n21", + "n24", + "n25", + "n26", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n41", + "n42", + "n43", + "n44", + "n45", + "n47", + "n48", + "n6", + "n7", + "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", "n11", "n14", "n22", "n23", "n37", "n40", "n45", "n49", "n5" }, + height |-> 3, + lastCommit |-> + { "n1", + "n12", + "n13", + "n14", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n50", + "n7", + "n9" }, + time |-> 3] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1402, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 2 +/\ now = 1402 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 1402 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 5 to State3 *) + +State3 == +/\ Faulty = { "n11", + "n16", + "n21", + "n25", + "n26", + "n28", + "n35", + "n36", + "n37", + "n39", + "n4", + "n43", + "n45", + "n46", + "n47", + "n48", + "n6", + "n7", + "n8" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n1", "n11", "n14", "n22", "n23", "n37", "n40", "n45", "n49", "n5" }, + VS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + height |-> 2, + lastCommit |-> + { "n1", + "n14", + "n15", + "n16", + "n19", + "n2", + "n20", + "n21", + "n24", + "n25", + "n26", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n41", + "n42", + "n43", + "n44", + "n45", + "n47", + "n48", + "n6", + "n7", + "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", "n11", "n14", "n22", "n23", "n37", "n40", "n45", "n49", "n5" }, + height |-> 3, + lastCommit |-> + { "n1", + "n12", + "n13", + "n14", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n50", + "n7", + "n9" }, + time |-> 3] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> + { "n11", + "n16", + "n21", + "n26", + "n28", + "n35", + "n39", + "n4", + "n43", + "n45", + "n46", + "n47", + "n48", + "n6", + "n8" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n15", + "n20", + "n21", + "n22", + "n23", + "n27", + "n37", + "n40", + "n45", + "n49", + "n5" }, + VS |-> + { "n12", + "n24", + "n25", + "n29", + "n30", + "n31", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n40", + "n41", + "n42", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n50" }, + height |-> 2, + lastCommit |-> + { "n14", + "n15", + "n2", + "n25", + "n31", + "n32", + "n34", + "n38", + "n39", + "n43", + "n45", + "n48", + "n6" }, + time |-> 2]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 1402, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> + { "n11", + "n16", + "n21", + "n26", + "n28", + "n35", + "n39", + "n4", + "n43", + "n45", + "n46", + "n47", + "n48", + "n6", + "n8" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n15", + "n20", + "n21", + "n22", + "n23", + "n27", + "n37", + "n40", + "n45", + "n49", + "n5" }, + VS |-> + { "n12", + "n24", + "n25", + "n29", + "n30", + "n31", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n40", + "n41", + "n42", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n50" }, + height |-> 2, + lastCommit |-> + { "n14", + "n15", + "n2", + "n25", + "n31", + "n32", + "n34", + "n38", + "n39", + "n43", + "n45", + "n48", + "n6" }, + time |-> 2]], + now |-> 1402, + verdict |-> "INVALID", + verified |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateFailed" +/\ nextHeight = 2 +/\ now = 1402 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> + { "n11", + "n16", + "n21", + "n26", + "n28", + "n35", + "n39", + "n4", + "n43", + "n45", + "n46", + "n47", + "n48", + "n6", + "n8" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n15", + "n20", + "n21", + "n22", + "n23", + "n27", + "n37", + "n40", + "n45", + "n49", + "n5" }, + VS |-> + { "n12", + "n24", + "n25", + "n29", + "n30", + "n31", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n40", + "n41", + "n42", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n50" }, + height |-> 2, + lastCommit |-> + { "n14", + "n15", + "n2", + "n25", + "n31", + "n32", + "n34", + "n38", + "n39", + "n43", + "n45", + "n48", + "n6" }, + time |-> 2]] +/\ prevNow = 1402 +/\ prevVerdict = "INVALID" +/\ prevVerified = [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n25", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n38", + "n4", + "n40", + "n41", + "n42", + "n44", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedFailure" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + state = "finishedFailure" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 2 + +================================================================================ +\* Created by Apalache on Fri Nov 06 09:48:21 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestSuccess.json b/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestSuccess.json new file mode 100644 index 000000000..82cea5133 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestSuccess.json @@ -0,0 +1,13451 @@ +{ + "description": "MC50_2_faulty_TestSuccess.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "E88731710E052776471249E555FE1C510FC8DF692F13D051B8381231233A38F5", + "next_validators_hash": "496695AEA31E902E1B6C91BBC3523783E721FFEB7D2AE8EDFAD2596609F598EB", + "consensus_hash": "E88731710E052776471249E555FE1C510FC8DF692F13D051B8381231233A38F5", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "5CBC06A7C8BA69A327E1EF2D6DE978D272C050A4309C77104DB5E20EF95C23ED", + "part_set_header": { + "total": 1, + "hash": "5CBC06A7C8BA69A327E1EF2D6DE978D272C050A4309C77104DB5E20EF95C23ED" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "gusIjn9dfzXuEkoS+ya8v4bu741/SE7nQCpb6Nd010917YL28W6sEvggUO6HJqgNPQrvl8Yqt0SMlYM0dLYLDA==" + }, + { + "block_id_flag": 2, + "validator_address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZgN3CDQtFen9DBCpURAjFYjBN8C0kYsSKcSmrzBKgDiVctD/SmV5jLoWdE3cPxraWsSJnYAVZkmwxNaj5jOSBg==" + }, + { + "block_id_flag": 2, + "validator_address": "26E91E700545D79E8A18092C393DB76294DF393A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Nk/Nfyx42mz0W+Pr6bjJlrD7NV2gJU7xsYCpR8jJCYzAUM4kwm711ZtfpYwAQwCRD8hbe/qsxAFcifRdCITSCg==" + }, + { + "block_id_flag": 2, + "validator_address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Su/dfTrposS7x1MBcIwFSf7+pG0/0Zsd0VXmBEh3Z3KyF4FmAewrkNrwcaXFedH8IudOq+Z+1NfxAgZs94V0BQ==" + }, + { + "block_id_flag": 2, + "validator_address": "2D963CD0FA15D15C1C200D578CCDC2C692B72036", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "x/emf4/fp/HJQBxKSRI/mBOzJNWTI4Sk/A+UxM2evrlnfmehAx5TSTYkKo0qjiR96bOVFhmRS++RGCgIvHtoAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "361491162A6178776B903E57AB7C4D909394B4B4", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "0VJfM6OBu3tGfk7FGPOuJ+P3sD7iyZF490jbtKPv6wZC2BPv4EJAmqT17WclVAeADX68w+mSrtLqsQ+j6dpKDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "PR+QSM6QK2KLdudhtLz9wRmSIexMK9FY7arKPjC4/w/dm2XqSvbv2dQk6U1MXWIBvWLTWIpudqWZJ7N0yaejCw==" + }, + { + "block_id_flag": 2, + "validator_address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "v9DTJ9niGuHc17GRBhHhTuzbS0KUugySx7k8oW+pE1Rh7qVUv3bo/aEFMXBTxxLoYSeIhSBevFR/mKO3efApBA==" + }, + { + "block_id_flag": 2, + "validator_address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "fr91oPk0ibxLj2oDSx4OTCxjE32VX6cQmHxFaGWYBzI6UF4+8X3LdFn7rg3EBR/QyNSQ0VA6cbWeZWBcnHhLAw==" + }, + { + "block_id_flag": 2, + "validator_address": "42D162EDB46B7C1FEA616810A7617A6369958ADE", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "AccpN+v2anjxuU8NC7YptFm/8Fj9IEOSBadbTCixS4gAj1MjKNDB2rMSlbRdNHBbjU8TiexznoJiyawxtW0iDA==" + }, + { + "block_id_flag": 2, + "validator_address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "i7aVMKFMCj1Rwk9JqxXFpPv1HglMGvs3SKu7GB9615rN46JQQo2XJZ3w1wTQ9CM+I+FHi0kn/CBA8Z6YS4k2BQ==" + }, + { + "block_id_flag": 2, + "validator_address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "IE3yv5i0QiPuf9N8/aUsHo0N04HqD27Ww0qa1O5k/iq56yFHRtjfTsFj78VDtRdN37zqDpozwDt44z25cH/WCg==" + }, + { + "block_id_flag": 2, + "validator_address": "4D9FD26B2372FBFE05C0452D534C6014C4D7F887", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "yCEiPPKjBf4/wYyosiclMC5kOo42Sj0j9sibaQ/BSSwfoUfEbWQuUQfFdVlV5chVeLRDmqDyS5EzVAGONyr6Aw==" + }, + { + "block_id_flag": 2, + "validator_address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "styHF+u7KM9C3XkEsCK2RiZUcWElqH7imd4+cDXmmlAocuK//LLbalbvlxcJ9FoRhc7eJDYWXVKA4To3+qOEBw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "v4vjd06efuDQiEWS8tqyc66IlzAX+w+zQ4dbP6k/+8xbnj7Zyt9xv4842ibVe3E8rQPEGu4FDctelLH5MCUjDA==" + }, + { + "block_id_flag": 2, + "validator_address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "897MF9pmI+MmVWsxXWA/EOPO5byOI+NC8Xz0Z6JrcSWn0zPq9FVhCdfd4Q1VVdeVuy/gdUB4F++pONEce4cTBg==" + }, + { + "block_id_flag": 2, + "validator_address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QruMTJEddjqe6oQ7Da1qJu5WwVgJcJG3+dIFIZeBnWt0/4Gd+nUPjZUVildmsLEx82na+W5+e/cC3mb6EQb1DA==" + }, + { + "block_id_flag": 2, + "validator_address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "XIEF7QYgVYMvgPrlH1Pg+s3vm4aM3jGoPtsu9Bf4d3ukU1Y0uShWCzh+ziROh+WCOikdL8QwyJl193koyg38CA==" + }, + { + "block_id_flag": 2, + "validator_address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "3JnpCgBnwwKUcF4/+Fe/5rIjQIJWhWsvWQ64HCBEho7AFOjIzZmC+gGBSXiXs4B2L5tKATu2k9Y4LVYwz5ltBg==" + }, + { + "block_id_flag": 2, + "validator_address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "bkhh+ccqqxDc8OrgpOAD0mchyuQfBZVW3cizfloumg17DIv+xM7H/5B5AG2h28KGFl4l8Lt0W+FR9tuqireVAg==" + }, + { + "block_id_flag": 2, + "validator_address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "eESbDHA5FpzXNrLOgxEFagp3oj3dG0SKx21Y9F7fYwWHxQgm86hu9q3NY24uVim7HHddxM6obD74j8r8g/HhCw==" + }, + { + "block_id_flag": 2, + "validator_address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2TO79aYZoddqsqj1pfoxCqIEodByrAdFqS+T8gTB7Zb+ORW/CYChPwOYNJqRGU0oUnH50tnFGLcwvVscJ+vRBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "jBUzyFda3aUf0FhsXYU7q85DTtwIjB0zjpgT0DjFuFkKbY2GS5EwTKYhXQH60bmbsCgRtHHoYnUGdHxA9LXJCA==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "eVKAM0/q2tgJYonS6WbHjd6FyoujcG1v1bpIwYMx5FJ0piu08Nx1IrsLeFlwio+COPS3OSIDE8HlYFvqj5zLCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "MH9lARKRsja3870T799VzapTn1dBVVTvjR+CKl85t5uwyFUnWsCOg1URtc4d7vRonF5rwGnsB8WTlaLkPT1CDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "+LOeZkNxEyMIzZCq9wCQ0Ljz8VeVzJsMdl/4QRAdUjCkYVRMh21ehJTjJPeKQFasJ35yqfZ73D0mS0TyNIRUBg==" + }, + { + "block_id_flag": 2, + "validator_address": "92932AD7E082B90296C192F3113710CD6F99432E", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "kf0Kw0Ilei3H+FQkx+0JNi6Z6NC8ovIbTapL1x0xl1oGUoZ4EXZUSFWtOAu97zEDXp2Y+VWrvB7aCi8pV3WBAg==" + }, + { + "block_id_flag": 2, + "validator_address": "990CDD32CD8EF97E5EC9D3E9F8C25543A7EDAA33", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "+XCtiTzBRuDZhmPRZNWVF8upmWJrl1+OClQhMtgXwI/rYChG8PpQM6ukrPNVAJy50/VLheg4ej3/y7PMXMGhDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "/ViDmfMZLY2vfEK0U2GR89/7zWHKMBfEsLigc/TxnUqxDaw0W9iNfhZrZVMtCYb03h3rgCEw/uiiTDDg+cTYDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "sl4aBK8sfYLTyUWlDNtZE5k+D89tskImh9M+fqoOCWUq+meLoZYqECLF51tvIzFc/KdAfO+NenR0bDisOwD9Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "keVd2SOD/6YzkNT5P8HHBf/YHHUAwcWSZSJmFPl80D5tRow4F6k8am8agtnn5ot+NkPRu5WV9nKTdRWalYWpDg==" + }, + { + "block_id_flag": 2, + "validator_address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ew21A/qcmgnmecXvurmN99Ut0rqUxEGJCPd66Ia5/eUF+ALmLEDdCi93SzqWJ1jiODZdbURXQC76YE9h/OoiBA==" + }, + { + "block_id_flag": 2, + "validator_address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "022b+8Fi9JrCBClirBO0MkRcuGUb28XALoaVUCHg1MfhTIxDGyBRbSXkNvSOIY4UsyFf38xcXMqDPylE64H7DA==" + }, + { + "block_id_flag": 2, + "validator_address": "AD28DEF4048F1BC51A8800A26E697A7771A6AF40", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "tUG37EY5speCSMJQGKF0qNbu/aXs4o5hwx/EUmFAC5YOBlAyonOxO3mZovV+4YBaBmjWQfUIOsMidIsmsaErAg==" + }, + { + "block_id_flag": 2, + "validator_address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "K8CH2YOM39IgZ4qVCf168y+gth0kcFPi50fqScrvglJ3BgHzJXuI+pZnM7yQcdtHAy5GRbwdyy4sPFRJMovEBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "aAZ/h8yXhPpyqopCCGH9Xt3QN8vn98+ccD1GE80M2zX1kOqcpzj5QGx+2xvNs1bHWI0Sungc9hcWk1oqCo6KBw==" + }, + { + "block_id_flag": 2, + "validator_address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "yF0pZkGZ8HGvra9v/iOgPS1E4+n/b6lEKHEiGq0EovgG1HU/SbIJC2zDyuuIv39iDKEMBgBLK7gaiSjTNe4+Bg==" + }, + { + "block_id_flag": 2, + "validator_address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "GvgeFb83xwczjb/B+iuxDFioELycrhbQGul4owAtgAuKNGU0HtTK1JX2HVqo11YUHFNu+IAN9hvS/BkeKXjzBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "kbR4tzKTooYPNOVMke11JCMWOH7Vmyu9/PKujAYw0hCPsMzzqJBXdJigvkQoTulBl4LFsaT3UYQC2K0E3BCjAg==" + }, + { + "block_id_flag": 2, + "validator_address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QuUkTmkHWHb5W2m33vQ4JdhydhSuCFK491vuU88w+7MpAkWDJbNUdbLhhe2mpNSTTHtEMUnsdUnMxYI2ngADDA==" + }, + { + "block_id_flag": 2, + "validator_address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "43UYc0GITdA2L2J1KW5zYD+malgdm5asvsPkEk0mJaBWnT/1QOol8R54IyfflJqR92UH/rwIbE1smM1DpR1bCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D281629B8289556EC5E1C9C2A78FEB2B0A18B4EC", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8lllTt0wC3kVtgC1S6B6MWs+KKFUTBXRHQDwMY7mP3KycCQ2xUUthZLFLXZJt2zzAMAqnaNV4whEkc4/AhVJBw==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "kB3uypC4Kp29pP9FWKZkOMuEeCXAm3yd1418Iy7TrqZ57lNxTQv8N7XZdqHEijhZI6+zMIXzmon04KmctW9iDw==" + }, + { + "block_id_flag": 2, + "validator_address": "D447195654516BE994064E03868856302AEAF1D1", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "1xF0yxdOypgqj5fbH8Qrthy/7n4Qgwb6OUdqW1Ez32mtaYt3TxEPfyBPwXBeqe7jLhQ2t665z5uo/uBHYgFYCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "ZmG/wEjiVCkBUOelq9ziTyn3u4k4gcugydQTh5fagHNfdOxg6vubs06MgM0HVaAtu9d0P6demkZjshp2LYy4DQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EAC805939208F7851F6517652FBFF87D9CBD455A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4zkvzNgelEtoy7cZ56XsD/IGBYy/CFbFutZJ05g5ghh9WPOP7AEL+g6iqeNYtfZR6a4CmbxorUT1oaeTB6psDA==" + }, + { + "block_id_flag": 2, + "validator_address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8IPQ5lx2ReVt6DgmwWvnXAey1TmGjReDZs1ddjGKQ0kdUcPvlvp6IsH8vXQBBcumrjdRbU6qfLqJ/65SxJEYDA==" + }, + { + "block_id_flag": 2, + "validator_address": "F1DA81336F50B87982CF10581D308080031406C6", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "fEK8xDxrQDCccU8g9IiCZzZfJ4FJMMiyVCsM7exbj4RdSchJvTFW7BxnwMEPTKn10mc7ZdK4aOI+FAinja1wDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "iF42ryHxBV2JJvHAVccnKnrKBU47JApIiH8WgGoMitU6abt/kBDeDwKOQ7hJgHMBp1VTGD0d2/j38DOCLkIaDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "6D6J8ViVl6h2HNVvIAku5DJIR4vf0TtCSsmaRJ0G2qmBX5WYSRX9+tOZU/lmlEd/DjWEwNOlkVsNRfsr8pI3Dw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "26E91E700545D79E8A18092C393DB76294DF393A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F8xDDGP4gRkFMeuIlULpbOP6aGPdTe5gZT7kCCnAQIY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "fWMaYDTFwdDo7SVw9hBIraX2GVqvzKhNKEUkr/2ZnEc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "361491162A6178776B903E57AB7C4D909394B4B4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QlwrDiydr8tfRonzwMnML1JYtWUHQZiG6aqhWsXRriA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "etUp4mnEHDdNnJSwu5KW8EMXYt7n94iYZm+y7xa9ym8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R1rD/692T348fL4cA0mvvbK9aANwT0vBNAT5B9+p+rw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Spb0BakJqr3uNaAEqdaGbv77bQEwym0/6cl/tnCdkGM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JqkfZ01ZvkPHj9ohj0F2Saa5t6KIX5uq1bhHS7YAyxk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "M5rP8lPaJdES+Bd4oWI/va2sRUvbJiYINzOpUdiuO8Q=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4D9FD26B2372FBFE05C0452D534C6014C4D7F887", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "mGpmR8PNc6w2cUzPwAQhkSadkyGOuKMl68Nji5E3h5o=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GR4akX9jBcU4iFUBqB3NGwD3CuSTGPHiaWofAhCjCiE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "r7QqYEO8hh6xOwJMpsH+gYer+oOcuP/UQyG7NNsLLHk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "IPoyPEpBWphJbDnocj0x7bFbIX0grHlypAkknLjia3E=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Pfy3anXtYHMFjDLvM+5jJN3iS5Ypz9NMJ1KTNVjfJ7I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JgRep5bgxhsdM6EVAEzE/cEaxMsdR6/VtG24KHgHDyc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UGBPzd5VtGwtUkXOkCgJuzUO6s7Zk0RGKCo/Csdlqf4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2ekMO1AKawC1gbXty/y6KBVpUfC9RcKyf3sR0ZK7UR8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "92932AD7E082B90296C192F3113710CD6F99432E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GJlkT7S82nRWW34K5ax6ZCW9EV2nt1E/PF1P5LQgJdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "990CDD32CD8EF97E5EC9D3E9F8C25543A7EDAA33", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UseUFPt/FyVO1D19U7tHq4/CAsW/JxWOeTbw/ZftxMM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Hm8gqT6zv3BHDTjlY1nLMK2U4gte/cducumkYBgvXig=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQBydj5eqXzfBc++Y+9Q5RaUtEXtQghUR0duadGH9dk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "z7XkAAZ+x6klleinW1VTrsMLnAwNF9LHBFprFx1E4bA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEXsZIGASOuKR3SQn2cakTAkulEbm2kElVjj50W2oJw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZHfThztGFsj0VfR6xV1r5ZA09Q6/+np9oYXs8CWY4F8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8f/zBc9sYTK1e73NefD07XG1gA/fqVsf8CZ5EyualYk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ct8qHvpO82bPqzj2YxHkFgE+fmxVF0q7fTuvXzsK6Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZDJSsUONDbWTaQATQjuhqxsQFTnSyzSburJRflWe6ro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "55KLg7eVl0IyiFhu7r38WGQizm6hglE4rsAo68dGK28=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D281629B8289556EC5E1C9C2A78FEB2B0A18B4EC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "xzIY0miEtnX/3fduBl9vYN2iDEmt7HIGK3Qb0bywdbU=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D447195654516BE994064E03868856302AEAF1D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u7GVl6wdnCsWjxNSxnOCwxnZTWLYTlaB6to7efS7RWY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K+cn+8TPKo7d9dNhdj999tu1T108JCxecojB0pkssl0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "CkWTr7zqfXcDHuTn961EfHkJv82Ql1oibFWbfROfbCc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F1DA81336F50B87982CF10581D308080031406C6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TCNu3Qckfx5+zXKvDTIHAFd/FZgbk013UFYIZqWl7w8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F4d36ebIiyCzz/pk4sGrxYnls8XuzOfMRh/lF2LTdA4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "wqp6kT/3DEZ81E8BAdD802/NccJcCyBWBVrah3EOTFk=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T09:46:56.160465601Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "496695AEA31E902E1B6C91BBC3523783E721FFEB7D2AE8EDFAD2596609F598EB", + "next_validators_hash": "5184AB4A8B477A2D411629A3F3A7EFA0AEC0EA56639596AC424D6C50EEDB9090", + "consensus_hash": "496695AEA31E902E1B6C91BBC3523783E721FFEB7D2AE8EDFAD2596609F598EB", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "7D9A7F984E3A6245889D3E561C70008881395D6D719AB94CFB452E52E05C6A5F", + "part_set_header": { + "total": 1, + "hash": "7D9A7F984E3A6245889D3E561C70008881395D6D719AB94CFB452E52E05C6A5F" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "pU7rNfPKVu4SuxTEpTQ7TmKQmakAUhD3m3sN3/lo9oHHAFRMOWoanlXbBg+KWMFassPcsibyMD33EkN43eZYCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "TFPpeISPc8OhydZyTZmXy9MD0Z4Vd541NKuO8Nq3X+ssZ2YYyZTIqu++1lLbYcEDonwwRLOxISqyB79v3P/HAA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "aL4JUv9fnzmfobKC7b5w8uj41e2/mir/IJhtkB5sPX9vu7qT9nGWVfQXTKJdzTlbHPxloDVh2hss6jEOMcKUDA==" + }, + { + "block_id_flag": 2, + "validator_address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "bZENOy8ktHwnYWJCLWX5+OZr44koJOk6YUg6+PyrlbV7DoxzVSa4LmeBShIBTjEQ6NM4tiDKtIvtNGpAjkZxCg==" + }, + { + "block_id_flag": 2, + "validator_address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "2Vn8uHoQm+KDMnojaBt3NG9uQfwBU1Iq2w6QfzrnAs1XzkO8EqxB2zwSkYKj3EYbf03Hq0QW422TDttf3USkAw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "G8vWQMk4k2I89maA73TMVpZulC5Bs/2lZaZx2yvkvit08zYRwAAS2WN7z4h4ig5RloiMBzZEo3SnHXQGyhttDA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "0KmkVSUb5znOSjIQ25dmUbHoPosik/DEJhSkOM1Qdx2O1zG/a34miIBbXRqRzcpnAS/O2jrgwJ45edI6SKv9CA==" + }, + { + "block_id_flag": 2, + "validator_address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "owCDzITAE4fRCIN+y5WA8zW4cayRrY/SycNLpEQnb+zcgp0os7hKp69m1u/HxbBWcjUrjvua3W2irLrA7cM9Ag==" + }, + { + "block_id_flag": 2, + "validator_address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "C3tikY0M3ZpYb6mLtxF4fQyvn5vnND4/eo/UPtTwwsezXVgj3FBAd6+mLoc24R4789Ibbi2r1OMyXbLS+vzCDA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "piiI5yFBPcgcJv7rh0JxYqFlY1CL9BApXWKYZujU3+a8oG3gB71ZYV0wQJ3L5iNE1TnaX/INZcRCFbOEsidTDQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "9AVMRgbbnMGj3bWaH7lA9hCRLPCgEJQ8Q8kurbi8WI6uzqGs7UOj8wuQGMt+FVIGvbHYt0aQqg0TPGatgAMhCA==" + }, + { + "block_id_flag": 2, + "validator_address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "G6o9czqoNvOKAZCfUbCpcQZ5BoZyDi0izUsI5D0gd/sTP3vEjzdPb33P395RYfV7DZnSdeRWvLRko8RSML/2AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "C8U4yhJOhdnr9Xd7lhwaYnjvohx6OTlpdHB8ZGn1U+iIQ3T34JSqi41qxFElWUR6WsoPH7rSXvLsOI97FNnmDg==" + }, + { + "block_id_flag": 2, + "validator_address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "cYOMQPrK7105ZGU9dvA81l6SEaj83LjmyeEUcqBG0IhyvbRq49xKIk8OZT+6olgjPBfwyXDTYgnlcGyq/nOwDA==" + }, + { + "block_id_flag": 2, + "validator_address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "2SJUUFyyobeVLoBV03CP0D8oiE16VUSs6Btk6hDqI1KWxm3Aw+U21jB0V1AE5LYzZEX+avLAHbdvaNbkQJtNAQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "92932AD7E082B90296C192F3113710CD6F99432E", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "0+4CEWQTa4MNuzrpmwKxwSfi5Czsb/+SVsk+v2OteJbtj/VdeJibLUJNG86Tn6C7yqBZjEVjY6w/vQgcSGn9Bg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "2Qc2Y6hEQ0wd8a29rznpluB8L1Cfzz5vIIAcs9Vh5bcPLv4MLuZgYRRfgdQk/IdVs4PNSqHLajIujCrN3mgZBA==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "8tYA6NaggQDQKVJFGcS+DHAjCAOVNEsYG4ESX1GUWb1UyDw68Ae23uymXPJSE58XmKK/owg4rE30wW4EOIZ0BQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "7Ay8c7gl5BV7v87D0tpMIUbrSJDdPUxJhjDK5lcfOE7N6Aijtfu3qzJpro8mc8QwHXs9DaAz7LVTY00cLQX1Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "UEKtjqq6ZW6mGrpGTZRhEUnjhcail8G5sxjP6qVgoaFWGDJNvfft5kLgm+URg90mhY0lqlFMG856urmfGS71Cg==" + }, + { + "block_id_flag": 2, + "validator_address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "xsWbp0JMqPsmwgEZVXXRSeOLdFOogHN9x12F5Y7OI/ZtXUTxSgjlc5W+EOClLasigPn3JjEfl1KTrsgaMUwUCQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Gc+L4RrS1hsV8RG21yPcZKqG5Ro3osD4rLVPTG7gkFEbMRDskFyhzDwSFmzUaiY5DpZ04LdBPoA+/m7mEJhtCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "EUWse9oOIH1BUaXCAGdKJXGdrDvej6Hm9VSpIuJrTw8a9asZTpj1vFTrzE14zIVMfP3hFmkx8XffOL5NBR8/Bg==" + }, + { + "block_id_flag": 2, + "validator_address": "D281629B8289556EC5E1C9C2A78FEB2B0A18B4EC", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "wtcu6dJbagO5il7fDDgi9+0tBPhMEMmUv4aPR1RCrWBIc+iXlOWesi8ei/hgjV00asQvK8LrQmAQFtJfpjoqDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "AIzCMslNgEBJPLFtUP8Beu8534Qco9fVAVGx/lmDiD7PTAvSORE/I4HoWhCk9s4+hM4989K0A2nNy7G/NqbVBw==" + }, + { + "block_id_flag": 2, + "validator_address": "D447195654516BE994064E03868856302AEAF1D1", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "X9CUAbJrgixK8k4eKTE4hFDVZNI7np85VuZM8rARLkOaOLU1NVfsSvSPyy7oEk6dSTjSOTdMv/iqixWOS6wFCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "vbrwuBz1o5fEZ/2OITSzPNknlycKhpu3+slDCjepWMCAgbJAb4LI4QT3krkepvK1VGs+SwDteJY6FIwa3GZYAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "V2QoceeesEvFfMm2b3c30w9gDnEXYhHu0uQ0k5NR/fL0BfKCsd2umi9KtmvcgpK3Ewcy1NLqP3BbfDdQeA8cBw==" + }, + { + "block_id_flag": 2, + "validator_address": "F1DA81336F50B87982CF10581D308080031406C6", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Bav1BI9bjQUnCJ8wmKk0AbIsRDqAIAnKwCNRcqNuUHGchCRxCQ+FzECCMY1iDIIslEbFdkGEeAJjV5lrBxo7Dw==" + }, + { + "block_id_flag": 2, + "validator_address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "z7LSz8ZcIMkT+vmSp+dPpMsIbOYDXxtKyMj2FYkJ3qGgTnyP0rQTp08TGJmeLWG7RJgP80CerANJv+DcDok9CQ==" + }, + { + "block_id_flag": 2, + "validator_address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "NlQMUwvRZ9iqlCW1a5znzN9id85mBev07DJ+sq8jnaorMjy5OJq4b+OU5tOgab4/XAQiHt9XPDxdhqUYGeACAQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "26E91E700545D79E8A18092C393DB76294DF393A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F8xDDGP4gRkFMeuIlULpbOP6aGPdTe5gZT7kCCnAQIY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "27F2EBD163141DBB2108462E490EECB01EA5E29F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "fWMaYDTFwdDo7SVw9hBIraX2GVqvzKhNKEUkr/2ZnEc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "361491162A6178776B903E57AB7C4D909394B4B4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QlwrDiydr8tfRonzwMnML1JYtWUHQZiG6aqhWsXRriA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "etUp4mnEHDdNnJSwu5KW8EMXYt7n94iYZm+y7xa9ym8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R1rD/692T348fL4cA0mvvbK9aANwT0vBNAT5B9+p+rw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Spb0BakJqr3uNaAEqdaGbv77bQEwym0/6cl/tnCdkGM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4443AEEAB1B9C041A3BC505CBD5E9DAAD7287E5F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JqkfZ01ZvkPHj9ohj0F2Saa5t6KIX5uq1bhHS7YAyxk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "495438D2011E254FF2FD340629AE2D74E2188A4F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "M5rP8lPaJdES+Bd4oWI/va2sRUvbJiYINzOpUdiuO8Q=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "4D9FD26B2372FBFE05C0452D534C6014C4D7F887", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "mGpmR8PNc6w2cUzPwAQhkSadkyGOuKMl68Nji5E3h5o=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "5CC93DA93D8C513DFB5B1CA972AD472EDBD0D4F8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "+b3DF2I8j3TrDePELV4L4ssCLIoq34BBp0RyU/QmmYY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GR4akX9jBcU4iFUBqB3NGwD3CuSTGPHiaWofAhCjCiE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "725F885D0173D8D85AADCF776253F5BFF3AC0018", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "r7QqYEO8hh6xOwJMpsH+gYer+oOcuP/UQyG7NNsLLHk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "IPoyPEpBWphJbDnocj0x7bFbIX0grHlypAkknLjia3E=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7C0A50C406A9012DDFB6C07E2E976B4662FB4D78", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Pfy3anXtYHMFjDLvM+5jJN3iS5Ypz9NMJ1KTNVjfJ7I=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "7E8248EC7F3B6127B889255109FB4D5FDAAA771D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JgRep5bgxhsdM6EVAEzE/cEaxMsdR6/VtG24KHgHDyc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "804A4582D02409176BA9BCC2656428EE250C23F2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UGBPzd5VtGwtUkXOkCgJuzUO6s7Zk0RGKCo/Csdlqf4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "80E8155B244AD20287F2C51BBE609355FA5B082D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2ekMO1AKawC1gbXty/y6KBVpUfC9RcKyf3sR0ZK7UR8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "89813D501FB36796F5BEEC2E8B6A48FFEFF45595", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VV0Fv/VdsyNrvfi+Kh+ld2pVHLZdNJLztUwJSKis/WI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8CEBC3AA7D2C6E71F7385EC0E1BC182938724C0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6mYEZ5I4fKC1goMotZ3yTYH19SAvSrD+hpIsVxLxPWQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "8FB58C7333B5BE046834BE2B6426A0B6D268167A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "x+WPfQQNWVCyH1qcBEoS6beOqg/wvv0BNks5Lotb28c=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "92932AD7E082B90296C192F3113710CD6F99432E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GJlkT7S82nRWW34K5ax6ZCW9EV2nt1E/PF1P5LQgJdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "990CDD32CD8EF97E5EC9D3E9F8C25543A7EDAA33", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UseUFPt/FyVO1D19U7tHq4/CAsW/JxWOeTbw/ZftxMM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A05EC3EDD42F9AD5615733694CAA91A0300FDB67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Hm8gqT6zv3BHDTjlY1nLMK2U4gte/cducumkYBgvXig=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1F2F7907A1E17B1A26EA519B8FC99FCCE841925", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQBydj5eqXzfBc++Y+9Q5RaUtEXtQghUR0duadGH9dk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "z7XkAAZ+x6klleinW1VTrsMLnAwNF9LHBFprFx1E4bA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A3C681BA9B2175F4E3E48DA799F79E2D66852E73", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEXsZIGASOuKR3SQn2cakTAkulEbm2kElVjj50W2oJw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A90828D1AA8F76EB2A8C1064895715E7B2DBE60C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZHfThztGFsj0VfR6xV1r5ZA09Q6/+np9oYXs8CWY4F8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8f/zBc9sYTK1e73NefD07XG1gA/fqVsf8CZ5EyualYk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ct8qHvpO82bPqzj2YxHkFgE+fmxVF0q7fTuvXzsK6Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "BDAF748069A1EA08E56D8C4EEFF4C73C915700A9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ZDJSsUONDbWTaQATQjuhqxsQFTnSyzSburJRflWe6ro=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C6669D562F234ADC5209E39C21934E0E8E5B2D38", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "55KLg7eVl0IyiFhu7r38WGQizm6hglE4rsAo68dGK28=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D281629B8289556EC5E1C9C2A78FEB2B0A18B4EC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "xzIY0miEtnX/3fduBl9vYN2iDEmt7HIGK3Qb0bywdbU=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D447195654516BE994064E03868856302AEAF1D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u7GVl6wdnCsWjxNSxnOCwxnZTWLYTlaB6to7efS7RWY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K+cn+8TPKo7d9dNhdj999tu1T108JCxecojB0pkssl0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "EF80C29AF6C6B38F325A28497787921DFB8AD677", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "CkWTr7zqfXcDHuTn961EfHkJv82Ql1oibFWbfROfbCc=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F1DA81336F50B87982CF10581D308080031406C6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TCNu3Qckfx5+zXKvDTIHAFd/FZgbk013UFYIZqWl7w8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F4d36ebIiyCzz/pk4sGrxYnls8XuzOfMRh/lF2LTdA4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "wqp6kT/3DEZ81E8BAdD802/NccJcCyBWBVrah3EOTFk=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "118D4509F88D6ABE5EC516CB707F5303B9E2C15C", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "StsLNXvtOvrk90slRz5iMalcyL2LZswVnFT704LCwdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "36B42D1EDA17C600C19CD91EE53FDAA37ABBD84F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "etUp4mnEHDdNnJSwu5KW8EMXYt7n94iYZm+y7xa9ym8=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3A56282ED3926B193E010D387E0E9FEA6368F034", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R1rD/692T348fL4cA0mvvbK9aANwT0vBNAT5B9+p+rw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "3C977CABBB911557FC1A07FAFB7F005EC9FB0565", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Spb0BakJqr3uNaAEqdaGbv77bQEwym0/6cl/tnCdkGM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "42D162EDB46B7C1FEA616810A7617A6369958ADE", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "U4HzaR1kBj9HGcZU1I3rIZMwMoikUmYQyIMZktuBOF0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6CC7AC5844AFFDC522094543E7552F1C60FF02AC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GR4akX9jBcU4iFUBqB3NGwD3CuSTGPHiaWofAhCjCiE=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "72CB93184275A21BE0E0C5EE07E4B45BD6A78725", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "IPoyPEpBWphJbDnocj0x7bFbIX0grHlypAkknLjia3E=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "92932AD7E082B90296C192F3113710CD6F99432E", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GJlkT7S82nRWW34K5ax6ZCW9EV2nt1E/PF1P5LQgJdg=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "A1FD6FD230258CF676B492740312EEF2FFDB2613", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "z7XkAAZ+x6klleinW1VTrsMLnAwNF9LHBFprFx1E4bA=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "AF50C2828B727556CC4CC04CBA32FBECC229D49D", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "6lcuin9eD6uwAu9qjsoRjtd+uCtVUZbn//5UqLng9mI=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B481198C8646CFFC33A07077741EACAF5AE33C84", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8f/zBc9sYTK1e73NefD07XG1gA/fqVsf8CZ5EyualYk=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "B75D43BFE6B5E82190CCA5DD19527F97D5E55CCC", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Ct8qHvpO82bPqzj2YxHkFgE+fmxVF0q7fTuvXzsK6Cw=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "CD086FC216F0BBE97FAF5042D211118480C48130", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEsifvLPeeGUsnI5MjI+gOXd2aU+NOqCwE6+Cs/LQRQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D3E01BA109EB39DC5537FC1AD493DC51696099C2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "rzORQgLg90Tc4xBKwEsvgMZQS6yxvhzvZB3B/zbDW0A=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D447195654516BE994064E03868856302AEAF1D1", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u7GVl6wdnCsWjxNSxnOCwxnZTWLYTlaB6to7efS7RWY=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "D81E34C3A984B29FE89AF1ADF76037ECA63B68B9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K+cn+8TPKo7d9dNhdj999tu1T108JCxecojB0pkssl0=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "F6C52523A5DD417F1B8CDE588F0163CE82BB39B2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F4d36ebIiyCzz/pk4sGrxYnls8XuzOfMRh/lF2LTdA4=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "FCE4B81596E59258D6F5F5F724645A9E77952ACA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "wqp6kT/3DEZ81E8BAdD802/NccJcCyBWBVrah3EOTFk=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n13", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n15", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n17", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n18", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n20", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n22", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n25", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n30", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n31", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n32", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n34", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n35", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n37", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n38", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n40", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n43", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n44", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n45", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n47", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n48", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n50", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n6", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n7", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n8", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n9", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n11", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n14", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n16", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n19", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n21", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n23", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n26", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n27", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n28", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n29", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n33", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n36", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n39", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n41", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n42", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n46", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n49", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n5", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:03Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestSuccess.tla b/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestSuccess.tla new file mode 100644 index 000000000..84dc0d0d3 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/MC50_2_faulty_TestSuccess.tla @@ -0,0 +1,2958 @@ +------------------------- MODULE counterexample ------------------------- + +EXTENDS MC50_2_faulty + +(* Initial state *) + +State1 == +TRUE +(* Transition 0 to State2 *) + +State2 == +/\ Faulty = { "n11", + "n16", + "n17", + "n25", + "n28", + "n31", + "n32", + "n33", + "n45", + "n47", + "n48", + "n50", + "n6", + "n7", + "n8" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n1", + "n11", + "n14", + "n16", + "n19", + "n21", + "n23", + "n26", + "n27", + "n28", + "n29", + "n33", + "n36", + "n39", + "n4", + "n41", + "n42", + "n46", + "n49", + "n5" }, + VS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 2, + lastCommit |-> + { "n10", + "n11", + "n12", + "n13", + "n15", + "n16", + "n17", + "n19", + "n20", + "n21", + "n23", + "n24", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n5", + "n50", + "n6", + "n8", + "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n11", + "n14", + "n16", + "n19", + "n21", + "n23", + "n26", + "n27", + "n28", + "n29", + "n33", + "n36", + "n39", + "n4", + "n41", + "n42", + "n46", + "n49", + "n5" }, + height |-> 3, + lastCommit |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n18", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n28", + "n29", + "n32", + "n35", + "n38", + "n4", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n5", + "n50", + "n8", + "n9" }, + time |-> 3] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 3, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ lightBlockStatus = 1 :> "StateVerified" +/\ nextHeight = 2 +/\ now = 3 +/\ nprobes = 0 +/\ prevCurrent = [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ prevNow = 3 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "working" + +(* Transition 3 to State3 *) + +State3 == +/\ Faulty = { "n11", + "n16", + "n17", + "n25", + "n28", + "n31", + "n32", + "n33", + "n45", + "n47", + "n48", + "n50", + "n6", + "n7", + "n8" } +/\ blockchain = 1 + :> [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1] + @@ 2 + :> [NextVS |-> + { "n1", + "n11", + "n14", + "n16", + "n19", + "n21", + "n23", + "n26", + "n27", + "n28", + "n29", + "n33", + "n36", + "n39", + "n4", + "n41", + "n42", + "n46", + "n49", + "n5" }, + VS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 2, + lastCommit |-> + { "n10", + "n11", + "n12", + "n13", + "n15", + "n16", + "n17", + "n19", + "n20", + "n21", + "n23", + "n24", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n5", + "n50", + "n6", + "n8", + "n9" }, + time |-> 2] + @@ 3 + :> [NextVS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n11", + "n14", + "n16", + "n19", + "n21", + "n23", + "n26", + "n27", + "n28", + "n29", + "n33", + "n36", + "n39", + "n4", + "n41", + "n42", + "n46", + "n49", + "n5" }, + height |-> 3, + lastCommit |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n18", + "n2", + "n20", + "n21", + "n22", + "n25", + "n26", + "n27", + "n28", + "n29", + "n32", + "n35", + "n38", + "n4", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n5", + "n50", + "n8", + "n9" }, + time |-> 3] +/\ fetchedLightBlocks = 1 + :> [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] + @@ 2 + :> [Commits |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n18", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n32", + "n35", + "n37", + "n38", + "n4", + "n41", + "n42", + "n45", + "n46", + "n48", + "n49", + "n5", + "n6", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n14", + "n16", + "n19", + "n21", + "n23", + "n26", + "n27", + "n28", + "n29", + "n33", + "n36", + "n39", + "n4", + "n41", + "n42", + "n46", + "n49", + "n5" }, + VS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 2, + lastCommit |-> + { "n10", + "n11", + "n12", + "n13", + "n15", + "n16", + "n17", + "n19", + "n20", + "n21", + "n23", + "n24", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n5", + "n50", + "n6", + "n8", + "n9" }, + time |-> 2]] +/\ history = 0 + :> [current |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]], + now |-> 3, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] + @@ 1 + :> [current |-> + [Commits |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n18", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n32", + "n35", + "n37", + "n38", + "n4", + "n41", + "n42", + "n45", + "n46", + "n48", + "n49", + "n5", + "n6", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n14", + "n16", + "n19", + "n21", + "n23", + "n26", + "n27", + "n28", + "n29", + "n33", + "n36", + "n39", + "n4", + "n41", + "n42", + "n46", + "n49", + "n5" }, + VS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 2, + lastCommit |-> + { "n10", + "n11", + "n12", + "n13", + "n15", + "n16", + "n17", + "n19", + "n20", + "n21", + "n23", + "n24", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n5", + "n50", + "n6", + "n8", + "n9" }, + time |-> 2]], + now |-> 3, + verdict |-> "SUCCESS", + verified |-> + [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]]] +/\ latestVerified = [Commits |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n18", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n32", + "n35", + "n37", + "n38", + "n4", + "n41", + "n42", + "n45", + "n46", + "n48", + "n49", + "n5", + "n6", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n14", + "n16", + "n19", + "n21", + "n23", + "n26", + "n27", + "n28", + "n29", + "n33", + "n36", + "n39", + "n4", + "n41", + "n42", + "n46", + "n49", + "n5" }, + VS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 2, + lastCommit |-> + { "n10", + "n11", + "n12", + "n13", + "n15", + "n16", + "n17", + "n19", + "n20", + "n21", + "n23", + "n24", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n5", + "n50", + "n6", + "n8", + "n9" }, + time |-> 2]] +/\ lightBlockStatus = 1 :> "StateVerified" @@ 2 :> "StateVerified" +/\ nextHeight = 2 +/\ now = 3 +/\ nprobes = 1 +/\ prevCurrent = [Commits |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n18", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n32", + "n35", + "n37", + "n38", + "n4", + "n41", + "n42", + "n45", + "n46", + "n48", + "n49", + "n5", + "n6", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n14", + "n16", + "n19", + "n21", + "n23", + "n26", + "n27", + "n28", + "n29", + "n33", + "n36", + "n39", + "n4", + "n41", + "n42", + "n46", + "n49", + "n5" }, + VS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 2, + lastCommit |-> + { "n10", + "n11", + "n12", + "n13", + "n15", + "n16", + "n17", + "n19", + "n20", + "n21", + "n23", + "n24", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n5", + "n50", + "n6", + "n8", + "n9" }, + time |-> 2]] +/\ prevNow = 3 +/\ prevVerdict = "SUCCESS" +/\ prevVerified = [Commits |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + header |-> + [NextVS |-> + { "n1", + "n11", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n34", + "n35", + "n36", + "n37", + "n38", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + VS |-> + { "n1", + "n10", + "n11", + "n12", + "n13", + "n14", + "n15", + "n16", + "n17", + "n18", + "n19", + "n2", + "n20", + "n21", + "n22", + "n23", + "n24", + "n25", + "n26", + "n27", + "n28", + "n29", + "n3", + "n30", + "n31", + "n32", + "n33", + "n34", + "n35", + "n36", + "n37", + "n38", + "n39", + "n4", + "n40", + "n41", + "n42", + "n43", + "n44", + "n45", + "n46", + "n47", + "n48", + "n49", + "n5", + "n50", + "n6", + "n7", + "n8", + "n9" }, + height |-> 1, + lastCommit |-> {}, + time |-> 1]] +/\ state = "finishedSuccess" + +(* The following formula holds true in the last state and violates the invariant *) + +InvariantViolation == + state = "finishedSuccess" /\ Cardinality((DOMAIN fetchedLightBlocks)) = 2 + +================================================================================ +\* Created by Apalache on Fri Nov 06 09:46:39 UTC 2020 +\* https://github.com/informalsystems/apalache diff --git a/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test2NotEnoughTrustFailure.json b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test2NotEnoughTrustFailure.json new file mode 100644 index 000000000..a7a325e8d --- /dev/null +++ b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test2NotEnoughTrustFailure.json @@ -0,0 +1,1196 @@ +{ + "description": "MC4_4_faulty_Test3NotEnoughTrustFailure.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D", + "part_set_header": { + "total": 1, + "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8rGIxi7DjBLFlHUo/lAgTpmzsnTZ8HOgnQaIoe+HEM5AmrjBaVDWVMb5/nNAnJTj4hcReCh4jviXcyRkItFJCA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "3cXnzhzJLKeF47ulcIWjgqsv9JBf9olbAo0mcjo7Ij6TfmCpJO6SmTiacBkiznsFSOc1ZSH+cHDBKA4AT7ozAg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4O8c5hxoHR861ldolxeY9W1iXCdxYJVIf0xD3+sANSxo0ipXayv8IS7YFw1zzZvDbjRRazVzbfyBYf2jl4JeDw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2Hel7uygQXpjYRJZiwtPLKNxT2Tg1/F5Zzs3VZpleFII9H1e5Gs02UjU0lybSXBKk/tD+NXPsdchrH/6/DmwAQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:12:48.160465756Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:11Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "319D909302B2481A805C423A656043FD30E913D36C578359DF88B2057F1D8241", + "part_set_header": { + "total": 1, + "hash": "319D909302B2481A805C423A656043FD30E913D36C578359DF88B2057F1D8241" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:11Z", + "signature": "CxPBN9SIVfnZBrnUaC6o6sC8MO1U4RMJ75ZW5czglJh5OI/33er0I7t/An7wA2+XKkFvU29vNWyBIc14rWegDA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 11, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 11, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 11, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:06Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "2CBA1CB4BBA500DF1257E0B5414A21EEA22073418B4450B8FDDF4E64113730A7", + "part_set_header": { + "total": 1, + "hash": "2CBA1CB4BBA500DF1257E0B5414A21EEA22073418B4450B8FDDF4E64113730A7" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:06Z", + "signature": "KV12dmnJJlCHP0h2zP9FdYPE7y+AE7DO+bRD0u6e+SvaLsly1nrILVqpMh1LNSMP9wNbqMvp4Nh3v6krFSmpAA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:19Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:08Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "DC5FEB4DA043C89EB7C1D227C029AF74DD6BC7348C5C8916A1829BA42A4095E9", + "part_set_header": { + "total": 1, + "hash": "DC5FEB4DA043C89EB7C1D227C029AF74DD6BC7348C5C8916A1829BA42A4095E9" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:08Z", + "signature": "OIvvDPUb2bqS6KtWMHCZ1SJULFxsdgrmjWLzAjzymFlPJ0LYBM4k38GMnL12AnsyTAegZWUdQczIFwgoXU3EAw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:08Z", + "signature": "1ZyMw0Sr4OElzpqBo01dpeKOKd2IA/t2POTIyMR6wT5tw0v70eUm71/F2GPrPCYVggoOqcqa7ef/2bTvivNPCw==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:08Z", + "signature": "giAif8fVBaO2hDTjf7OXtfeIdY0ov4RDjOewgI1MpzQBRLKAWMaa2cJ0/MmTUBq5c2jJv6u4RJVm05z/9Mk5DQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:08Z", + "signature": "bnhCmYD9LhJmI0MXvplNlxH8OTd4++EmachoYYnttkQpXWFUuKX9dPfCNOhYYjiDVLIN3x9oyHCWgjeMhj58DA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 8, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 8, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 8, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 8, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 8, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 8, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:11Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "319D909302B2481A805C423A656043FD30E913D36C578359DF88B2057F1D8241", + "part_set_header": { + "total": 1, + "hash": "319D909302B2481A805C423A656043FD30E913D36C578359DF88B2057F1D8241" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:11Z", + "signature": "CxPBN9SIVfnZBrnUaC6o6sC8MO1U4RMJ75ZW5czglJh5OI/33er0I7t/An7wA2+XKkFvU29vNWyBIc14rWegDA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 11, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 11, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 11, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:25Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:06Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "2CBA1CB4BBA500DF1257E0B5414A21EEA22073418B4450B8FDDF4E64113730A7", + "part_set_header": { + "total": 1, + "hash": "2CBA1CB4BBA500DF1257E0B5414A21EEA22073418B4450B8FDDF4E64113730A7" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:06Z", + "signature": "KV12dmnJJlCHP0h2zP9FdYPE7y+AE7DO+bRD0u6e+SvaLsly1nrILVqpMh1LNSMP9wNbqMvp4Nh3v6krFSmpAA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:25Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.json b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test2NotEnoughTrustSuccess.json similarity index 54% rename from light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.json rename to light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test2NotEnoughTrustSuccess.json index 8cad731fb..aa5a3f937 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test2NotEnoughTrustSuccess.json +++ b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test2NotEnoughTrustSuccess.json @@ -1,10 +1,10 @@ { - "description": "MC4_4_faulty_Test2NotEnoughTrustSuccess.json", + "description": "auto-generated from Apalache counterexample", "initial": { "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "EAA36857D0DB20A7B1E315A74E9871F509D7FD52CD3172CFD7A0A9E360CD6759", - "part_set_header": { - "total": 1, - "hash": "EAA36857D0DB20A7B1E315A74E9871F509D7FD52CD3172CFD7A0A9E360CD6759" + "hash": "7AB2E26289DD3BFA98D6025E26614769A34884245C80FF4CE30FB034A2C7D1E2", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "qnqWPNmmyQfNJkhPH2YBpWRlGjoLOoTzGLAKYuBuDzuLpDhvh+F4AOwsalo+qR70Lpx/yKU/+BTLPGxIIP47DA==" + "signature": "pxqJXwptWWubmtR7gecm47DQU43eKhoU0ZZir8U8AVScmlJpKgBAKFJAJFEnRQLNMghgO69P6FoooCtH1v28DQ==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "n0hMeOMwr+ZtcObdo2T99UzOfulXuCS7nbNCVbo7IrgqLHfo6xlxEddlOdYQp+3quMGI79osrl4EYvTB5wU4Cw==" + "signature": "yzKI6jGm1V/eah9Q/AKYrCTGNGHhX1x0VaO5+2Zo7LPTYn+jfT4msfKjJm8PFdVTqrrST1vZhr8utcMKFPivDA==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "v52uJnW0wNu4YPG7K46I+sGGJxj+0wx09KQZZsbmspL02nH3LhZahLFb3KBhswHevKKlo52X4VKszwRnlw+yDA==" + "signature": "XZmVfsE9Ll5k6aKYbVoRzN26diMnBZzdz1OpUNFOyVs7CfozO4GJ1JcP3pVc5TPeg5fnKGZ7TAzZ4tb32adkBA==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "HuW1zhtKSgz1Z5JXr2Gyvw3q/bh2Wxf34cmkn8j/d5v3EZtDzfl+T4Y42Pgb9cnBLpKF2YmUkKcv2pyoctf5AA==" + "signature": "/zJheuPeG08hqabF02va1ElFuwYCQRkRlcZvv5KsKBRh6hrTQ20++DC9n2q4X4JNT39465kh/QrGcgkRlL2LAQ==" } ] } @@ -69,29 +69,20 @@ }, "voting_power": "50", "proposer_priority": null - }, - { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", - "proposer_priority": null } - ] + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } }, "trusting_period": "1400000000000", - "now": "2020-10-21T12:39:48.160328398Z" + "now": "2020-10-22T23:37:57.1603409877Z" }, "input": [ { @@ -99,39 +90,57 @@ "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", "height": "4", - "time": "1970-01-01T00:00:05Z", + "time": "1970-01-01T00:00:04Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "019BDE90D53278193892E7526F8EDFB330CF828FA40DE442B756E5FA008AA75A", - "part_set_header": { - "total": 1, - "hash": "019BDE90D53278193892E7526F8EDFB330CF828FA40DE442B756E5FA008AA75A" + "hash": "E4BBF4606C9CBBE0F3E7A77EFDCF998FA0A6193FE12E1DBFC6FDC76FDA8EB82F", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:05Z", - "signature": "OhqYhk9MREkNYUm7+2wj6VyzM9mVrhuwgcGlUa9bC/XkgJ3w4WOkNz2KVxIMHOS+3z25LxmEKP54pi430CpeAA==" + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "33bHZMxKIx+VKVA610Xbn6tN7BNc2KqKe6u/ZmjPKJ57/b87Yvop2DhJy8cuQ6JVHUI2W3skGamZSejSLNMYAQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "ng10nF7rqN2cYtpkYx3S3h936d4iaN72nFRb1Qkvn0sbH/cPygc9YUB21yqFVkdzT/n8LSfFXttm/LLtTUr6AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "Orl8n3xa8pQPdQ3JeItR5/sswXAm4U8LL6pENwYTEi9xcem+hxZEd9i9PBdCUVm3JKst5vrkVd33GAQDZv9FBg==" } ] } @@ -146,52 +155,69 @@ }, "voting_power": "50", "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ + }, { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null + } + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, + "voting_power": "50", + "proposer_priority": null + } + }, + "next_validator_set": { + "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + ], + "proposer": { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + } }, - "now": "1970-01-01T00:23:17Z", + "now": "1970-01-01T00:00:05Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -199,18 +225,18 @@ "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", "height": "3", - "time": "1970-01-01T00:00:05Z", + "time": "1970-01-01T00:00:03Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", - "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", - "consensus_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", "app_hash": "", "last_results_hash": null, "evidence_hash": null, @@ -220,24 +246,54 @@ "height": "3", "round": 1, "block_id": { - "hash": "B01A38225FB89F2211513DD148FEA72EF29900BEC909994A45546AC1D9B3F4D8", - "part_set_header": { - "total": 1, - "hash": "B01A38225FB89F2211513DD148FEA72EF29900BEC909994A45546AC1D9B3F4D8" + "hash": "64E9F7B57088069FD5CAB15A7666CF077CE7EA9BD6D6079A5CACBE6AC1870B03", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ { "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:05Z", - "signature": "oKV4etlDTo1H8hzjKYAWaAEQ3c0nYNNtbCk2Ps/I6xelmcpbI7T9xlJyqlq1k7+PFBRr4VQfVqYReYXdg46GBw==" + "timestamp": "1970-01-01T00:00:03Z", + "signature": "vi1lneplrBXuryiDAwrHPdYV6d7QzoPzLda9Srh3Q3nc93w2g24IXNATudc9HkFXv8z1bLLOTNLQOm+/EjGUBQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "ta/HGGDeWtXcozVwYdO1BpFgLW9PAob5+rLZOA9BPs0RyK772LvjmR6F+Ftt2KoJc87GFAqrF0hoz8h9i0IgDg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "+v75/wrvKOBsnG11CNvOrNwC9+hc4x//sjM2dD47jxnYuVHghPMJxX4Bv4nHuAq/I0PS5dfE4cJzeCIzkITKAQ==" } ] } }, "validator_set": { "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, { "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { @@ -247,7 +303,16 @@ "voting_power": "50", "proposer_priority": null } - ] + ], + "proposer": { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } }, "next_validator_set": { "validators": [ @@ -277,12 +342,29 @@ }, "voting_power": "50", "proposer_priority": null + }, + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + } }, - "now": "1970-01-01T00:23:18Z", + "now": "1970-01-01T00:00:05Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -290,7 +372,7 @@ "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", @@ -299,9 +381,9 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", - "next_validators_hash": "8F7563A251157673D3222D25CC728CE0C9D049A33D8776DC9A2465DEEEC4F5CD", - "consensus_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "6E2A33745D333F9362F399C3DC982064067614AAB0FD4C59DE5720D88E00F254", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, "evidence_hash": null, @@ -311,10 +393,10 @@ "height": "2", "round": 1, "block_id": { - "hash": "1675C8651E685C51D71557230044687433354724042B96E448D7CB5DD63D782E", - "part_set_header": { - "total": 1, - "hash": "1675C8651E685C51D71557230044687433354724042B96E448D7CB5DD63D782E" + "hash": "C7DCE6D97942E9ADA3ABB77343FFD3E5D3B309584D5329A861285F68C75A4FEB", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ @@ -322,19 +404,7 @@ "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:02Z", - "signature": "XaLEDRyORZoi6iQKC0PT8kUcoBM7dkvDQ6rIHPyDzzh5jCopJO1QaP4szmAbDdrSV0+FiIdUR58pqFNCNEixCw==" - }, - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "a8D11jt2L1iqVcCmijEG33x1ZpDPwyDJkQfl+Z9ZZBy/dRWrHPq9+AFjvWdPhWPhFdKAf7hgkE+UFUeUHSyuCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "timestamp": "1970-01-01T00:00:02Z", - "signature": "ia6sqXFuJ4w8+BQyvKWJFrgg3GJCogW1rCyN/b6XPKEcVOORpFXOT79nVkGFjydUjKiWuANBl2Lf0zstoi6lCg==" + "signature": "mNga4WlIs0yW4CAdEKfZmlnQaDkwxGJdieTmY3VuX2ND6jHvgJ3q+TlMp1SQYtlsImB9Ak9f6pYl1KKOLo0iDQ==" } ] } @@ -349,7 +419,20 @@ }, "voting_power": "50", "proposer_priority": null + } + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, + "voting_power": "50", + "proposer_priority": null + } + }, + "next_validator_set": { + "validators": [ { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -367,34 +450,29 @@ }, "voting_power": "50", "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ - { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" - }, - "voting_power": "50", - "proposer_priority": null }, { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + ], + "proposer": { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + } }, - "now": "1970-01-01T00:23:18Z", + "now": "1970-01-01T00:00:06Z", "verdict": "SUCCESS" }, { @@ -402,39 +480,57 @@ "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", "height": "4", - "time": "1970-01-01T00:00:05Z", + "time": "1970-01-01T00:00:04Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", - "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "019BDE90D53278193892E7526F8EDFB330CF828FA40DE442B756E5FA008AA75A", - "part_set_header": { - "total": 1, - "hash": "019BDE90D53278193892E7526F8EDFB330CF828FA40DE442B756E5FA008AA75A" + "hash": "E4BBF4606C9CBBE0F3E7A77EFDCF998FA0A6193FE12E1DBFC6FDC76FDA8EB82F", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", - "timestamp": "1970-01-01T00:00:05Z", - "signature": "OhqYhk9MREkNYUm7+2wj6VyzM9mVrhuwgcGlUa9bC/XkgJ3w4WOkNz2KVxIMHOS+3z25LxmEKP54pi430CpeAA==" + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "33bHZMxKIx+VKVA610Xbn6tN7BNc2KqKe6u/ZmjPKJ57/b87Yvop2DhJy8cuQ6JVHUI2W3skGamZSejSLNMYAQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "ng10nF7rqN2cYtpkYx3S3h936d4iaN72nFRb1Qkvn0sbH/cPygc9YUB21yqFVkdzT/n8LSfFXttm/LLtTUr6AQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "Orl8n3xa8pQPdQ3JeItR5/sswXAm4U8LL6pENwYTEi9xcem+hxZEd9i9PBdCUVm3JKst5vrkVd33GAQDZv9FBg==" } ] } @@ -449,52 +545,69 @@ }, "voting_power": "50", "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ + }, { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null + } + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, + "voting_power": "50", + "proposer_priority": null + } + }, + "next_validator_set": { + "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + ], + "proposer": { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + } }, - "now": "1970-01-01T00:23:21Z", + "now": "1970-01-01T00:00:06Z", "verdict": "SUCCESS" } ] diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.json b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test3NotEnoughTrustFailure.json similarity index 58% rename from light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.json rename to light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test3NotEnoughTrustFailure.json index 93aa22566..14a857989 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_Test3NotEnoughTrustSuccess.json +++ b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test3NotEnoughTrustFailure.json @@ -1,10 +1,10 @@ { - "description": "MC4_4_faulty_Test3NotEnoughTrustSuccess.json", + "description": "auto-generated from Apalache counterexample", "initial": { "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", @@ -14,7 +14,7 @@ "last_commit_hash": null, "data_hash": null, "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", - "next_validators_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, @@ -25,10 +25,10 @@ "height": "1", "round": 1, "block_id": { - "hash": "F7DC6F348F04E01EC7DEA4348A3BFA2F0D7533900986EA66F6006C70BDD52D2E", - "part_set_header": { - "total": 1, - "hash": "F7DC6F348F04E01EC7DEA4348A3BFA2F0D7533900986EA66F6006C70BDD52D2E" + "hash": "F26082F2CA0D536F8E4C654742D2369DC5EF690F236E5F0BE5FC5FD622EAB70F", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ @@ -36,25 +36,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:01Z", - "signature": "S5wM4flAsMJ7uGSGduppmUqDeFZBUBFKkp+LTy249+AgM3oup9ULs7eUzNiwjhV4gWnPnLJ91m6IZ3s047xzAg==" + "signature": "XGxUkrvK3KqBzbLWCM1bCfqnzyxr2XmFxWBJrB6MpKXm7KOB4TAoHyynFFP1HZbK4OIEbbphmOxKwOejCIpcBg==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:01Z", - "signature": "ZLOGEO5mgrVoTpFA5DLMLX0ggBWnWLWmMF5tAorZC732T+oR2u2USAvGhkZtpM73WN3NUp04aVHInGMsYtz9Dg==" + "signature": "isDTkhSaCqV8qjCnGUpeILO7P5VWqWHZST+fdSSoujqRmINAoIIs3vAp+/hlWlo0/mxCVo0jMG2HAjIqMFchAQ==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:01Z", - "signature": "Lwa9l7+dJci4+mXD9ZsvLnbX0TuzWYIjfj9vU51rAftFRGEig7DHToufWaMfjwGMN53WrG72YfHAXxBigWaBBg==" + "signature": "6q680WxHEMBgf03VdRA6R0jw+Hc4lPfhaNl/llLChCnkBKHYc5jheAo42JVqo83FL/eOt47wy5bCCHeWrULQDw==" }, { "block_id_flag": 2, "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "timestamp": "1970-01-01T00:00:01Z", - "signature": "SSHBm3HdeyC1fgPqjTp647mRGxaCKA/GGraM0UFcuXv3mUjfjowL8CNjthJHgXIQCmYdF0HDwLZb1SCvWFe0Aw==" + "signature": "IjGd4HVCyIXKXLoElyraXDI4Z832wsboWXejkyfdagdlSyIS/YewYRmPXaTi1/d1g2ZD38UQJ694vqhErFskBw==" } ] } @@ -62,36 +62,54 @@ "next_validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null } - ] + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } }, "trusting_period": "1400000000000", - "now": "2020-10-21T12:40:40.160328404Z" + "now": "2020-10-22T23:38:57.1603409937Z" }, "input": [ { @@ -99,7 +117,7 @@ "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", @@ -108,30 +126,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8", - "part_set_header": { - "total": 1, - "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8" + "hash": "3C9E4817CCE683EA3BED66C7063BB40011F4D8A57587B73929F2A9BBC342F565", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:06Z", - "signature": "t9kW3UR6XYVKMvGWcYkrZV6IjaJOp6a2p6g3bDE9v1XsUlDQ6f6QOXeJiDGqFG6E+Y3LX8njY5d17qXsODj0AA==" + "signature": "62V4YgHWUAFlnGG/n9JCxAB3OATjHccKDMwfLfJ+I7PVb8kLQfBqOYcxHCeaweq9MFWWjGZFC4s1wBcCL2snBg==" } ] } @@ -139,32 +157,49 @@ "validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null } - ] + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } }, "next_validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + ], + "proposer": { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + } }, - "now": "1970-01-01T00:00:07Z", + "now": "1970-01-01T00:23:16Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -172,7 +207,7 @@ "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", @@ -181,36 +216,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", - "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "consensus_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "3", "round": 1, "block_id": { - "hash": "7C94A02475603E294985D76A6FB261947037CEDECD49917F8E55C93042A406BB", - "part_set_header": { - "total": 1, - "hash": "7C94A02475603E294985D76A6FB261947037CEDECD49917F8E55C93042A406BB" + "hash": "E543DAD0E4B73D4B60343D3DE53173E2B49E43CB81C0AECF8E9FCB3218099804", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:05Z", - "signature": "zdrkBFPJwNdo1URmadTfXjXs/FWEz45ZmhLGj9zQ5UiVhZ14trfnOvVzE5YStlRxiYefH1pBghCLS/C3+ALKDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:05Z", - "signature": "6SesG2Pllmkgo3v0mCWRf5YBDybnREQ+otGImFk7dhlPaAoIPPwhKk6qlLUMaHrEwVBUh36JvdWlFtaF6DlSAQ==" + "signature": "7KEG7D0y9ywyysuJNWC+xatVAPYMj7zPCub7bE45aLrNy8h2sJhN7feAgjmS6T41r+dvCK+Aujv1cPqmk9yADA==" } ] } @@ -218,27 +247,36 @@ "validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null + } + ], + "proposer": { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, + "voting_power": "50", + "proposer_priority": null + } + }, + "next_validator_set": { + "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ + }, { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -247,12 +285,29 @@ }, "voting_power": "50", "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + } }, - "now": "1970-01-01T00:00:07Z", + "now": "1970-01-01T00:23:16Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -260,7 +315,7 @@ "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", @@ -269,9 +324,9 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", - "next_validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", - "consensus_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", "app_hash": "", "last_results_hash": null, "evidence_hash": null, @@ -281,10 +336,10 @@ "height": "2", "round": 1, "block_id": { - "hash": "66564C37F3938D71A805A1B4F8A4D4695821715FBEDCAE9B4E9B8107546D6B5B", - "part_set_header": { - "total": 1, - "hash": "66564C37F3938D71A805A1B4F8A4D4695821715FBEDCAE9B4E9B8107546D6B5B" + "hash": "2F2E54CC1FC27CAF2207FBB61D855257371285AA1467949E3D8E935C875BFE1E", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ @@ -292,19 +347,25 @@ "block_id_flag": 2, "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "timestamp": "1970-01-01T00:00:03Z", - "signature": "6BxvEzNLrr8OCdNXYf2rWo5U7ZvfOr1269EPWP6gktPoxQF89CqeX6CuDEF+BGvG3mW4aKvlHkmsAEjVtia0CA==" + "signature": "H1uV+Z1xXJKQVCBiNUYysLFDwnNZI9RuaqPuD38XkxyP0VrAuu18xskZdh7ZF+y6+utiMvRg5R9U931J3bCDAw==" }, { "block_id_flag": 2, "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:03Z", - "signature": "TtpOye4tmTBPF1xBMkyX0dD7k17LZYL1g9rEOkFsSY0to4P3FgrVm6TM8vXsFK+7NDsoa/8eBVONuflwcIhKAg==" + "signature": "stWvLBOVIcXELvkJ8kfi8cgtk7ki3fQXzTvV4BYgzsXNzFbH++ReYn3tfMxKITCvwXxwF0qi/CoUf/9KFvNLAw==" }, { "block_id_flag": 2, "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:03Z", - "signature": "7G/4zXSW50jo+kN5LSl+TjDD3rH8TDGZ8fdO7CshCp/Eha8UhrE2EQ9aVe/w+5GbXGfqWPDdd3QYp+t6dDdiCg==" + "signature": "2dXKliVjyabwglYDmS11xUgsCqIINz7Ipw7JnZdfd4vGkmB6NDPPNcxQuUKXdzmJV6kaHFdcjSOvv1USu0YxCg==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null } ] } @@ -312,41 +373,68 @@ "validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null }, { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null } - ] + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } }, "next_validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null @@ -359,12 +447,29 @@ }, "voting_power": "50", "proposer_priority": null + }, + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + } }, - "now": "1970-01-01T00:00:09Z", + "now": "1970-01-01T00:23:16Z", "verdict": "SUCCESS" }, { @@ -372,7 +477,7 @@ "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", @@ -381,30 +486,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" }, "commit": { "height": "4", "round": 1, "block_id": { - "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8", - "part_set_header": { - "total": 1, - "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8" + "hash": "3C9E4817CCE683EA3BED66C7063BB40011F4D8A57587B73929F2A9BBC342F565", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", "timestamp": "1970-01-01T00:00:06Z", - "signature": "t9kW3UR6XYVKMvGWcYkrZV6IjaJOp6a2p6g3bDE9v1XsUlDQ6f6QOXeJiDGqFG6E+Y3LX8njY5d17qXsODj0AA==" + "signature": "62V4YgHWUAFlnGG/n9JCxAB3OATjHccKDMwfLfJ+I7PVb8kLQfBqOYcxHCeaweq9MFWWjGZFC4s1wBcCL2snBg==" } ] } @@ -412,32 +517,49 @@ "validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null } - ] + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } }, "next_validator_set": { "validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + ], + "proposer": { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + } }, - "now": "1970-01-01T00:23:22Z", + "now": "1970-01-01T00:23:17Z", "verdict": "NOT_ENOUGH_TRUST" }, { @@ -445,7 +567,7 @@ "signed_header": { "header": { "version": { - "block": "11", + "block": "0", "app": "0" }, "chain_id": "test-chain", @@ -454,36 +576,30 @@ "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", - "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "consensus_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "F6AF3B9193F2672E2E3830EC49F0D7E527291DEDA4326EDB7A6FB812BE8F3251", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" }, "commit": { "height": "3", "round": 1, "block_id": { - "hash": "7C94A02475603E294985D76A6FB261947037CEDECD49917F8E55C93042A406BB", - "part_set_header": { - "total": 1, - "hash": "7C94A02475603E294985D76A6FB261947037CEDECD49917F8E55C93042A406BB" + "hash": "E543DAD0E4B73D4B60343D3DE53173E2B49E43CB81C0AECF8E9FCB3218099804", + "parts": { + "total": 0, + "hash": "0000000000000000000000000000000000000000000000000000000000000000" } }, "signatures": [ { "block_id_flag": 2, - "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "timestamp": "1970-01-01T00:00:05Z", - "signature": "zdrkBFPJwNdo1URmadTfXjXs/FWEz45ZmhLGj9zQ5UiVhZ14trfnOvVzE5YStlRxiYefH1pBghCLS/C3+ALKDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", "timestamp": "1970-01-01T00:00:05Z", - "signature": "6SesG2Pllmkgo3v0mCWRf5YBDybnREQ+otGImFk7dhlPaAoIPPwhKk6qlLUMaHrEwVBUh36JvdWlFtaF6DlSAQ==" + "signature": "7KEG7D0y9ywyysuJNWC+xatVAPYMj7zPCub7bE45aLrNy8h2sJhN7feAgjmS6T41r+dvCK+Aujv1cPqmk9yADA==" } ] } @@ -491,87 +607,36 @@ "validator_set": { "validators": [ { - "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" - }, - "voting_power": "50", - "proposer_priority": null - }, - { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" }, "voting_power": "50", "proposer_priority": null } - ] + ], + "proposer": { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } }, "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" }, "voting_power": "50", "proposer_priority": null - } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" - }, - "now": "1970-01-01T00:23:22Z", - "verdict": "SUCCESS" - }, - { - "block": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "0" }, - "chain_id": "test-chain", - "height": "4", - "time": "1970-01-01T00:00:06Z", - "last_block_id": null, - "last_commit_hash": null, - "data_hash": null, - "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", - "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", - "app_hash": "", - "last_results_hash": null, - "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" - }, - "commit": { - "height": "4", - "round": 1, - "block_id": { - "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8", - "part_set_header": { - "total": 1, - "hash": "75E9E4006B6EDB551172879A34909FD63C9F66A156E866A3344B4E38100867D8" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", - "timestamp": "1970-01-01T00:00:06Z", - "signature": "t9kW3UR6XYVKMvGWcYkrZV6IjaJOp6a2p6g3bDE9v1XsUlDQ6f6QOXeJiDGqFG6E+Y3LX8njY5d17qXsODj0AA==" - } - ] - } - }, - "validator_set": { - "validators": [ { "address": "81D85BE9567F7069A4760C663062E66660DADF34", "pub_key": { @@ -580,11 +645,7 @@ }, "voting_power": "50", "proposer_priority": null - } - ] - }, - "next_validator_set": { - "validators": [ + }, { "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", "pub_key": { @@ -594,12 +655,20 @@ "voting_power": "50", "proposer_priority": null } - ] - }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + ], + "proposer": { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + } }, - "now": "1970-01-01T00:23:24Z", - "verdict": "SUCCESS" + "now": "1970-01-01T00:23:25Z", + "verdict": "INVALID" } ] } \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test3NotEnoughTrustSuccess.json b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test3NotEnoughTrustSuccess.json new file mode 100644 index 000000000..39e247979 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_Test3NotEnoughTrustSuccess.json @@ -0,0 +1,1344 @@ +{ + "description": "MC4_4_faulty_Test3NotEnoughTrustSuccess.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57", + "part_set_header": { + "total": 1, + "hash": "1C7FFFFB7BA0E2AA68FD6C9AB0F5E177A78AA392A60C9ECC89CAD3DAE1C80E57" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "FKIpE4jILZ3tmeBUFmaT48nAxIBsAIRcnQ6dBdqHV6Xjhd2Bex94Yaqgg7Lv5NL1HACt5qH60qVRiEsv5oJwAA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "uuvlEKa9M4a+VtHoE2Racjm2Tzb41Hf/TH35lP158juWjHEgg2k1MnthMhcFaBxdeCucQulrAwUGd99/L4+uCg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Lolcqh4BLNDC4KTdmaB1bCXA0KjCKB8Rk73qvfL1oojxIIuA1l6WBES9iDPdoEe2QwPwOMtwbGj/A1NwJnvgAw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "NYxAvpFkpNWI9VLFcqdJyOT1KMMD2ZYCKLV4h0yuU+DkoyYmJnJv0dPtUXwalVHw0LT9K1Ad6f7rI3AfLTEuAw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:12:07.160465752Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:07Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "5A8756280F9E41461CF35AEB170D6A0FF891B8B4E478EF9D9D4EF0E991105372", + "part_set_header": { + "total": 1, + "hash": "5A8756280F9E41461CF35AEB170D6A0FF891B8B4E478EF9D9D4EF0E991105372" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:07Z", + "signature": "j5U/IlAlthwxZhKLK7++SeLIJspIZ1MxFlWYpj30eQwDNQ/whMav2CFBKFcRSQPp3WBwBnjn2hrpGwGN6S8lCg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:08Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "5", + "time": "1970-01-01T00:00:05Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + }, + "commit": { + "height": "5", + "round": 1, + "block_id": { + "hash": "3EF9B6487BBFD040F7B2D18F095A91F3006537E041C5821E04F2F58D6896D389", + "part_set_header": { + "total": 1, + "hash": "3EF9B6487BBFD040F7B2D18F095A91F3006537E041C5821E04F2F58D6896D389" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:05Z", + "signature": "PbcrL33Torv8IbhF9eHaj715aZClNeT7MhHQvtLuPLA9LLtXxLpbnm6C7HO6xu6shtneIs4L4hA+vpTK1aXYAg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 5, + "time": 5, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 5, + "time": 5, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 5, + "time": 5, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:08Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", + "next_validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "consensus_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "9741F8C7485810CD9555CDF963CC7AE2D2680A2B030084BEF6EF380B9AA9AA02", + "part_set_header": { + "total": 1, + "hash": "9741F8C7485810CD9555CDF963CC7AE2D2680A2B030084BEF6EF380B9AA9AA02" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "Z9YVS3ZMhe2USvYItsPTNfvh66AdV5lAua1C6yL/6alBbNSZbHJWenDI/3EmGvK5AO0qq/wO6Yo5w3iEtUoJAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "s81uQvfdo4YyZZYDLnFlfU9bMYLrcC2nGO8s19tQHZamgcZgWn5DAePni06fOAvIM7Rw2lbqdq4FPYJRY8OoCg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:09Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:07Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "5A8756280F9E41461CF35AEB170D6A0FF891B8B4E478EF9D9D4EF0E991105372", + "part_set_header": { + "total": 1, + "hash": "5A8756280F9E41461CF35AEB170D6A0FF891B8B4E478EF9D9D4EF0E991105372" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:07Z", + "signature": "j5U/IlAlthwxZhKLK7++SeLIJspIZ1MxFlWYpj30eQwDNQ/whMav2CFBKFcRSQPp3WBwBnjn2hrpGwGN6S8lCg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:09Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "76F912C91B98430025E0EDF5B817CAFF864A9C44BBBDFC70F5F64D603995C66C", + "part_set_header": { + "total": 1, + "hash": "76F912C91B98430025E0EDF5B817CAFF864A9C44BBBDFC70F5F64D603995C66C" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "OeRd0XN9HoQdrfV5Vq9zO9Vfos0/t4z+8W17pJszqo1pqa1sQ0ZLh1If1/FsPsKTF0eseAAXAI+PHoYqDawTCQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:09Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:07Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "5F7419DA4B1BCFC2D2EB8C663405D9FF67DDE3BF88DB0A8A5D579E6FF1AD814E", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "5A8756280F9E41461CF35AEB170D6A0FF891B8B4E478EF9D9D4EF0E991105372", + "part_set_header": { + "total": 1, + "hash": "5A8756280F9E41461CF35AEB170D6A0FF891B8B4E478EF9D9D4EF0E991105372" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:07Z", + "signature": "j5U/IlAlthwxZhKLK7++SeLIJspIZ1MxFlWYpj30eQwDNQ/whMav2CFBKFcRSQPp3WBwBnjn2hrpGwGN6S8lCg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 7, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:23Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestFailure.json b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestFailure.json new file mode 100644 index 000000000..b5aa557e8 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestFailure.json @@ -0,0 +1,744 @@ +{ + "description": "MC4_4_faulty_TestFailure.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D", + "part_set_header": { + "total": 1, + "hash": "6B68DB34DEF944920D6638B3AA84FE1DF790BC8BDC5189E201F23730D5756A9D" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "8rGIxi7DjBLFlHUo/lAgTpmzsnTZ8HOgnQaIoe+HEM5AmrjBaVDWVMb5/nNAnJTj4hcReCh4jviXcyRkItFJCA==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "3cXnzhzJLKeF47ulcIWjgqsv9JBf9olbAo0mcjo7Ij6TfmCpJO6SmTiacBkiznsFSOc1ZSH+cHDBKA4AT7ozAg==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "4O8c5hxoHR861ldolxeY9W1iXCdxYJVIf0xD3+sANSxo0ipXayv8IS7YFw1zzZvDbjRRazVzbfyBYf2jl4JeDw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "2Hel7uygQXpjYRJZiwtPLKNxT2Tg1/F5Zzs3VZpleFII9H1e5Gs02UjU0lybSXBKk/tD+NXPsdchrH/6/DmwAQ==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:10:21.160465742Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:06Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "next_validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "consensus_hash": "75E6DD63C2DC2B58FE0ED82792EAB369C4308C7EC16B69446382CC4B41D46068", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "9AE91D8CEA4F9B8E06D93E73A3CE91617FE9A1033B9E7FCAE4B716C044998835", + "part_set_header": { + "total": 1, + "hash": "9AE91D8CEA4F9B8E06D93E73A3CE91617FE9A1033B9E7FCAE4B716C044998835" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:06Z", + "signature": "iQaRhnFjLPytMU9aS7EHFW7JMyff1fDMY5ZAuECYAVt61jlyQqVe6UYyrASOgeC/3YWDEqE2O6XgQyJYLEg6Cg==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "chain_id": null, + "height": 3, + "time": 6, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [], + "provider": null + }, + "now": "1970-01-01T00:23:12Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "A78E08731F2D9F869A565DFAB2F2A55D766F1F9B9D8CF68633D89D048F5A3E01", + "part_set_header": { + "total": 1, + "hash": "A78E08731F2D9F869A565DFAB2F2A55D766F1F9B9D8CF68633D89D048F5A3E01" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "Z27FgkivMmlR3Df0tdPviTcYDs4n8Ul/037L79IixffJ3p1dfrA35atLSwpJIO0mZZyDCEl8H25G/9TocghKCw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "qOaONQSh+BOsLZWF9gDcZqgxoqoSuuO9QyNE4ti+cC6lJ/97Ji/5JnjSJdQlOnrisXf02LrOUC5CYIrdGMoLAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "YiLAUWJi93fc5UNECV1wMsZU6zfQI5kakYV1zMqOUEG4WhiX4fjsdEk6/9KYB/OvK2WPtADWqw89IY1Rleo5Aw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:12Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "730D3D6B2E9F4F0F23879458F2D02E0004F0F241" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "255D9575CF6956C5FF12C28C874C1F253CAAD5BE969A49A7EB2051DD39E9A57F", + "part_set_header": { + "total": 1, + "hash": "255D9575CF6956C5FF12C28C874C1F253CAAD5BE969A49A7EB2051DD39E9A57F" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "j3M0u6T8vqkq0AsJ3+8AdsnfmRRp1qkqT8gnLz4xL1idOzM0a0Nj6i3MtJA15Fo2fwGBoq3IMD6jN5ZF91epBQ==" + } + ] + } + }, + "validator_set": { + "validators": [] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:12Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestHeaderFromFuture.json b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestHeaderFromFuture.json new file mode 100644 index 000000000..6609ad0b1 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestHeaderFromFuture.json @@ -0,0 +1,327 @@ +{ + "description": "MC4_4_faulty_TestUntrustedBeforeTrusted.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "A85B7F07FE8746ABBD0F58DCAB3FF6FD9D9AA167B0BF1DA9C963B9004F37CA40", + "part_set_header": { + "total": 1, + "hash": "A85B7F07FE8746ABBD0F58DCAB3FF6FD9D9AA167B0BF1DA9C963B9004F37CA40" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "jh+PtBHMF7RkPfgNfUv91C029lyCwcX2ZUFS2ZF6QJ3WbVnOrAV5a6KvGSHZwv1mdDzvacxkxyMeVO+cKXreBg==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "tC/aOP3Ombl0MO3DpMjvbf5s/CnghG9O6KKcMcuyCjx/0U/+K/5trmgSoFUU8QM9lL1FYkR3f2moX48n3yw/CA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "+OTQXTzlNtYPUk9f9yENJrTynpy3mCRHSGUHoOkAoFciWjoqkf+kkI+BiPJcci72zrXz3rcsKV82ukPdtv4YDg==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9bD1oaXHT1uSEAid7YGIgUVSRzBdgYzDJd32I7h8kUmL+Mo9sTX/cxLvPYY29PKrZ6Q/ffaDTZG3MwRWorEVAg==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:14:09.160465764Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:00Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "next_validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", + "consensus_hash": "E624CE5E2693812E58E8DBB64C7A05149A58157114D34F08CB5992FE2BECC0A7", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "6AE5C701F508EB5B63343858E068C5843F28105F" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "6F5985A006E696DA8A7F3678C220F3F1271899D129B444D15202281A610AC25C", + "part_set_header": { + "total": 1, + "hash": "6F5985A006E696DA8A7F3678C220F3F1271899D129B444D15202281A610AC25C" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:00Z", + "signature": "tyylyR446sUBq9qkO3vz7YsbrtLjxo8KvzznBt5ZL9mI+MFf0KfYjnE7DPTM5I/ppkP/jJ4f/3aX7ubT56dlCw==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 0, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 0, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 0, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:19Z", + "verdict": "INVALID" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestSuccess.json b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestSuccess.json new file mode 100644 index 000000000..60aa177f5 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestSuccess.json @@ -0,0 +1,1436 @@ +{ + "description": "MC4_4_faulty_Test2NotEnoughTrustSuccess.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "0D038B1BA2ED7B1EF4D4E250C54D3F8D7186068658FAA53900CA83F4280B1EF2", + "part_set_header": { + "total": 1, + "hash": "0D038B1BA2ED7B1EF4D4E250C54D3F8D7186068658FAA53900CA83F4280B1EF2" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "XJC+kaVazdli/oMNHnFQOujOJLxFnez2DAUv5Uy+wPGeypkinrk2c79ZmlB5YHBTJaLh6yotq1XiLzy3zUAJAQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "pj86O2mwAQcn/MggMVEK1F6yhqnaMcxqxKyZ9DgIfFVqJIgQLb5SsuqyxPcMxxRhDTjjqfkATRGIiHPEthrFCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "QssWTiluThPYflhI3bBuoeIBXlMR39I+vJb7EvLf6FVyxp0Ih7kW26wkmqjgHf0RyDAu9sny3FBrc/WbPXhFDQ==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "9xg3G66gizJBzWybdYKRtyg8c52U6vKmUT9TKb5MQ5MP/6IVCbhnvUjzw4Oe5stsnHMGvsx6Q7IVS3Ma7CbBDA==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:10:45.160465744Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "BF0AA3CD8B7ABB2FA917784235DA4B96541C9A783329F0994C0474BBC92D0B3B", + "part_set_header": { + "total": 1, + "hash": "BF0AA3CD8B7ABB2FA917784235DA4B96541C9A783329F0994C0474BBC92D0B3B" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "v7I1QIk//BgIE2VTwJLB6MgHkW4Z0cCRcgcO8VBtbD6OHzQAczzF+AyzydMK69eUCaATVLPlduiBQcDw5ToXDw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "234DMf5Gif95qzWUs8Ccx8RYC4V4apHKkPWAuZcddSG/Zn2QQPKNlH9EqKUL1a4ZEjdLs2Qc3gftyIaB/c1zBQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "408Rn/XN1nM8wQw62vqv9O6P6rJRYwzw00lDLq0ipPExG7xvBRRJt3SX7Lj7oadafziN8Zxs93YEspcXxbshBw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:05Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "next_validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "consensus_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "DDC8C90C1A8D68DE38FF55EED9D87E0BCEAAC54D913006BE9F2AD54474B0ED7C", + "part_set_header": { + "total": 1, + "hash": "DDC8C90C1A8D68DE38FF55EED9D87E0BCEAAC54D913006BE9F2AD54474B0ED7C" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "nTngJDOpsrj0/EOoQcLOr+ntDuEKiuVoMghdReGJE2aQmG3xOuP5Yk4bR06XGEAYH6qkyepwcLZ50pzuVLaKCw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "UVAhl9njITa1aLkb/4pbVn+6uO9WXsyVTxqYDM87aBUDWdhYuo/pZUySlZZ1ccL9baIQqeyC3VYHOJ7hZgJkAw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:05Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "next_validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "consensus_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "E07AE1111A9574EAE458A9637CC9AF5A289B12EA46B53C36051B9C97BA6254AC", + "part_set_header": { + "total": 1, + "hash": "E07AE1111A9574EAE458A9637CC9AF5A289B12EA46B53C36051B9C97BA6254AC" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "Gak9pup5jKdSDa0m49wwr82gUlIpg9qdkvt9N8DX8fvi/jIv9Zib7ukqINCQA8VzLH3W0v0gIzWObPGpNIM1AA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:20Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "AAFE392AA939DA2A051F3C57707569B1836F93ACC8F35B57BB3CDF615B649013", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "BF0AA3CD8B7ABB2FA917784235DA4B96541C9A783329F0994C0474BBC92D0B3B", + "part_set_header": { + "total": 1, + "hash": "BF0AA3CD8B7ABB2FA917784235DA4B96541C9A783329F0994C0474BBC92D0B3B" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "v7I1QIk//BgIE2VTwJLB6MgHkW4Z0cCRcgcO8VBtbD6OHzQAczzF+AyzydMK69eUCaATVLPlduiBQcDw5ToXDw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "234DMf5Gif95qzWUs8Ccx8RYC4V4apHKkPWAuZcddSG/Zn2QQPKNlH9EqKUL1a4ZEjdLs2Qc3gftyIaB/c1zBQ==" + }, + { + "block_id_flag": 1, + "validator_address": null, + "timestamp": null, + "signature": null + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "408Rn/XN1nM8wQw62vqv9O6P6rJRYwzw00lDLq0ipPExG7xvBRRJt3SX7Lj7oadafziN8Zxs93YEspcXxbshBw==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:21Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.json b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestUntrustedBeforeTrusted.json similarity index 69% rename from light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.json rename to light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestUntrustedBeforeTrusted.json index bb2f575e4..8116355a8 100644 --- a/light-client/tests/support/model_based/single_step/MC4_4_faulty_TestUntrustedBeforeTrusted.json +++ b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestUntrustedBeforeTrusted.json @@ -1,5 +1,5 @@ { - "description": "MC4_4_faulty_TestUntrustedBeforeTrusted.json", + "description": "MC4_4_faulty_TestHeaderFromFuture.json", "initial": { "signed_header": { "header": { @@ -82,7 +82,7 @@ ] }, "trusting_period": "1400000000000", - "now": "2020-10-21T12:41:51.160328411Z" + "now": "2020-11-06T10:13:53.160465763Z" }, "input": [ { @@ -94,73 +94,94 @@ "app": "0" }, "chain_id": "test-chain", - "height": "4", - "time": "1970-01-01T00:00:00Z", + "height": "3", + "time": "1970-01-01T00:23:21Z", "last_block_id": null, "last_commit_hash": null, "data_hash": null, - "validators_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", - "next_validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "consensus_hash": "C4DFBC98F77BE756D7EB3B475471189E82F7760DD111754AA2A25CF548AE6EF8", + "validators_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "C8F8530F1A2E69409F2E0B4F86BB568695BC9790BA77EAC1505600D5506E22DA", + "consensus_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "app_hash": "", "last_results_hash": null, "evidence_hash": null, - "proposer_address": "81D85BE9567F7069A4760C663062E66660DADF34" + "proposer_address": "730D3D6B2E9F4F0F23879458F2D02E0004F0F241" }, "commit": { - "height": "4", + "height": "3", "round": 1, "block_id": { - "hash": "82829B64AF204EDD51AD6F464AE51741916F6305C61770E5595A975419154493", + "hash": "BC5279D293D4E124F9A96829E99CA6A6E42752FA2718A5BD2FD3970C69695A71", "part_set_header": { "total": 1, - "hash": "82829B64AF204EDD51AD6F464AE51741916F6305C61770E5595A975419154493" + "hash": "BC5279D293D4E124F9A96829E99CA6A6E42752FA2718A5BD2FD3970C69695A71" } }, - "signatures": [ - { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null - }, - { - "block_id_flag": 1, - "validator_address": null, - "timestamp": null, - "signature": null - } - ] + "signatures": [] } }, "validator_set": { + "validators": [] + }, + "next_validator_set": { "validators": [ { - "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" }, "voting_power": "50", "proposer_priority": null - }, + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [], + "next_validators": [ { - "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" - }, - "voting_power": "50", + "id": "n4", + "voting_power": 50, "proposer_priority": null } - ] + ], + "chain_id": null, + "height": 3, + "time": 1401, + "proposer": null }, - "next_validator_set": { - "validators": [] + "commit": { + "header": { + "validators": [], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 1401, + "proposer": null + }, + "votes": [], + "round": null }, - "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + "validators": [], + "next_validators": [ + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null }, - "now": "1970-01-01T00:23:21Z", + "now": "1970-01-01T00:23:20Z", "verdict": "INVALID" } ] diff --git a/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestValsetDifferentAllSteps.json b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestValsetDifferentAllSteps.json new file mode 100644 index 000000000..e97bb1f57 --- /dev/null +++ b/light-client/tests/support/model_based/single_step/_MC4_4_faulty_TestValsetDifferentAllSteps.json @@ -0,0 +1,870 @@ +{ + "description": "MC4_4_faulty_TestValsetDifferentAllSteps.json", + "initial": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "1", + "time": "1970-01-01T00:00:01Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "next_validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "consensus_hash": "5A69ACB73672274A2C020C7FAE539B2086D30F3B7E5B168A8031A21931FCA07D", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "1", + "round": 1, + "block_id": { + "hash": "42C62AB26BDCD052FD7D87449C1CA700A79780D55E2FC8129614D4D2DC24CB08", + "part_set_header": { + "total": 1, + "hash": "42C62AB26BDCD052FD7D87449C1CA700A79780D55E2FC8129614D4D2DC24CB08" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "mzNheVmshOSGCNfL/NfBBpJcofUx6cqclvEMOc9rZJ6A2pOrxO8ZymXej0FvksZ5mmhfLvZ0aW+as59WMldWBw==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "KisuL/gVSTDQP1Q51uBKd8xDZM4mX+rRKIpMlkfUYF+qW4K51sPvqL/pgKSiUwBPAoGRBzwLoavPg9oiyRwPBA==" + }, + { + "block_id_flag": 2, + "validator_address": "81D85BE9567F7069A4760C663062E66660DADF34", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "fgq+19zjPxTp8HILDBaW8VJg+wzyVkthtmf0HJxdoaXd+uZRQ7LDS2Tn7LXMKAQ9Q0sjtZ4BA3H3sfv9wA56BA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:01Z", + "signature": "Zy0rovAtLk58hTcprpXU7ikCdbky5rrQ8Y3o+/Xyo7VTt3zYiCdVsYj26agu8SR3cFkV96P2ryHF6NHWGwIJDw==" + } + ] + } + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "trusting_period": "1400000000000", + "now": "2020-11-06T10:17:44.160465786Z" + }, + "input": [ + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "4", + "time": "1970-01-01T00:00:04Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "next_validators_hash": "F49C3E794533450FEA327755F5962F99C88F5545453E6D517BBDD96EA066B50C", + "consensus_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF" + }, + "commit": { + "height": "4", + "round": 1, + "block_id": { + "hash": "734FC4AE3FEEAD34654D611A867E3A4F2F921DD2B8F27289EFC52C90EFC2B8D8", + "part_set_header": { + "total": 1, + "hash": "734FC4AE3FEEAD34654D611A867E3A4F2F921DD2B8F27289EFC52C90EFC2B8D8" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:04Z", + "signature": "x7RNTkbf71fnTEyl7G6i8U5gi33nWZLha1nbZJjsIsbm7CCxcfsgU4uTWaHrZXCo1Ywok9zXgt0gaGOt7uR+BA==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "81D85BE9567F7069A4760C663062E66660DADF34", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Lk4zm2cJO4FpzXFF9WUV9NzOLfr5jV+ps7EhwUDKlZM=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 4, + "time": 4, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n2", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:00:05Z", + "verdict": "NOT_ENOUGH_TRUST" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "2", + "time": "1970-01-01T00:00:02Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "next_validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "consensus_hash": "010ED897B4B347175BC54ADF87D640393862FF3D5038302CD523B0E97FC20079", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "2", + "round": 1, + "block_id": { + "hash": "7AE45D7D5138D033A1418B1E52089D269366DE81648C86AB30383171324756D4", + "part_set_header": { + "total": 1, + "hash": "7AE45D7D5138D033A1418B1E52089D269366DE81648C86AB30383171324756D4" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "dRLElSmdRVs+a4QRtbu7QrnGUYonhBwmFQwoe+V+sSEUd7NuQagAUW9VMGBC9hV68pKjS2Q14iVpjjhviYLsCQ==" + }, + { + "block_id_flag": 2, + "validator_address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "v5Bhll4EhHnakcTDmW2BLsbAosAG9Z8d+8NzAg+V4TfBc3/4j98zKsLFPnvbJgzndrd1PRx5ra0eojv1iljFDA==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:02Z", + "signature": "oyLBY0COShPJ8c29yr8SmhnQe/6hNEDPfY1geAyJnu+2tRcJ8u2QExlA/GePPLDEDcF+uQ6WeE2oXh3WXFS6CQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "6AE5C701F508EB5B63343858E068C5843F28105F", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "GQEC/HB4sDBAVhHtUzyv4yct9ZGnudaP209QQBSTfSQ=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 2, + "time": 2, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n1", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "SUCCESS" + }, + { + "block": { + "signed_header": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "test-chain", + "height": "3", + "time": "1970-01-01T00:00:03Z", + "last_block_id": null, + "last_commit_hash": null, + "data_hash": null, + "validators_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "next_validators_hash": "C8CFFADA9808F685C4111693E1ADFDDBBEE9B9493493BEF805419F143C5B0D0A", + "consensus_hash": "A4AC4A82A6DA63B5F3F3862C625F5D14B5FD0BEE6E34DCA44E91EBBA4BA44365", + "app_hash": "", + "last_results_hash": null, + "evidence_hash": null, + "proposer_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A" + }, + "commit": { + "height": "3", + "round": 1, + "block_id": { + "hash": "BBAC11CD0BAE2607F20A67856560FA06119AF6C3FB6C6A440323AEC3ECFBA16B", + "part_set_header": { + "total": 1, + "hash": "BBAC11CD0BAE2607F20A67856560FA06119AF6C3FB6C6A440323AEC3ECFBA16B" + } + }, + "signatures": [ + { + "block_id_flag": 2, + "validator_address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "5APGqvXb9AGsf+6Y7k2/pEF2j58CEqamrk6+y9jQ/ahB1ZZZ1RMZgOKJpsYfQQUjw2HlacM2PsgUl1lB6D2YCw==" + }, + { + "block_id_flag": 2, + "validator_address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "timestamp": "1970-01-01T00:00:03Z", + "signature": "sKkWVeVpv0KCgGnUdrL1jqvlCVo3qjOgRJxnUz54MsV7QYlsYEILL4rXENyC4R+XiYBoy2IO0tv1abKBsLUCAQ==" + } + ] + } + }, + "validator_set": { + "validators": [ + { + "address": "0616A636E7D0579A632EC37ED3C3F2B7E8522A0A", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kwd8trZ8t5ASwgUbBEAnDq49nRRrrKvt2onhS4JSfQM=" + }, + "voting_power": "50", + "proposer_priority": null + }, + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "next_validator_set": { + "validators": [ + { + "address": "C479DB6F37AB9757035CFBE10B687E27668EE7DF", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wf60CidQcsIO7TksXzEZsJefMUFF73k6nP1YeEo9to=" + }, + "voting_power": "50", + "proposer_priority": null + } + ] + }, + "provider": "BADFADAD0BEFEEDC0C0ADEADBEEFC0FFEEFACADE" + }, + "testgen_block": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "commit": { + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "votes": [ + { + "validator": { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + }, + { + "validator": { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + }, + "index": null, + "header": { + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "chain_id": null, + "height": 3, + "time": 3, + "proposer": null + }, + "prevote": null, + "height": null, + "time": null, + "round": null, + "is_nil": null + } + ], + "round": null + }, + "validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + }, + { + "id": "n4", + "voting_power": 50, + "proposer_priority": null + } + ], + "next_validators": [ + { + "id": "n3", + "voting_power": 50, + "proposer_priority": null + } + ], + "provider": null + }, + "now": "1970-01-01T00:23:18Z", + "verdict": "SUCCESS" + } + ] +} \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/commit/_less_than_one_third_nil_votes.json b/light-client/tests/support/single_step/sequential/commit/_less_than_one_third_nil_votes.json deleted file mode 100644 index ff9c91963..000000000 --- a/light-client/tests/support/single_step/sequential/commit/_less_than_one_third_nil_votes.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "description": "Case: one lite block, less than one-third Nil votes, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": 1, - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": 1, - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "last_commit_hash": "D5439DD65D45EF1E51412691BCF2F6741D48AC1325572E08D48BD72F80669E70", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "part_set_header": { - "total": 1, - "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" - } - }, - "signatures": [ - { - "block_id_flag": 3, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "SMBYJYr7yHbqmScg7jUhSGyis/gOMvwkO4mlEmKt9NKJ+aZgETFgIIFnExCju0VidMyy9mUwMQ/b+EoVL1NwAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Bn8cV8WlqGjezZcFgQey0ikBshIHw56jpuzWssO2/0HOpMC1Mr2mJ5mxEd4mpsQ4PwenpGtrLJv11PFK6aJLBw==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "mhgrDo+fV5GaS34CZn//zgNx24H21Ila9io5HPgxeEWbG24eGLp0GAAlGPryT9bdv5LXPUq8wZpUHxAcyhvZAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "+g5Rhm8Utshm0SN2gxKeRrqsJyUO32BxDqTVu0wHzaJz0cFJWZxA2JaYxaf6EzuQULkwp+oh6u3xboy/e5wHAg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/commit/_more_than_two_third_vals_sign.json b/light-client/tests/support/single_step/sequential/commit/_more_than_two_third_vals_sign.json deleted file mode 100644 index 646bc2ad2..000000000 --- a/light-client/tests/support/single_step/sequential/commit/_more_than_two_third_vals_sign.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "description": "Case: one lite block, more than two-third vals did sign, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": 1, - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": 1, - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "last_commit_hash": "D5439DD65D45EF1E51412691BCF2F6741D48AC1325572E08D48BD72F80669E70", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "part_set_header": { - "total": 1, - "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" - } - }, - "signatures": [ - { - "block_id_flag": 1, - "validator_address": "", - "timestamp": "0001-01-01T00:00:00Z", - "signature": null - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Bn8cV8WlqGjezZcFgQey0ikBshIHw56jpuzWssO2/0HOpMC1Mr2mJ5mxEd4mpsQ4PwenpGtrLJv11PFK6aJLBw==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "mhgrDo+fV5GaS34CZn//zgNx24H21Ila9io5HPgxeEWbG24eGLp0GAAlGPryT9bdv5LXPUq8wZpUHxAcyhvZAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "+g5Rhm8Utshm0SN2gxKeRrqsJyUO32BxDqTVu0wHzaJz0cFJWZxA2JaYxaf6EzuQULkwp+oh6u3xboy/e5wHAg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/commit/one_third_vals_dont_sign.json b/light-client/tests/support/single_step/sequential/commit/one_third_vals_dont_sign.json deleted file mode 100644 index 452ca78f6..000000000 --- a/light-client/tests/support/single_step/sequential/commit/one_third_vals_dont_sign.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "description": "Case: one lite block, one-third vals don't sign, expects error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": 1, - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "uGmIBqgS9cd3L8tdDNoECnp7dWB/9E5LVd67WCv2zjcihyRkQC9N7qv6HRYK4uVIx4A2TydKiPGR2iayGyADCg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gq9gLG1jOoYdTVGuvfRy0DFPEjARYDmQwWFDK3gIRSb/+hFLs773ULIbyw93n6M/tQdmWEvDZ2OI9LJ5hamCCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kF/JeXJ5hZajccjS0E36b7U9kcWu2dywnxeY74gO8Beu4+lbL/HIgXjv01RKIsJQoTl0LQF54ekf7ftU4fQXCQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": 1, - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "last_commit_hash": "CE50B907C13B48572BD2EFA1FED9A9341B7F680F3EC3F562ED0A8E745D6F528E", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "BF9535C5A5FEFB00719BAB70B177C0D4EA3E18E433E91E396EC61ADE2CE12161", - "part_set_header": { - "total": 1, - "hash": "1DC8F8E942E7FDFB42A83B3E308FCBD6CC7602F60FB7812DC91F91A6AFAE295A" - } - }, - "signatures": [ - { - "block_id_flag": 1, - "validator_address": "", - "timestamp": "0001-01-01T00:00:00Z", - "signature": null - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "/GXkLUU2aEa+IeABeMoGhhST/uti+rKnrilT6po9kF97akemXC7wq0ofBtmWeBN7j522RXfbXOERfT7uGi1ACw==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "1mI/ExzUdr0Ov5Fz8IJdPhrGs5BDbSK9E22GcAxyUtvxW53Z/vqpC40aaHC6CBJXLYk1k8bFGVDdPMnk/l/fCA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/commit/wrong_commit_height.json b/light-client/tests/support/single_step/sequential/commit/wrong_commit_height.json deleted file mode 100644 index a746276c5..000000000 --- a/light-client/tests/support/single_step/sequential/commit/wrong_commit_height.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, wrong commit height, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nzE+gG7QoY0pl3PTTtaUqgyLpSxK5yihZmhUXNndHsnWaaaLF2mFcDhVr2IWxce8UG6toYERbNAdFEK8f06ZDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/commit/wrong_header_hash.json b/light-client/tests/support/single_step/sequential/commit/wrong_header_hash.json deleted file mode 100644 index c58f33c9f..000000000 --- a/light-client/tests/support/single_step/sequential/commit/wrong_header_hash.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, wrong header hash, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "2D2D2D2D5468697320697320612033322D6279746520737472696E672D2D2D2D", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nzE+gG7QoY0pl3PTTtaUqgyLpSxK5yihZmhUXNndHsnWaaaLF2mFcDhVr2IWxce8UG6toYERbNAdFEK8f06ZDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/commit/wrong_vote_signature.json b/light-client/tests/support/single_step/sequential/commit/wrong_vote_signature.json deleted file mode 100644 index 4fbc32905..000000000 --- a/light-client/tests/support/single_step/sequential/commit/wrong_vote_signature.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, wrong signature in vote, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "zoEJsI6NvB7FnlCHrAXvLNsuPO8JQZfs3SxI/b9fFEOvAoVKA1QUPI4BAEuBlALOtDHfLym9leb3EDDkJ1uaBg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/header/non_monotonic_bft_time.json b/light-client/tests/support/single_step/sequential/header/non_monotonic_bft_time.json deleted file mode 100644 index 4509094e8..000000000 --- a/light-client/tests/support/single_step/sequential/header/non_monotonic_bft_time.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: consecutive lite blocks with non-monotonic bft time, expects error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:03:50Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "8EC5D4DE70C7D42445EF3F26801DEE463060E7D2611FD5A492B9BA8F832A1FF2", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "bmsFCWola6pIHWSn2tbr2p68QQQPfqyRXQwBxl1pw6ULZzfb2RAuhSXJMKBwhEhLkbfA4S0lSIfZGMusSTKuCg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/header/non_monotonic_header_height.json b/light-client/tests/support/single_step/sequential/header/non_monotonic_header_height.json deleted file mode 100644 index 25bfc7474..000000000 --- a/light-client/tests/support/single_step/sequential/header/non_monotonic_header_height.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, non-monotonic height in header, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "2CA3CD7E4DB5CFB8EB2ED8772A89F833624A302210B87DE852B31C258FB0AE19", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "WhDBbaVrhXcOe2PsLvSWArkbOfbv3G5qTm6whU28shNsOugNfxupMV+qDfLoxGl/UWCdxNq0pfY3a4iCFY6BCQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_chain_id.json b/light-client/tests/support/single_step/sequential/header/wrong_chain_id.json deleted file mode 100644 index ff6995a09..000000000 --- a/light-client/tests/support/single_step/sequential/header/wrong_chain_id.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, wrong chain ID in header, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "wrong-chain-id", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nzE+gG7QoY0pl3PTTtaUqgyLpSxK5yihZmhUXNndHsnWaaaLF2mFcDhVr2IWxce8UG6toYERbNAdFEK8f06ZDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_header_timestamp.json b/light-client/tests/support/single_step/sequential/header/wrong_header_timestamp.json deleted file mode 100644 index 86412d900..000000000 --- a/light-client/tests/support/single_step/sequential/header/wrong_header_timestamp.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, wrong timestamp in header, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:05:15Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nzE+gG7QoY0pl3PTTtaUqgyLpSxK5yihZmhUXNndHsnWaaaLF2mFcDhVr2IWxce8UG6toYERbNAdFEK8f06ZDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_last_block_id.json b/light-client/tests/support/single_step/sequential/header/wrong_last_block_id.json deleted file mode 100644 index 325ef7c21..000000000 --- a/light-client/tests/support/single_step/sequential/header/wrong_last_block_id.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, wrong last block ID in header, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "77726F6E672068617368", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nzE+gG7QoY0pl3PTTtaUqgyLpSxK5yihZmhUXNndHsnWaaaLF2mFcDhVr2IWxce8UG6toYERbNAdFEK8f06ZDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_last_commit_hash.json b/light-client/tests/support/single_step/sequential/header/wrong_last_commit_hash.json deleted file mode 100644 index 0f1943140..000000000 --- a/light-client/tests/support/single_step/sequential/header/wrong_last_commit_hash.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, wrong last commit hash in header, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "77726F6E672068617368", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nzE+gG7QoY0pl3PTTtaUqgyLpSxK5yihZmhUXNndHsnWaaaLF2mFcDhVr2IWxce8UG6toYERbNAdFEK8f06ZDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_next_valset_hash.json b/light-client/tests/support/single_step/sequential/header/wrong_next_valset_hash.json deleted file mode 100644 index ae9d3fc82..000000000 --- a/light-client/tests/support/single_step/sequential/header/wrong_next_valset_hash.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, wrong next val set hash in header, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "77726F6E67206E6578742076616C696461746F72207365742068617368", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nzE+gG7QoY0pl3PTTtaUqgyLpSxK5yihZmhUXNndHsnWaaaLF2mFcDhVr2IWxce8UG6toYERbNAdFEK8f06ZDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/header/wrong_valset_hash.json b/light-client/tests/support/single_step/sequential/header/wrong_valset_hash.json deleted file mode 100644 index 5621044cb..000000000 --- a/light-client/tests/support/single_step/sequential/header/wrong_valset_hash.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block, wrong val set hash in header, with error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "77726F6E672076616C696461746F72207365742068617368", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nzE+gG7QoY0pl3PTTtaUqgyLpSxK5yihZmhUXNndHsnWaaaLF2mFcDhVr2IWxce8UG6toYERbNAdFEK8f06ZDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/validator_set/_128_validators.json b/light-client/tests/support/single_step/sequential/validator_set/_128_validators.json deleted file mode 100644 index eef6e046f..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_128_validators.json +++ /dev/null @@ -1,5123 +0,0 @@ -{ - "description": "Case: one lite block, 128 validators, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "F41F9750B962158C36B8DD50F70D92347880D402A939A96F06F03DD3D5312C54", - "next_validators_hash": "F41F9750B962158C36B8DD50F70D92347880D402A939A96F06F03DD3D5312C54", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "482F85D79E5F24D05AF202841D4C2B9F52187169C6F3114F233EC9A4B9910460", - "part_set_header": { - "total": "1", - "hash": "FDA4F6D8EA316671EC4216B54F3468B848D9B79FCD7EAF6E588B1944FEA9FC8A" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GYzDoKxFEus+b1gySYuCWrXA8XzoNf1GJ8Wtcqg9TB3ASs0ODNDA0TPpw/uKL59+8uhJCGDdunyAmbzokoi6Bw==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "h0ZlsjYARHQi1rHIZXLtuZJjvDp5XbPXXve1Pv22uYQIV+NgB4h2o/Og0vTFPXuBmxYU5qY3ebrIqxLouReQDg==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "b1lJ/AfTvCMHuh/QzAffhEZZMOUbCS9DssJpyCKkOzQeEPHERA5fCEZQi7l0CxPh7+hW7Bf3LCsX74bUB5DgBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "qIYtXtRIqF15o4t6Nd4S4XSGdMtxpxujiem/Jt3sOoobZfW8a8BKyBSwGS1yko+cQz3XrxBELxiU+ti9I0KeAA==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "D1HQkfEbKQJdfrXt53hbg8MI1zJo+86h4kEkWPwlAGaJnfVL3d9Z6ooMp9hbakvUH6sPPjD8MkpRUVhF2GRdDw==" - }, - { - "block_id_flag": 2, - "validator_address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "dfWExV7s02xDlujwQAjUtCJiWkjv/OVQ71bdKhWesdkLQO7Q4w4N9S66EKHHAgD01M51JpCPWcH/pbaSkE6lDg==" - }, - { - "block_id_flag": 2, - "validator_address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "9wUQIk/xoeY9Oi/Nktku5mWXHifmNe7lfKAAGNBohhTYdnVBZQjwcsDTj1hS4MwBtY+RZDM0NgWeJEwN+n0RAw==" - }, - { - "block_id_flag": 2, - "validator_address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "z5tYwY0DmbtotYXuCgsk7W4Csmxk7sd1D+m2tenRYHUdNRxHT+1PQJW1WT2dYldLbZON1qMk4Oplhsg8dB82DA==" - }, - { - "block_id_flag": 2, - "validator_address": "0859D2467F0DA63744B220E6E270DD3F0EEAC10E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "SZqF09N+c+NzBTHqtE7tLIG/KA5CMCrNeCML7O3M7rxUbuK/jL9H3dLcBJzTartcpgCHPOxpXFoGMahAi9ycBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "0D7350841ACB4A53C7717C7E5776A5E0DB6D596E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "XW7J9PW38Wm+HoZ21yBSpt0I3uzBT9yarLy94TuoukVjv3xSpuaXPfWO5Ox6ZWVAz1tovXQ8rE6o0doYNOF8BQ==" - }, - { - "block_id_flag": 2, - "validator_address": "0EC358ED84E4F9088BB57617024D49E834322B54", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "6572ylSQTwanBHQPaFwW0pqo00NHVnaHTX+l1BWGMja5vOTZTgvC1bI7XDVR6irmUDrwF/k/tEw7FTETk0vCBA==" - }, - { - "block_id_flag": 2, - "validator_address": "0F7E62DD0AB86CB03DA87EB9969B558AFE04CC6B", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "WDyuEWq5dGflM2fA+VRWsyCsFYanpKZmkAVOA8QI/9hU6F2dl81kct4HObRKtbUL3fRkG6duAxL9bLADgF8uDw==" - }, - { - "block_id_flag": 2, - "validator_address": "104776A7532559122F43A5763A13FA7E747AA44C", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "Au++/5ilGvXJ0Smecmjrd5HyrRMoyZrRE5uq9mdt4nbmMlV4GZ5YjDTrm6YjODmiouo32pljcqNMMb5gGGH3AQ==" - }, - { - "block_id_flag": 2, - "validator_address": "16E8EE7E867E20343ED67A83386B798BBC8CB7EA", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "6UocoQqsRC7giK4QtIxPMW7sBcBGYpsiBxxtI0OP/am7n2X8K1gbmP3IqRpS+N6lKitie3kF9eAJvtTYerfRDw==" - }, - { - "block_id_flag": 2, - "validator_address": "17017FDB07BD7604A356325D499FF1CD9965CD00", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kGui+5GepdSJmQZtubKDHAdEBNG5AJh7oxt9nryZTL6uQ8xNWAyv+G+R5Mn0lDdJFsn52q8E70IAJNFtYUKgAA==" - }, - { - "block_id_flag": 2, - "validator_address": "19FF9F7C347FCC6100DABC66AE8D3E2294A145BA", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "QwoYu+HI+GMRrcqxzBGmTK+sYLztduN+qjrh194UdomYqvmriZJJ/Jc/SQBOKO1tFnBcmud2dBfInYrrTdQnDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "1B6D50537048EE35C2F43BCF284B59CFCFAA2F91", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "sYL/9fkRK5FwxxUPSfdJs2oATbHgbzJRDBtuVMfyePMgx9MLOTTGvwFj2JgrRK9j7J25ovAM8t9waeW1UfBOBA==" - }, - { - "block_id_flag": 2, - "validator_address": "1DC38F15CC04F552E1677D405EDCB2AF8610A20E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "9WAsXch88lmDsXKeiV5cBJOr495vc0XXdop/kuQieypiO7N4xN++14QS3nhcKQuoNIIG7sXDQsTUhZw0IR4hAw==" - }, - { - "block_id_flag": 2, - "validator_address": "2022C00AE81BE3A15F9C64DAD16071AC4C78DD05", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "tQ4ZQ6NfqXnIWkSbTrB4JUnvyN5Q6Vvl90LqwaEsjAQnmwjkVz4tneJ8lOU0NWlguye9Cn1pPuMXPByzJa4cCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "22A34A49E778B1F2324C501831F1B41D5CE2FD43", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "u93bTCDjrvbqmHfEud/LR3yFezm5rWXdkgL6NoResIPCXDNVKaYY2GoxVSgU4kbNPvT2iJpG1GTRFsfXqF5ZAg==" - }, - { - "block_id_flag": 2, - "validator_address": "276DE96119FBBE4538214B94C62BDD2647B1E2E5", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "qNx/0FguBl9fbBAOHoS7WEyqdanB0T4o3k380wnly2Wsp5Dz8gxz9dUuZ6WIZFrTEgq6oVCKDQwtEZzgYaA6Bw==" - }, - { - "block_id_flag": 2, - "validator_address": "2BC8D138F5DF6CAB4EB88B96DA66D9FA18EF543D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "PmzH0/sT/5M8I2h9kF1QTNw6/Fsjj+HcpCHXjwx5RTn6G6rclxsj1QkTe1nUmRn/zL3DSjy5Q/Oi16FSWZclDw==" - }, - { - "block_id_flag": 2, - "validator_address": "2BED56C755A702194CEFCEDDE096FF4F93C3652B", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "tdHBXouRAz4uzf1fSypsO+LeNAhsNHXHn1Us9ZxFmrRltQd00D0M8ITGR/ygvaVasXBa87SY4r3xpfrwqBBfCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "2C5901D7C2308886511BE96C7D60426032B4FD26", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "0g0VLp3DkD6V9h/waXvQ0vw1kPy6wz00IUt2nMWvUVo7s8FfonvOmrgwPbOvICtuxNtBXcU/qcRd8A41E4DMBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "305ACD56F23E26BDE200C06825B4B0C90D6EF09E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "iJY5F5MJUYQp2pz2RvDTbtwWyjNeN62CbGVZVVEZRXs4HnVgpHqVQ9ddZo+mBm90FDl83OOp9LSfWuGzOOI+Cw==" - }, - { - "block_id_flag": 2, - "validator_address": "31B6C523836521A9896D96BA1B3D99571249CCC2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "0+woCYA/NJouADb2A5CZ0heh+J5egQHE0U0g7cUu5VuNZZkgX/0b1rGKQjcwangH18JaXgB4zvuZYBiMBX22DQ==" - }, - { - "block_id_flag": 2, - "validator_address": "34167E39185F8B5E144BC73E9A54A65C58B5806B", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "fLWS7IrpNC8Lm4solT6Nf7FzcmBVY/0L4HXNd/661bhMoDlGYSgmk9tQSjif4t5IaLhgi+JWjG0+6C9fmPUMCw==" - }, - { - "block_id_flag": 2, - "validator_address": "36F2C307B74BFA57300F1C7F8CC24180F86F2DB3", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "XwZw/hwONtFpPEpyDyQTGpPchVueVFkIT57lzVrQ18rVkXFGJ790/GIqbsRkKdYOw/l0dk11pMaawq9Wrfg4Dg==" - }, - { - "block_id_flag": 2, - "validator_address": "3790F095C2C35C28804F243DF9F1D9702527987A", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "rwdQgjZfcVd5Nbfub68wl+xxxXxFFItvavxbfJQUQX9uNrcNB4+bQyt2GA4uYErpN6FbIy0KPfAjUIvFci5OBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "3AF9DFDB695038C1CDC08E6532D7259ED3CE6136", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "HN6bxwScR8/YHnWFw0UWC7hWddFUS5/M7cBgTb8WK2/xBbr6t3qb01L6HZHfm8nqatYGqOIuqXn5TG8oFTMiBA==" - }, - { - "block_id_flag": 2, - "validator_address": "3BBA3A4BCF6BD50DF93399D28CCD2C77EAF04DD6", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "0uK/8UVu5VQ64gU5EhLe+EW2vHl/iCuVWVF16fR1R3JnrE04FeeoAqIp8GDHsi/pCDw50HRKt3V6uJzNeiE9DA==" - }, - { - "block_id_flag": 2, - "validator_address": "3DEA89BC6049093CCBB86AB1A26A7A89FDC0F170", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "3MIRMuM3OT4SIuyaLoBU/nZ50O4MrSaIKrNWQwxIhTj76pFT+2K0bzydOxd6qpwzvROyr9VfvxfJ+rc/6mqlBg==" - }, - { - "block_id_flag": 2, - "validator_address": "4099E6362C41FD472955FF42D640ADC8382143BD", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "moQr32d9owR6yc3Tbob8xGPEyOifa6+28HJfIn8/fmnIoCI/Z91YOqZG1mtCCeHLmNacoEviDjB6/PaSyk8rAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "409BA2271966FD00E50CF30D68F02656C1BBEEEE", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "x8z1EHlkNgNxCQi4kYXpeGiwVUKflEfPq4TO7ZyWkotsPQWyCPtgni61qxIS80w9+i7vZPTSnYDfeuIfgEQiAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "411EF3D45200CD9F4AAEB41569C30095BE5B8352", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ePt9eJUGlMzpqcrmhearPSekWkLGOq+Q03F8J6my44MJlESTknpEDZ0hb/M3SIjbpTe+lMPtk9su747EPUd6Dg==" - }, - { - "block_id_flag": 2, - "validator_address": "44CC86D5E237AC35EFAAD48B737F4CC56CDF9DE4", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "N+qRK/KcO0fDKKu9CPM8pLz5nqRZD3Ed3Kv7TJtFNHF3hL/siKWWKGsvKlzqds9tmeLjiv/CivWh3ZC4Cvl6CA==" - }, - { - "block_id_flag": 2, - "validator_address": "44D5B54C74D990CDFFBED82788E0DD3DA5DF91CB", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "vnxDRCUSTm0xemYIBVrEZxRchtpnwL8nqrQmAVxwRkyfXdWwHRocbWajG5WGoJZrRyGNoXimVhqTjoRU5FMFCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "44F6313731281FA393DC0BC3CED0F141974E6E80", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "Dq3jQyajww+fBoJi9R8RNPMvn8yZylAf8Zxhjn6q5HIc6K4WQgXo16RKHtINOkGQ//0Al8b9MeAw5a+Tq6xPCA==" - }, - { - "block_id_flag": 2, - "validator_address": "46D87DE55A2AD46C8BF375467C857D88F23E9B27", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "bV9xmDQw7CTocArJtXGCRGxsRP9kdFOQ1nkgeiGeyuCxARDkC12WW1X14LSUGqr/IyLVmjBSAHHs/wjfBVsoDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "483B3ADB1C595B2C292FEE8C65C9F6EED884CA00", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xySJ3hoLlTCml3BOLuggYRFSfT/hFrdwrrhm8FxRA2pFAieGM2jvpLz9+rNKbgaBuK3SMNBNRg3XvgNlfbl5BQ==" - }, - { - "block_id_flag": 2, - "validator_address": "4B66EE9E8B13C4494CFCB6D0F6A19F1B417E172E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "m0HV2gPNBvSkfoA+n7LhHjnQZkS3PmpGzGbPWDqFnGFezqggljEbAPDf2EEc+n+Hjpm4BCcxiP9StK56hYMLBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "4B924BD542EF7E25F33D1DA71CC9611CE640E4E3", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "/xVoLggQfzI0YxOsjKpsdijd6v0Iz3kljQYgUuyg2g2uTIPU7AxCAteMu+Gjk5BWicybep3ccRQHvUrBGushCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "50C24570B899B11034B1A8F51CAA91D479C555C6", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "qYqZDJkd2yPdyx+whHZrGFTme6YbBFiAfuF5L0iEMHDdCvbU+NcwC3a00wPDdvCN5c1lIauOMydRLY+y5urdCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "53BF6EA4BB98D5CCB8081DDC2B6D80E790ED6091", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "W0ekxsDFAJrHKwpPzcAD/PmTZdSAsoDq5/wsO98FQiuTZ+ojimhUggMYGAnlIHqzzAPJqSDbhZD7RZholL9pBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "549523D99B417B356A37882EA5BE22444BCACE49", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "Iv1vm5I2RsPNyt+MQ5Fz9P6weJ0ZoOUMwNTr9Ovg/optODWZnMhtfLXJWCNx/1Ob3VYHUhKSRv2wBWjDvyIFCg==" - }, - { - "block_id_flag": 2, - "validator_address": "55B6E0B429C582D102A8C5E9D211FA07D2AA3DCB", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "3Wu08reIbA8jVdNmOvAO1QuU4b00cB00mSLL1UigLHHa1BQhuAQRDrfyPdEG0o/81Gz23qAWm7lRsOx8xYpHCA==" - }, - { - "block_id_flag": 2, - "validator_address": "56BA4B6BE15A47356AC20339BE1FDEDA2994E34E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "YSm+HHTt5TnR1SnGA57GDssI7kApIn04jywdOqr+wI5fb/xri0N4lHPNX/9Zo/FFQqF+Wvf3kzss7HztOKmYDg==" - }, - { - "block_id_flag": 2, - "validator_address": "58086A4142ECDD35E8FE1753A6256B98D9661F0A", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "leWRoRDc6Q3Oyjd9EyzCcY3fqf7NZzuztXBvgmqAjhSSCNo6OxXrBBweTI2v4PmSP60aDnJLjd5TM+WiBELOBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "5E561B91BCF07518E0FD2E510C233D455B306856", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "R2c6WPb615HiLKahSSRSbzlAvnpj2IpWsxTuSL1+Wfhzb+O7Q+AKJqXNvjuVhYvsP10YqJWCbvw54Z6hbqUFCg==" - }, - { - "block_id_flag": 2, - "validator_address": "5EFB8BD4E6B0A67DE3E9C64E728B8C10614DFFC2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "bC3dEFBAMrhpqLeiPiSa29llHBlASmTGdS3YhX5MIiDAXvKOxm+q6TLo+eNNVtIhcK6wRbp8d79GqcnSoNGKBw==" - }, - { - "block_id_flag": 2, - "validator_address": "5F19CEF4820053AA8787D93C86B7CB39D7ABE40D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mpp4DoNFjCsZy/v3uHYBit+WUnQq2PrdDAKZcA2rst8q5qNJQOoOusbIDfPiFsryQZGFUOibKKOGp3O0b13mAw==" - }, - { - "block_id_flag": 2, - "validator_address": "5F8C09291BC721346A7571FAA7936C33D2DBA44F", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ONtizh+uKPpcKWIR20p6qMyRtL+PC6+fLmj1EjfS1LHtP4Z9+IhZT8bxCTSQ5ZHc6s5IQnMYsPwFWKbHKh9kBg==" - }, - { - "block_id_flag": 2, - "validator_address": "631F83C22D4F46F72D732665F61630B408F216F2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ILbOoL93SYcWBupBBEv0Lkn/p9hErvLR5QzUCjGDbTxL+bWRhonwYqMi9w6+4Zz4l8l0MG6ksHukY77r8YrgDg==" - }, - { - "block_id_flag": 2, - "validator_address": "63D15DA922FD4DD88FDE33D9B6C80675D0BDEEF5", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "EBXz0rgGEVx+hvFv0gVZuPExuq1ECkWNx5pDfwXgb1oQsY3gj29aV1iIXxrqC2whJJMbWsHb0ltvAgV9WzFRBA==" - }, - { - "block_id_flag": 2, - "validator_address": "6548BDD3B9F3B8C243F3AC094C2C58332E7D32DC", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "01YHFqHE36prnfkcB7YeVB/Gzo1yaNpBf4D9LDC7DoCR0ogMLgnny05FH3twt3d8w22fDsUnQowsuiI1RzeIBg==" - }, - { - "block_id_flag": 2, - "validator_address": "66CECDE4581CDA058A1D708D183E606B43274946", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "Se66cxN/KIAOwzfVPuf+Ldq/Dyo+aAYcaPDU7enniUiB5HSrRdvFK0B+lBEFPEwp+4GywETpin/IWxntRR/oAA==" - }, - { - "block_id_flag": 2, - "validator_address": "6BA54EAE4890CB52A69F3F520524C5602442A857", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "jJU8R9reZgqOHILxL+oaxbgmuLsxD7ku7qLljfXWi5+KJQ/BKjRtsdZGCENUJ4pgsXyAoMU7PXIsA1JRORD1BQ==" - }, - { - "block_id_flag": 2, - "validator_address": "71129EE0478B5EE8366C6D9E9465C494CA1063B9", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "sJSBa1XBD/vudjv5z51KUYzjNcdt8GOmhPUqQdbBdFG+fTzG2AZ8lTyvpPzu59EDi6YM++b+h3I2njDr5QK5Cg==" - }, - { - "block_id_flag": 2, - "validator_address": "71B73AC10644A4E0172BBA6EEFFFADE9729BA17A", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "9UyMCxquO+oQTqMgRAO0Y7V6R+cFdRE1M0/sCZZ4X+U+y254rB2HdqhygJ3w+KwZzO9rI7xKEXZMJTBk8obNCg==" - }, - { - "block_id_flag": 2, - "validator_address": "75726122C13922D71DBDBBC4ADB57AC147832914", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "CwlCOaqpfIsHIjCOq8L9nmGXpm6H/hvndbrmd+eso0l7sSewbaAeMNsoDmeGVXoYNuctOwxNW2DO1Nq8BJevCA==" - }, - { - "block_id_flag": 2, - "validator_address": "75A48BE1310775AFC556D46EA2234EBA3BF388E5", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "DITSmLT/iUKNX2/NjxvlLu8hSLKEzd+7JyRXUcgcmAPUd350ZEK93EZVYF7W6DXBEd6DfBHmOIkxP4k1CAppBA==" - }, - { - "block_id_flag": 2, - "validator_address": "762408A51C56E050E55B4189D8D76709343F14DE", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "DlH6BQMkj4p6u0ukUmoqVDeAcnGThG9wyWZ0DfppS5CBcr/EZrP9420PfHKNPJbfZ76+p2LSqLKcZgdnzapXCw==" - }, - { - "block_id_flag": 2, - "validator_address": "786EA666F2382583671F77A1846FC4ABDF9F2E52", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "qOtHGRHMWDF7igfZko9Nq0yIiebT7bTP5bMTJytlqk0VsVbVaQ4QXUwN8vA+7XeiNIv6Nh8Rb6pL+blPU3CbBA==" - }, - { - "block_id_flag": 2, - "validator_address": "787157EB0208852323804C28B3887F756F823A6A", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "MuQCo+Dr24+a6wgdPKKkF9VpRAr4xkRW4Q9twq8sEpJlTOGoEFvJUic/xnd/gVeSXUBmrJ/utZn5+TpYjZG5BA==" - }, - { - "block_id_flag": 2, - "validator_address": "7B7F7BA0384E0EE165063F9FCC41204F290A50DF", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "Xc9qbDHBLOOWMATmrAVk10G/kRc/Y+WgSWsG2xRpcUw7Y0vuM4Xrxmr7jYC+q5iPeb50edBZnq82tIsepX35Cg==" - }, - { - "block_id_flag": 2, - "validator_address": "7C779C769D5F8173002F473CC719305FE8FC9437", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "sL/2g1SnuNgGz+q+BsfMCe5stLoE+chEXuDKz+/xXufJVx73BjpjNKnlhzoZ2x1RAQtA6bIURfw5NIx922q4BA==" - }, - { - "block_id_flag": 2, - "validator_address": "7F3348BC852CED5B77DD8B279462E7EFDF078001", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "9dVlQtR65GBirExMihmQYl4q/8S3k2ZDdN6kAWfTntcfw3GBTBmY5oJzrPRn5hoGan02QZkUYu3dVzXoFNYKAw==" - }, - { - "block_id_flag": 2, - "validator_address": "7FCEE146134268E411753C6EA9C62FF36C7DB6D6", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "8Rh1MgC5gH8/Px/w7Qv0b8pPsimiw9E9NFp8ji2O3hN2EXrDr3QKWGGcGqcTpeChnqHQQDfScP1Z9m5tydc+DA==" - }, - { - "block_id_flag": 2, - "validator_address": "80204F6D505D5E420C935E3A15F401A19D3AD088", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "8MwSfAg9JR/op5ki7WKkRDzgNBRkBh7PRrpNmnygUMN7V4Q95Xb28DNJzu4eaQIc8nJePZIKaDFjngjyKh2oDw==" - }, - { - "block_id_flag": 2, - "validator_address": "8244C94F5AC0A5C208672AF54B115715E27940AC", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "yz1xDMQUcR0w/giMQeo/bl/wc5y3hl+4JL0kK6rsSu7pvH6xN+NCLikgt7XYgWvp4pFpjdt9mJDOjgQ5RPqwAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "833CC4C5980DF7FFBED4F73EA347B44E8B985374", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "sQTNMfPYNACt92iHrQW16HrghFy2xVfGy1fwke5dx9j4dO81JNjKCwsg63hMPw6Ntxk9KaO0s13jvXgKGVw+DQ==" - }, - { - "block_id_flag": 2, - "validator_address": "83DCA4191E49F62153DE50F18025F8876EA19BA3", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "oDGfVJs0wQNNDzIvIY/r69kThlJ2A5v8jubPEHHYiPZO8ZMEv/+wb1GLN9xbC0BH45SWN8en4k9cBWLkZcJ6BA==" - }, - { - "block_id_flag": 2, - "validator_address": "85458A404CE4B1798A67AB9BB83582C762BFC9AC", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "IEN5mKkEuvRvNb1N6+raUouXcw/oXbkFXkdMY05JkME/5dSUTQI/vi6MVxRtoVFyPIAMJLFer2OH+F40nM61Cg==" - }, - { - "block_id_flag": 2, - "validator_address": "861227E76A82CAA51510E7E50E929DD7F0620632", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "hcC/t8xBEkZH/Ua4j5qTWcuRv+1oESojPmJlVMfP8bWPocNoBTpow0sFvrO82GZ1IXmrahUUDQwfETR2hGXUDA==" - }, - { - "block_id_flag": 2, - "validator_address": "88BE7AF676F988584BDDDFAA7875D96C569046DA", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "+XYW4ZrTA+22FQtCxDn++MiswGOQmMn+SLcV6F9SKvqcBEjduFeRlKyM4hO057bx2yXhGbcUQaYeuZfZQ1qEAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "88CF3ED94C8FB8772CE13EB668E5A43C2B4105F2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "BNaalMYx9iV6TV+7jjegOi2Aqtp8v760yExKlyTOMww7aiEviIErp6EenbJ32hgsVJyMGG8Dr4nTuXe9neauCA==" - }, - { - "block_id_flag": 2, - "validator_address": "8E497CEB9698C545DD43A5D054DD19067DAED154", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "x9hEPPRDzFlz3CpEFlAVN0TsrQzS2TWS+2UvC2YB350BLyyU1QHOods1uIB6fUVpCfDt7m3tS4u/dEtINkLfDw==" - }, - { - "block_id_flag": 2, - "validator_address": "901C4F75F152494B605AD385A32697B47E542874", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "Pgd1pm3BJGAwLNr5ff3IWfzd8/Qj/IN9BRJIB21htMqgeORA/67c2rr+isEkthEPMQpbm7XRj9a3wktvLUP/Aw==" - }, - { - "block_id_flag": 2, - "validator_address": "9029713BF8CF5E0796CF1824200264B58A54A831", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "PMwHuu+aJeN+DRs0oH1VaOdIUX5I1ntKmI9i9mvsGHo6kQimCwB5Q2J+GdGX42zmKTWMzVdbLRjU2oiW316GDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "90F696DF160C8DF08C2DBF439452CB559230FD52", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "HKJFDr/YLgYrDy8KN+kHWGbABd6RySa+J6+ZL8gzNjFIf48UpJ3QmwtPr2NC9Vjdub6FPLmHxj8olC90rxJiDg==" - }, - { - "block_id_flag": 2, - "validator_address": "96C8B06B9A84DD50905374158D5874C360F0E436", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "tTstr74j+Amdn8qA+ycq4yDx/v/Jl1o2iExG3Vwprr1YGV5iq81a6hROgSnprjrBKTWgdY1HGsxTBHp4NSaNCA==" - }, - { - "block_id_flag": 2, - "validator_address": "9887FE69CDF1A3B7E2B3587506A7DE299DB96841", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "1J1F1rEeX0djoQln45H2H4cU8DHutT9+smOdshCObH0mRv0g8z44ABklZNpCd3Z3uobvdrxu/EUHANAUvx9RDA==" - }, - { - "block_id_flag": 2, - "validator_address": "9DD616591929A0821368A45635B71A55522F82C7", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "h9ZuUJtsGmjL3PDvdPVFmg+GIP+HibAegU0yhms1uhgnkxtEWVCEYkSN91p8vD1hyDZz3W/3n8SRo3V+BfDZAA==" - }, - { - "block_id_flag": 2, - "validator_address": "9ED26D8435540AA635478C769A328CFDB97A8518", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xFyJy54KXDeXTuJ8IWfmjDKhlARToalDtsN3OtQcmMflsR/rXo81t4f58GEsxEdMslv8aWbq57S82hhbCANDCA==" - }, - { - "block_id_flag": 2, - "validator_address": "9F0D30B162AEF95F0B38488C47902BA4CEA6E6EA", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "tDphURXG4W/aDtlvWNlQa/beDthgVTt6v3Jvgxe7lMyDukYgFVMkYjktUsebeOcvRFWbYSrIfCLlVOE3DOeyAA==" - }, - { - "block_id_flag": 2, - "validator_address": "9F445AE036B207D2DE04D0E32313A5A4B715AE85", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "lGMmhFTlPU2s3bcklA/Q7hJ82SBs4DCWeAPI1YXoI/xThTV/S7z1qdXvmMtrEyNZ1XkGmpViZBg8bHuIQa7RAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "9FDCD33F13D8106E469212E112E37E3E48A09101", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "OVXh8sPXwCYMfPQN/aCi8Zg7JHqgku4DLEiU5DpHzl1E/RBu+P0SltXyEkFXp4+4kyMwK+3Mobb/2j/ON+w9CA==" - }, - { - "block_id_flag": 2, - "validator_address": "A37F40DF55197B9B24C3D9938A8AA76CCBB80BF3", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "PFgOIuyu7BO59VDHTCcmeB85KCxkrxJX0r+GJPjXCbx8qWe6ODcDqhkSEZpLhUUFGC4RZnqU302p148aQJTOCw==" - }, - { - "block_id_flag": 2, - "validator_address": "A3E3EF26B675F46AB3B701A2E744BEB03F4A7F69", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "tsZfHgkboel6y13PWdRKlg+YNBP41ISDDBaK02ivuPjCPG/dldiKu43mM/MyGJBDtKTAqVNwllstZryki4RMCA==" - }, - { - "block_id_flag": 2, - "validator_address": "A54EF86C44B3F5071191A0144CCADB92118B2230", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "npuhZ9Yzv48geThhuRhm7UwVO/yPzuXZD7WLsfV2n87iMbFaaBg8K8OKBw/JzKuSrEuOAaxYRHzZhOA1ZBaOCg==" - }, - { - "block_id_flag": 2, - "validator_address": "A92BBF76E98907998C193A4CCACC200A3CC75E30", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "R+MIdDY3n2d1FMsVtG1qIVujyJqpBIdFF9Taqz3XN78IbDQCe3xg/ryBMOqo+KsYsdePc/5aYH3pOrVtSJCtBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "AF4B21D9AC2387443EE4B05EE09F54D846A3BE6A", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "XuD+EO1Jqm0rGcimefbsSk9kgnAjDmG/lxdfRweyZBl23tJJj2fAJspNiQEOcQG35UjnLt+DzB1Uu0W2oYoiDA==" - }, - { - "block_id_flag": 2, - "validator_address": "AFA48E19711A6EAADF676EB680C82904FB1AC16B", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "hbvr3Ij5yC85cfrvj7Ii45REV+3p9U3Ahk6BclWUBqiQsWGM8U46uET92fL54pxTvQpth9APZAi8mjmVUQolCw==" - }, - { - "block_id_flag": 2, - "validator_address": "B0AA5BFC7B1E2F324C4B46C4AA6083EE4ACF9B62", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "9kFgtlyUNIsud3r0ba1kwxVBkdlnNcd6yTcFPGuUdj6v0BEP7xGIexEMPL5w15EYtFRILTuCgmxSGTJCO2nBCA==" - }, - { - "block_id_flag": 2, - "validator_address": "B46DF4B1C3BC26C37D5FDD5B911FCCD8244857DE", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kMuKKoMO2JjCdFEWLDlmmx8+Xgvgc1yK76PxmmyS9PaCBtUb6RFjhUr+7rjuoiVFdLzcSaVLVRz0ufWsCoSEAg==" - }, - { - "block_id_flag": 2, - "validator_address": "B62E68DA52B0400EBDFA5401E2B77265A4ACB2B8", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "MPn0faYIko/tpFKWOfhzUlfE54gLaGh7myrOXyQJaFZ3urGGHpTvULkFmbgnBQb8LBqBGQK8zsUUGeK4N2HNBw==" - }, - { - "block_id_flag": 2, - "validator_address": "B642D822FEBBA7990B9F02D4AF86670CAC27CA68", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "tcfrPyEhPyHVcFmr1eBk8Y6Mg8tPBUVtErCl87R/DZmqYsYGBTy5zCUzrCdM9zYrkXJ4ou9ARFOkCF6ii/a8Cw==" - }, - { - "block_id_flag": 2, - "validator_address": "BB5A8EECC92ED313C2C67942320E781AF7ED7268", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "yzUGIKpCrfHC/Ubw8KDaCV4Mhi5P60qGK+z+YmINXrM2/ISc1HK5iYhXp/17iykis9ZhRkPPbyQ+UqRjVZ1ZDg==" - }, - { - "block_id_flag": 2, - "validator_address": "BDF67CA82B7046E57B6B4982039B6D3FF901C9A7", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "bfg4rmkL6MPZXIEtv01g9uP5zKK69OTaxHh3ntV0wun0jASplUmwyMpmQlkcAtekfNd4hzo6rIGNzrnJBU7UAA==" - }, - { - "block_id_flag": 2, - "validator_address": "C015E371B54F239FE683B7148A044070D7576977", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "szZNrnLtW0U/OHu+Z5gmIoaj/LDeKTV5AZnPGyXckRJyGypdez09RpuClCdPJuQ2/mXFj3TVw4rmZyrno8dCCw==" - }, - { - "block_id_flag": 2, - "validator_address": "C230CA072E37B073F97418CE158F691C99F79627", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "X7cxX6YV7A+D/rPsUI2frc5Fy2Vmq6TeHmzcdn0qH57OXwlG0X86rWJ9G7C8QHUixiRF0NVUnEtpQBNcKhAlCg==" - }, - { - "block_id_flag": 2, - "validator_address": "C37AE615063CA6060879A91AC426BE9426CBE419", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "sVjzWxJBb+NXKa/RQ65MdOZA7UUDWYSz+R1LbLNUbo4+xtwqNqe9OrFadk59imEgTHhfr2shSf0Tp6n0ELpvCg==" - }, - { - "block_id_flag": 2, - "validator_address": "C3F3E4A5624731E535149A43B32D9043B9520EE5", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "iBGUPtNDjqYDKGH8GcBdvfWUjjNhemZoN2PERcEg/0hA+D2gLjHfzXGNInMU9R9sOLc0pUyAurDBjAQsnt2aAg==" - }, - { - "block_id_flag": 2, - "validator_address": "C4C16B56F41459D7A5AD3FB2AA364244EDB48036", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "481tFqU3q+RbmATCA+rvBXqUyw2t3E1Bk0JTd4dh7Ey8344iikJsGz29F3P3JPoAOyxFPIz1K0Z9w9jI2i44Ag==" - }, - { - "block_id_flag": 2, - "validator_address": "C66661B9D74DD31FAABAE5E17F5C73E04AFBF839", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "Q28seoASxNc4lxaxVjw/ndJqizK+XpBrzdUcKT+8JHXAxXFYnqcteKnACl0TRHER5piwy1XBlh0XeML9n9qxDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "CCDB30DE6322925BA7A18ABDE21F8C0B1CDC6F30", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "B4mG5GD0nsdJGfX4w6GN8fyee6SLtikA7lXaja29Y/ivwbjDio7CyGXqpGnYF54Z+UpoIQt88EqElA1fEDUGDA==" - }, - { - "block_id_flag": 2, - "validator_address": "CFFE7BA7EDA642BA98DE8605377965D441310A2E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "FB89dtXqN6qK/5ublQKQG+NK2jIPYF+jiN5i+rvTQG37YeYTnL9+ABtLiRgJ6rTqOzElGvxYT3LCnP0Q+JUJCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "D472E98EBC0AFBE1712E59B33935529CFE118A77", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "nXligsaoWYXGGMbip01QnRXvTRCIcnruk2DilcHAxqntUa/MWu8ydnnCG4iil/2G2PcELZs/V6CnH90VAhneCA==" - }, - { - "block_id_flag": 2, - "validator_address": "DA659B0EC148C5EDCB150E4C5F0F73731A7FE1D5", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "3zQC0KOIS67kyKuBezFplz/ZY5C+hn8RWXxL5wAjrJ7J44b10eCdC5A/HCWYe2pWJWzE7DUdjOUrnyd08VS6Bw==" - }, - { - "block_id_flag": 2, - "validator_address": "DE1C088A2B107F6351DC857928568631D0EC4230", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "JXgqexatdSvUfEnRZnLuU5nAnKYMPkGwoOy2ee2NXaeCHDw3iOit66o+e/xHj0fdBimWIvMgCCGJzwIJ9rz/Dw==" - }, - { - "block_id_flag": 2, - "validator_address": "DECAE33B2A5556A877A3E43471988E21E9ACEDC5", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "cG2KDRrZOKRmJybLb+4/3t4jLbQRilnjpz8KWsm1De3Xk87+1cH/KUKxjx7t31jyFqMk74g79ViFjb/wBPcXCw==" - }, - { - "block_id_flag": 2, - "validator_address": "DF600C1EEBA286C887D291321D08DF5DB781B41E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "uwWDTJ9t/R9K+/2nnutg7qGCf1A216NHGZIGenPXVqsZlHBcFHlMg7V9H+LsB3vyVYZb4TSCar8jhnQIaOU/Dw==" - }, - { - "block_id_flag": 2, - "validator_address": "DF84994D8ADA8BD8018F9B1440F0CC58B6968401", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ulMoD4CTlj6ARlkQRGLY0Pd4mXTceM5eAjEXoPNXgSqgITkfPsMZDB90HKqO3dC0n7+7fjAJEwAhjY6JsadVCA==" - }, - { - "block_id_flag": 2, - "validator_address": "DFC0D44126E79B374329A8D8F65B7A6361DE3922", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ZYpYDCEj+sybmGtT8hoK15cMtG+kAuhT5OTFeu/alGO5hKMN2kWSZjVUAZ452z1pIUsomsJYUy0NncMd1eecDg==" - }, - { - "block_id_flag": 2, - "validator_address": "E29C235109215DB8F7612C0F2096932B9D70567E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "k40G8SfkHZYjpy2M2oFcL9HUuFwcTh+hgFoX7nhS4QiIvHVlpjaoxOdFIDvb5+HdQa3t79cFBbRH/HpH2EGPBA==" - }, - { - "block_id_flag": 2, - "validator_address": "EAA1B94BF621EA5F52C69B2ADD3C4E93A1D23C4A", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "QIRtKTSMH1v+uMyNjvSDEVCNh7/HXs9U3TITpWXYJl4Cl16yyCPQ+Q+CXDbyyDPs2s43igJqQSvWe/qFbemwDw==" - }, - { - "block_id_flag": 2, - "validator_address": "EAE4C8E1ED2E20F3ECE734F76984E7731D49F914", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gGCxnp1cAhUcjTkXuFNa3bcHjBf9QwI8mIb8AHBM5jJ5uRW7NmY3mNWitHpqqWXtcKovvqyku/+Kg7TBw2bhDA==" - }, - { - "block_id_flag": 2, - "validator_address": "ECA31C24BA79E6165B5471D43D10AC8547354F9C", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "2izA4Sf1TjVFmF7BYTyPNc9RB8At38DfBdnk9EaX+tWzL8t+YbPu/OClO0xhTjZbdfCmYTwjiTLwUGq+c9qADA==" - }, - { - "block_id_flag": 2, - "validator_address": "EDE6C887A1ADB6745DC304310B9A539D8A236AA1", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "sWvn5NY/T0Qd3iERCxOJRFt/m6U1OBFTokiL27RIWPe8l8Yi/Sd2Fircz/znX02h89JV/VizDxwlKY4N2em1Bw==" - }, - { - "block_id_flag": 2, - "validator_address": "EEF11EA67706C81E43FF769CF15C842E2C6FCDCE", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "eVKBSNCo2S+dgQzvmsKUIWCSkYwiO72iGfSAa65Mar7RKcz4TCNA0l6p/yXkJyLjnTAZ+MIMzzalTE8AWS8yDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "F02A2853F65D73A334DFA636A82A2B308D6DC92A", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "NvBxcPBfn/rFEZ8Wbw4qYQuRbyML1vsojUEAxEV4SukPF3C/INMkVSFXQW7kLFyhClZ4aMihpP39E2QC95bKBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "F173A1AF07F7FC6820544AC1C6B214233492262A", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gWz8t4ZrlGfngZ45oG2jMk96NWejDQpCfnWCKG4LpInTtdGXaQbZdaFprPIANonZARXaF0INva1qGiBOhpdjBA==" - }, - { - "block_id_flag": 2, - "validator_address": "F25CB645995131C7AF5097427CE9F47990A12D9C", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "E7No2EXsXfh5PuB9LTo4H1miSkYUFjZF/Iygu8NIEypVdqpfpi74vNGwbYEGLtyge8DQ9XXBy/GGXqVogNysBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "F4053AAFEC0249F8D3D55C9E197657FA9B57184D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "2nNQQcVRrV6V1Ie3D6BdsVGJInwV4rdHf4hiPOeySboLtUAW+gU2nsd+XCxJXHTLFNYQ+VWmpB61rvN/9K0ZDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "F95B539513FEDCBD12720D111F339280A222B64D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "oQaMpfvWWUr0ULiJ/OlKDRp3mDkhQQimWSkiOqXb6pXztsb/hnQmQKhzR+gUT6/e9jMd+dVynxuREfoRFiv1DA==" - }, - { - "block_id_flag": 2, - "validator_address": "FC636C36924D225C09944E11CBE6B16882A0359C", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "S1ZPM7jsnk/jM4hWLO3QWtutXrDeqxrQ7uCn3OklOrzJ3TIv6spjAQeHnxfHUO7qAbeIPZXTQdAY/aEaMsNkCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "FCCD710DFE0DC5AEB8ABC6A20031EC0E149F458E", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "2BjDOoc9qnzd/4xdy6nQcVQvza0ERKplMaN/gIA4qxX4bKGKXn1ltik6NGTjdISIta6i5tISReZrJs4wS2r7DA==" - }, - { - "block_id_flag": 2, - "validator_address": "FEE43DA03FE7782A458938545578AFC11DAEC071", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "DD/3bonHKEe9q+rBR80/gf1esYaYsOOycpjEkgQryqNX2G0cx9dYzLNMJZhGhrow85/4xl6z8rntub9WlkUKAw==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-6350" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XCK6BWW7PWfsMof+x3lYRaNKbtP9J2WoOUztl9TAumA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0859D2467F0DA63744B220E6E270DD3F0EEAC10E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "I44Rs7aDNyhp+m0Tx8v5h5+PadBk0hrnGRxjjRcUN1M=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0D7350841ACB4A53C7717C7E5776A5E0DB6D596E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "x0lc+iqSimWb7E5qjqGjhhcGfHvInloqPqcKeFs94Lo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0EC358ED84E4F9088BB57617024D49E834322B54", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/ruq8Sh5Uw9wfjlgz7365lP3V4UKMHijoZl+d3I76Bc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0F7E62DD0AB86CB03DA87EB9969B558AFE04CC6B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xsPsE8CiTwD9ZF1hVyOC3Pbucfk3pXhhA0T7OK/epNg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "104776A7532559122F43A5763A13FA7E747AA44C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "17lBalGeyg7iPCeZZ5qqQo0IG10IqHdoejLCdRxwI3w=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "16E8EE7E867E20343ED67A83386B798BBC8CB7EA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "M0PtCXbgOaR3ldg6Wcpro1dnJiF86c2HwuG0lop+vhg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "17017FDB07BD7604A356325D499FF1CD9965CD00", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "i89m18+VO3HWfYsh9uPTmGpFrJFNzauYrxqFHOY/NKE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "19FF9F7C347FCC6100DABC66AE8D3E2294A145BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "rn5HJirSOlHMYWhuq9mMWvNOdp07fsYbp89nzIW/5Cc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "1B6D50537048EE35C2F43BCF284B59CFCFAA2F91", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "l9nBQa9NVbrdBUi1x06afmoYnZ+GaeVWWfMc2rruNLA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "1DC38F15CC04F552E1677D405EDCB2AF8610A20E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "4puyaJfGWwrHyu2kuiZy/BvPdwIR8yBNSZXKAGJ2/jE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "2022C00AE81BE3A15F9C64DAD16071AC4C78DD05", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fm5HuWZCIGo+n78q9EBp6ooMRoky6mmB48oQ3SkAvM4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "22A34A49E778B1F2324C501831F1B41D5CE2FD43", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "JSWsW1fQnAlWzK8Odm0OMhNj4p2ImsJmGEptlDPeqrU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "276DE96119FBBE4538214B94C62BDD2647B1E2E5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "U9bh0FPYB709KXVlJ4XAtHpCblL98lpatZZxDHtwPs0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "2BC8D138F5DF6CAB4EB88B96DA66D9FA18EF543D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "UP3UAgPsub6BAlmZ2gG6PtLNyjO/5LdzS4jYSSoTAiE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "2BED56C755A702194CEFCEDDE096FF4F93C3652B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZNDcajXkY4bRtEBAmUAlx2d0HruUQWBS5HmQI0wwtBY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "2C5901D7C2308886511BE96C7D60426032B4FD26", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hyG2JJlVjjWahm0WejWZng4Ril4gDMj3hXofQFTj+7A=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "305ACD56F23E26BDE200C06825B4B0C90D6EF09E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ck5ovdxs5unS0mvbGqalrir/gPPmSiAS/p8j2DCrxl4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "31B6C523836521A9896D96BA1B3D99571249CCC2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3MmFrfgiVg7r0j6pWy72d71qdmrr4VX8XZf54zRkOlA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "34167E39185F8B5E144BC73E9A54A65C58B5806B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fmYSCGXNmzqPVBqDZe/+2QCbXsrY8LJ4w3sIs25Rai0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "36F2C307B74BFA57300F1C7F8CC24180F86F2DB3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hxpKGTEPS46kLDoesT+WpdY/CcilcK8dtkPjWshPF9M=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "3790F095C2C35C28804F243DF9F1D9702527987A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "n4sqH4bqJSkoH9DOe/GYJJVAIX/j5Lj1QbDdi6tbUxE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "3AF9DFDB695038C1CDC08E6532D7259ED3CE6136", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0RcGmAScpJvvMpnT+kzEfSllGQrNYvW7TTS4nRKeBIU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "3BBA3A4BCF6BD50DF93399D28CCD2C77EAF04DD6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "o7wzwfrjCiUUr7fjHb2vAmtN4FOvAWw2HB3J27rZ7uc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "3DEA89BC6049093CCBB86AB1A26A7A89FDC0F170", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "8dIzhTOrl5C6Fie/BsyJ0jusfhuHmuIAj0PmurcSzTg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "4099E6362C41FD472955FF42D640ADC8382143BD", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "bi9agQoC0nPb8ETaTbB7GtTTJWJ4Ac7+G1aIe3cpnn4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "409BA2271966FD00E50CF30D68F02656C1BBEEEE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "d7aLXaaYAOzSm7O/tXzmpFkAMIJoSbtLNmp5YRn7yPU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "411EF3D45200CD9F4AAEB41569C30095BE5B8352", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lidiSfq+SqGm+rrnUOTgeAdEVXSR7eI3nSRBSvtknxU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "44CC86D5E237AC35EFAAD48B737F4CC56CDF9DE4", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/kNzF1fajUfYDEO6YfnJzFR3FwFdM4vhIz6EgGaUX/c=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "44D5B54C74D990CDFFBED82788E0DD3DA5DF91CB", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "qzjHwG+dwCMXoBUj+BNJD9Re3s+UDUGP6lGX99qK8go=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "44F6313731281FA393DC0BC3CED0F141974E6E80", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "UzLjo4moq6iEE/t/OvZu0eyPRyEawT9KUIuBv903eDo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "46D87DE55A2AD46C8BF375467C857D88F23E9B27", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "63/IWqNHDYYopzqHERVG7xlzpVAI1JpISqVXrpww9Yw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "483B3ADB1C595B2C292FEE8C65C9F6EED884CA00", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zZxuCLwHjbYyT0AGpAuRu6iFTqtrhr9A7aLYCRhRxXU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "4B66EE9E8B13C4494CFCB6D0F6A19F1B417E172E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lYcfeQrV/km1K1Is/Sqt2UOpITEaTB1C+Ak8gB1TZbg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "4B924BD542EF7E25F33D1DA71CC9611CE640E4E3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "A05Mf3pnWpQMeWutGgI8bh22Bd6B+EiCkuwW7jWsOgw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "50C24570B899B11034B1A8F51CAA91D479C555C6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "znqmCvYTlA1RFIZBAzLRvT54efnS3EVmZ05ZrbFWZpI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "53BF6EA4BB98D5CCB8081DDC2B6D80E790ED6091", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zv8gefGS9GKaAsVYQHh9y+xkw5sgBWP8gk1HGbYYRy4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "549523D99B417B356A37882EA5BE22444BCACE49", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KSrXAAa3As5ORLjMCeXLfxjqwsvOSAvYIljFGbhf3B4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "55B6E0B429C582D102A8C5E9D211FA07D2AA3DCB", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ppOdDZrQqjxtBvOifnSuQ4DzZ/w22q7lNE9xrYIIfS4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "56BA4B6BE15A47356AC20339BE1FDEDA2994E34E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "1qM9CJwyJQJGOIdWAozNaTs9KALlX0gnDDQUwcZJi5c=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "58086A4142ECDD35E8FE1753A6256B98D9661F0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Uby9JGpxx5WKUUfJQulMBb2qVUphJobqHEN86zMpFFA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "5E561B91BCF07518E0FD2E510C233D455B306856", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "NwPY9cymnZc1Lxb2DUZdW7PMRhBh7lQSGdVAgVZeDZ8=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "5EFB8BD4E6B0A67DE3E9C64E728B8C10614DFFC2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "eoBz3MZy5yLeSkJocxPobWDiU7akUc307R3zVoGUr+Y=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "5F19CEF4820053AA8787D93C86B7CB39D7ABE40D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZEpB4tm+ml9BJ69RyM1F6yC6KWpxciBJe/cZ/6NUldg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "5F8C09291BC721346A7571FAA7936C33D2DBA44F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "i8iVTRxNhSfhxIZcuI4ppye3M47DLpOY0NVn1f4mUo4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "631F83C22D4F46F72D732665F61630B408F216F2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "RmvubhoqFcTLJPKuc9NQeI30RqYDlXu/YJaSmKWcThc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "63D15DA922FD4DD88FDE33D9B6C80675D0BDEEF5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "gN338koMV+bz7fzauWSqGhJGBDPIUsjhj0oQKHdv5ww=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "6548BDD3B9F3B8C243F3AC094C2C58332E7D32DC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vPvGiLV/Mjtd2UgsImjV5TMxaUBLt5b82T6OwJfpLeA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "66CECDE4581CDA058A1D708D183E606B43274946", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xKTou5rj6JK5Riiq+LXVNl2AGEHB3hIaTj6JklrcenU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "6BA54EAE4890CB52A69F3F520524C5602442A857", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "jIPBmdnBx/aLRCmgOheKG6mN+ls1asRVn1ypQDeBVDQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "71129EE0478B5EE8366C6D9E9465C494CA1063B9", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TucFlevTMXVH8YX3LvP/Y0cq3u5DJ6kqfalnl01unKY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "71B73AC10644A4E0172BBA6EEFFFADE9729BA17A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "9C+vwXG+jDElowp7hd0VtZMIM0QGs9hSpAjHatJoavs=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "75726122C13922D71DBDBBC4ADB57AC147832914", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zQe0pS1HdvVtcg1Hb0WfqhNBl9jpuJggDfSyKCa+0HU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "75A48BE1310775AFC556D46EA2234EBA3BF388E5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "z/Yxy+HxU07cB8fuAZgow4FhJZcm3tqkRdyj1+3ACv4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "762408A51C56E050E55B4189D8D76709343F14DE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ie4HhfootkQ2IugMlhqvkAQZUNCIKdNo9wxk49zXvZs=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "786EA666F2382583671F77A1846FC4ABDF9F2E52", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zplQxvJiEbjx+1PToTwDMnjc8ZGPikHoY6N1BzoMz1w=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "787157EB0208852323804C28B3887F756F823A6A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "iHjXDCZGLeGqbpe3Sr/p2I6YzhkwcrkGqxLxjLtae7o=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "7B7F7BA0384E0EE165063F9FCC41204F290A50DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "wvoROLitucFfBKlKtVbgdR91B/s6C2elUNBSB7jJ3NQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "7C779C769D5F8173002F473CC719305FE8FC9437", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vXTTO5/GcGP5+kcSbqteHENtjs6vLj5O8VWK7rEQoOg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "7F3348BC852CED5B77DD8B279462E7EFDF078001", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "qz5EHLa8J5Qxw6DaSMSdVDY+adVxK8uy79HEnwSxT2g=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "7FCEE146134268E411753C6EA9C62FF36C7DB6D6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "MYRRf38BXVkdiGuTZ2OH4Ghhg0IxDo/4+bLyvks4/sQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "80204F6D505D5E420C935E3A15F401A19D3AD088", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "8lU058pusC1yBovi3twpc0cI4Zti6VyNzw9Hq4IpQzA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "8244C94F5AC0A5C208672AF54B115715E27940AC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/Bs8sf+d4K8uztlGCstc5NORiQy8EyfTCY9fzTJCQ4U=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "833CC4C5980DF7FFBED4F73EA347B44E8B985374", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kPyMxDMWgW4nGHXpClW4HogSwIZbt2oM9YJRxcUYROw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "83DCA4191E49F62153DE50F18025F8876EA19BA3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "rKZ9HIx7FEjxFIxfUstXXg4Cml7gU7H/WAbqEz9Ew9Q=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "85458A404CE4B1798A67AB9BB83582C762BFC9AC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "mSM58wILhLLDLDEaE+XZOE4UlSrstmkHgGuBiuffjEQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "861227E76A82CAA51510E7E50E929DD7F0620632", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "EYIEcSVx43luraoix32LPZVLAcgKQVWMh/aGbupnCWU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "88BE7AF676F988584BDDDFAA7875D96C569046DA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "2GOtwtXCIt3hoae7hAfHiih+zuojKrKPpCkoCDzdgyY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "88CF3ED94C8FB8772CE13EB668E5A43C2B4105F2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "7YRNZJYRqTw3nsF9bOLoWFF0JdXyklQi8DZ13uXAg5s=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "8E497CEB9698C545DD43A5D054DD19067DAED154", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "P7S9NXci87tUoniFV92LrIy89CJhOITAOFiotfcFgHQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "901C4F75F152494B605AD385A32697B47E542874", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "bADiYHWxEj48QPl7V3NmFtEBDC6lRHwdolSoND/Azjw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9029713BF8CF5E0796CF1824200264B58A54A831", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xi9BtBZFunLboJGtZ2BgDFB5sZ8B30LJ95eaAoKHEZ0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "90F696DF160C8DF08C2DBF439452CB559230FD52", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "l9VCVnigX9r/ngvvODJy65Ux05mHgq1bAtMzUTdj9eM=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "96C8B06B9A84DD50905374158D5874C360F0E436", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "iH9JV/rTwK4G601Xdt7UXazhzVEpoqGS41SLaZCv9Yg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9887FE69CDF1A3B7E2B3587506A7DE299DB96841", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZoRHjDslrC+Bt0ylNaKH3tdAFSjOUpKPsQHfCQdzgaI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9DD616591929A0821368A45635B71A55522F82C7", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZeKSKBR994qPBqDHZoPTX3Ka2Z7u3qA/LOtpudQeNOs=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9ED26D8435540AA635478C769A328CFDB97A8518", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hGGrFZ2JCgq/vYPBpQxpY7aMPnIHkH1uAyUVYtW9Ba4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9F0D30B162AEF95F0B38488C47902BA4CEA6E6EA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vpRJi+yl12C4zwge/VSeqIgvluclNBTvUqoTV8SHdjA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9F445AE036B207D2DE04D0E32313A5A4B715AE85", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "FGdz9P2B8gYPui+kEMkdKNKzAldR3rrtvCtRaAWUiG0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9FDCD33F13D8106E469212E112E37E3E48A09101", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "VvXH3+SoWTvCOXpfvWUUxvrVbJZ6eW3f4DpZaq96fe0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "A37F40DF55197B9B24C3D9938A8AA76CCBB80BF3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+cTbf6acip7dwxVi5ttJjPIbdeNSAmJriiufJbfisY4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "A3E3EF26B675F46AB3B701A2E744BEB03F4A7F69", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "y3D/fwrDDW1imqsB+9YVWUiOigYnKpoI3v7cz0aS3gE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "A54EF86C44B3F5071191A0144CCADB92118B2230", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GhvEC9KhlqB5GQhtvrJfiwG/rT9Iopp3q8gUdYHRLY4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "A92BBF76E98907998C193A4CCACC200A3CC75E30", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "gmM2IlGnht2Ob1Ih+n6yrd8FuypOfjfhCteSSQ91Pak=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "AF4B21D9AC2387443EE4B05EE09F54D846A3BE6A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hlSyNoLvCCQTSUV6HXuiN3gmZAgQnlTaIHq4UE7Q0o4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "AFA48E19711A6EAADF676EB680C82904FB1AC16B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "cViNtsX7rEljq4sEm1nImdb43c45ncvyT7RihHXP/UU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "B0AA5BFC7B1E2F324C4B46C4AA6083EE4ACF9B62", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TGdcglY0fT4wpgKviFRhNdskxDDrKqIcbTwaqISTWps=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "B46DF4B1C3BC26C37D5FDD5B911FCCD8244857DE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ztE0dZ3qD/gJxASCrSyEMByum5hf0IKS8KuGm3brGNw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "B62E68DA52B0400EBDFA5401E2B77265A4ACB2B8", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3jcKUZws9cthuUvC8bHUlEQ83uogY1ABWaF6zy7GyIw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "B642D822FEBBA7990B9F02D4AF86670CAC27CA68", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "pN590Y+E8UIW6b3S7v+PQcMvw7Ipbe5fBNlvEPPZCjY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "BB5A8EECC92ED313C2C67942320E781AF7ED7268", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "5k4lIz2K7+of+AphESqYW2err3cNXRNbsqUXm/k5x2M=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "BDF67CA82B7046E57B6B4982039B6D3FF901C9A7", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OpSNrFayxfW21PPMApfVuzLQfe5V1Dotd/MWwH5yVg0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C015E371B54F239FE683B7148A044070D7576977", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "T7apJi+EyTZ4SEJtsxL5V+Fw04QUaBh316CFXME4Y20=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C230CA072E37B073F97418CE158F691C99F79627", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0fFmL74Hrhcs5jmxsezvSAMacxqD98Uvqg23Ij/q21Q=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C37AE615063CA6060879A91AC426BE9426CBE419", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "jRKiyGWNoXjJwcUnl4Rzeo6tAe/02/AoKwGkjxG6SEc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C3F3E4A5624731E535149A43B32D9043B9520EE5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "C7jFi3Zygv1OAoIkH2rJHNecgirSU6RIDMRD+lx0Q/4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C4C16B56F41459D7A5AD3FB2AA364244EDB48036", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XDT8PdcVgniRAgbz3F1v7eHzhAXGu1IpmSx8FZTOSTE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C66661B9D74DD31FAABAE5E17F5C73E04AFBF839", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Oomi2eak/GkLZ4HA9fVuqCEyA9HihRnDxjJw4rOfgZY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "CCDB30DE6322925BA7A18ABDE21F8C0B1CDC6F30", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "j3zM084W2/Kcv+R5OO72hjSfvYEvQqc+SA7aT1AgRe4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "CFFE7BA7EDA642BA98DE8605377965D441310A2E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BlaLhSbhOeU05Zi09z3hjISZkrmwJmy7eYlAoTaGkXc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "D472E98EBC0AFBE1712E59B33935529CFE118A77", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hJUp+wx9txh+IHeJ4n5QHyQVxiZVBcHrZ4AYEPXWJY8=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DA659B0EC148C5EDCB150E4C5F0F73731A7FE1D5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KBwlsk8RIoYg2HB1XDqNMnAfHLRQk8CMF1RPB+j3/S0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DE1C088A2B107F6351DC857928568631D0EC4230", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/QW0pe/82MqaP3ueDLaCwnakNAo+GFoghEXgiLybP8o=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DECAE33B2A5556A877A3E43471988E21E9ACEDC5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Glj0NnKo47wq3IoXYJpL2naLXoM8+fjgJQN+ZMfnAKU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DF600C1EEBA286C887D291321D08DF5DB781B41E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Tf5T5r4/wsFvPdj8z35oWPP4TuuSZA74Ktnt3g8mwXQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DF84994D8ADA8BD8018F9B1440F0CC58B6968401", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "LGS7jGMN1w8AF3DbGY0ulbwcYPVhgFJS6OJqrkMNhkw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DFC0D44126E79B374329A8D8F65B7A6361DE3922", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "W+CjYjJLWr9oB8jwefIE7DDmPhugw0s7fq0KkNfsdVA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "E29C235109215DB8F7612C0F2096932B9D70567E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "7QIYRTtwCYDqadOIQ40c0pci64o+S182FR0V+x0fKEA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "EAA1B94BF621EA5F52C69B2ADD3C4E93A1D23C4A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "foKBMkfvkZ1nq3DrmiKxxZ3Mx4Dev0jVQA4mqSocHCo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "EAE4C8E1ED2E20F3ECE734F76984E7731D49F914", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "WdwdjF4cDC8cr/QBwK7aSf0P65EU8zil/1oPYpjzB+c=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "ECA31C24BA79E6165B5471D43D10AC8547354F9C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Rryj1JTEgZ3cdfopjkmHI63AWOYCLhsq5BBtMLWrcNM=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "EDE6C887A1ADB6745DC304310B9A539D8A236AA1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "qIi5R1hO4fosjdY6Ao+tvrN243gT7nzKlOFZTa9Y564=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "EEF11EA67706C81E43FF769CF15C842E2C6FCDCE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "1qGw6O9yL43hxxpN8peRu/ViAXN0WjzG2utBwlIc4jU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F02A2853F65D73A334DFA636A82A2B308D6DC92A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0l7zJ1NLfmin08u9wEk78rWwsG2+4OMveU0csi/9+tc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F173A1AF07F7FC6820544AC1C6B214233492262A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "4rJshjyQu4BHrT0ISKjxbzGeso6ABwgImeLXbvg2wG4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F25CB645995131C7AF5097427CE9F47990A12D9C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ThgrMbboZQKsZxavjFmMnNw8drIWlkZq+F7gkF938vU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F4053AAFEC0249F8D3D55C9E197657FA9B57184D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "wm3aUzYr2z4AK4RfL0SzrPEKaOBPfix0FLKxHY1v5Ds=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F95B539513FEDCBD12720D111F339280A222B64D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "L9Dl46Bw3k/ehotfwQdrtsCkn/9yKknPX5pmCk/CPA4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "FC636C36924D225C09944E11CBE6B16882A0359C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "nHPrnHkvryBY3HYND3zQYv1z0Db1CymkbQq+HG3Se2Q=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "FCCD710DFE0DC5AEB8ABC6A20031EC0E149F458E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "YoqiYKzLy1IMN5OiHoCwUPgbJW11GvrIJ8P2hG5jLFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "FEE43DA03FE7782A458938545578AFC11DAEC071", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+kK9BAL2WiD18tpLQZzbn83/frwAj+neOeKu9W5Fn/U=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-6350" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "482F85D79E5F24D05AF202841D4C2B9F52187169C6F3114F233EC9A4B9910460", - "part_set_header": { - "total": "1", - "hash": "FDA4F6D8EA316671EC4216B54F3468B848D9B79FCD7EAF6E588B1944FEA9FC8A" - } - }, - "last_commit_hash": "4F24F61D0BB46D03055211591AB0993349B79F28F6F9D8A78B7063EC0C18CC87", - "data_hash": "", - "validators_hash": "F41F9750B962158C36B8DD50F70D92347880D402A939A96F06F03DD3D5312C54", - "next_validators_hash": "F41F9750B962158C36B8DD50F70D92347880D402A939A96F06F03DD3D5312C54", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "73F0B1C5BED25522E1EDC1564A0B61CC32D329ADA24734A1FBAC956BB269D4D1", - "part_set_header": { - "total": "1", - "hash": "CE66B7065D4ECE7E1CBF9D0115A4825A77E838F8D3FAC2C978E4048F51155B8E" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "DiU2v0JK02PFHkp/81KpJKqyXxhNBjr3cwL6L9g9OFbheBDs9C0P7Y/+PR+58kKzPMow26TSXgilJc1FY8UOAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "XVbxgTiAB8szQcSW4XbXaDLdt6GJ+PFx+0MDkkhXU6KE6woBZvOsCA1sL0rUGYaYh1FyN0b3txUDbppzRUiuDg==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "UzWGWhfb97XiLLzfHA0jQ4JYq+44D/16c4kj50NkKVQIpYQbg/kab83rPYNpkju52kgNYpV5w6MmOcxDmrMJCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "lqlqVkbK5dHpzt7pEgT+KqZI7n+jtAcaaTOhsJPmllILqZ5RQBWWMFp51AoywB067g62aywA3bTLM3xaubkWCg==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "QCfzZTRY9ULbwGk7puuBm7ASeEt+rxJI+RbY/9XOKH/QWwJun4Kn8B0/UkKzYwPFrJiGo0zEnYVLUhMnwB7rDg==" - }, - { - "block_id_flag": 2, - "validator_address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "gTM5oHuqam9JOnaRSa8z9RC5CWJgdQJBi9wx469SyBpBb4IXmoGUFww7/9+Znw81bLTS3M6b9u6jOXOYPmbhBw==" - }, - { - "block_id_flag": 2, - "validator_address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "9sfsgmruNCLLBtzhx8I8XpjbVDH237XfdTnqJXeXGn/SvQlMy92PS7cMcoZZHDMK+LAl0myp97BtCK4koQXSCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "2q/obY+SAaz6Q48LrEHTINKNSOyvqEBNoZ5cqSHBenZr4tCFogOlKor+g1O+8yHIDK6uZq/WLBalPaDg07oZAg==" - }, - { - "block_id_flag": 2, - "validator_address": "0859D2467F0DA63744B220E6E270DD3F0EEAC10E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "GyyAQjuq2PFDrWrUTzQEcOgeZil6lhPMQEgJhAtCF0QVKqqkFxkHLKJplsIbjhCRBa70JDUY7oPo5qaBbDJOCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "0D7350841ACB4A53C7717C7E5776A5E0DB6D596E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "s8J4JlPJXM+aQ2RPjl1WioKZGFflCxQ+Ly40m7ZAz/6HBr/YwGwbvW6y7L8BBw3RM8H6Xu3j10vu8tB1KuHWCw==" - }, - { - "block_id_flag": 2, - "validator_address": "0EC358ED84E4F9088BB57617024D49E834322B54", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "26AzEv2EeabsI+k9c4+ib2ZqT5yK2aXpBfTaM1e53z+r42ceF9lFpltMdHAGllryil9+OtDtojtLUuicu6AmAg==" - }, - { - "block_id_flag": 2, - "validator_address": "0F7E62DD0AB86CB03DA87EB9969B558AFE04CC6B", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "A+cfivMuY/yNJxy774XcY8z6UGJH7WZGLfjkOO8sMJ1flWe23Z67cr3Y1BCi9iDEysxg3vTtlyXmTq2ne7eiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "104776A7532559122F43A5763A13FA7E747AA44C", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "wV7I005lKLnov32eOVY2t1m8uzErZyTD1k0kEaRf+XzYOyvdAnQ7CdV5Vw1P+VjCCrwuWdHDDlG5jxhChDyUAg==" - }, - { - "block_id_flag": 2, - "validator_address": "16E8EE7E867E20343ED67A83386B798BBC8CB7EA", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "WLOothVwY4qCNmu7htFBObsde1fNno5Lgxs0Jwyow7CcOB3XPpUsvKPJ1VejXl2/GtiDVODLW/bxRQs5jx6yDA==" - }, - { - "block_id_flag": 2, - "validator_address": "17017FDB07BD7604A356325D499FF1CD9965CD00", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "IBnPLwhxhpkym1AQ2SkApa967cVWMlmd0jqcNY2Mb+IxOK8U0AuYRExN7tmoIyoWfD/1Aw71FsI4KF7d5pFTAg==" - }, - { - "block_id_flag": 2, - "validator_address": "19FF9F7C347FCC6100DABC66AE8D3E2294A145BA", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "BQB4CSOp8VuSv3ARTyPBbup4z0fftv2UtBkEyBPr3HSpRR8MaZY0EyjItu0Vi/r9N6Q3BaAgEJeMswr8xI8hDA==" - }, - { - "block_id_flag": 2, - "validator_address": "1B6D50537048EE35C2F43BCF284B59CFCFAA2F91", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "+ucXn1hRrJ/IMt5imomdm45zkAb3MqAb5hEvTwDH8onGcKAmT2gVWUGjFA5crRY/xM2i5SLSK2gQX0K4YnZAAA==" - }, - { - "block_id_flag": 2, - "validator_address": "1DC38F15CC04F552E1677D405EDCB2AF8610A20E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "G9vCiy7QD2DIr8VCJVQp/WwKFA04dQ2WhMkPmRmJPawPz3nlQL968WIDJaZ8xdfGaIqNRfZeUav5JuUlzQlnAA==" - }, - { - "block_id_flag": 2, - "validator_address": "2022C00AE81BE3A15F9C64DAD16071AC4C78DD05", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "tb6aPtFUDPXKo6FG/OBqIpv0hBzuL5sNYUWxj+sDqsXWlhA3GvNz6mU1JIwy+lz2OybjG6yz7D1mOxMSiGyhBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "22A34A49E778B1F2324C501831F1B41D5CE2FD43", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "n2RRn89TRfqagLC+8H9ZKAP1HgBzu3B2d/wYpQgtfAH8AhtkJgpPQJZGoG0+blGHqetkiK8YydSzx8toLFNcAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "276DE96119FBBE4538214B94C62BDD2647B1E2E5", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "dstallVeaARytKxtCNtXyJgPJe1G+v7/E3bKMQV0wCa81xoypIqeZdCSf1jbrGdb0pdknK6Xp1WhAMvghdXaAg==" - }, - { - "block_id_flag": 2, - "validator_address": "2BC8D138F5DF6CAB4EB88B96DA66D9FA18EF543D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "xyldx8S8Xr4Qrgkodp7DSRH0JkaI8MX1FsTP0x3C1msJI1aqfjFUlmKL9KBm1cD3BD6kBS19L92bHt7sQHVVCA==" - }, - { - "block_id_flag": 2, - "validator_address": "2BED56C755A702194CEFCEDDE096FF4F93C3652B", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "JKasduScUqPxSendD7LeyIbaR5uslpbUcX+L/ZVyBqxLVIwqvAEDP2jayvUGvos5RboAm2FH1wbZKy7nhyk5CQ==" - }, - { - "block_id_flag": 2, - "validator_address": "2C5901D7C2308886511BE96C7D60426032B4FD26", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "CDdWpOxrzVXxKIO0lUGNdPZ4K67727ZvEsUm9ZSMNeIq2RxNkJVSFm0pv78qwq8+6TVStdcsU/V9mU6fc2IWBA==" - }, - { - "block_id_flag": 2, - "validator_address": "305ACD56F23E26BDE200C06825B4B0C90D6EF09E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "qxVoRri2FBtRZWkDnNdvMEgcoxtfKlNgnZW4bbE1fRc2MNCT5USsLOsh0eaeTvo6PLwaQhR7bvMpKnDIj8h9BQ==" - }, - { - "block_id_flag": 2, - "validator_address": "31B6C523836521A9896D96BA1B3D99571249CCC2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "+TydLR0pxybg+uZdhAFSFyJmh8GaCIzDQgGhx4YZqQ/dJNi61XraTwhRNHaxr1h8xlHi+an1ofBzrfnGV+WeAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "34167E39185F8B5E144BC73E9A54A65C58B5806B", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "kGVmylXFoTOki6ASMMm4883Tt02qSTbGXZVaVVhU8gw1HAcsoVkafUVOoSkvUR0iKD+s0TezJmQs7NUCMw7DBA==" - }, - { - "block_id_flag": 2, - "validator_address": "36F2C307B74BFA57300F1C7F8CC24180F86F2DB3", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "rEH5r7DSAbCwE+D9RaD5nSAOwyrmpnD7JNYV+FYU7ImXnXMPNFxREpJkdpi8JLtwhY32yWBrbOxNTL0pFLuXBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "3790F095C2C35C28804F243DF9F1D9702527987A", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "0cPDOcPs1igSVSM7I39guh4YymptDWlag5uHZjR7osk7EK3cAvVqrT6TzEvLDqCgI6HtFAhj7ANmQJX/SkcqAA==" - }, - { - "block_id_flag": 2, - "validator_address": "3AF9DFDB695038C1CDC08E6532D7259ED3CE6136", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "+7CfgoM+8v9It0o7lcx1ityGQp8NQ+TEgVTgGpFBiNZhsXUu2tgpalE+0njU99c1OPdKkKvZe2tivOstfDJnCA==" - }, - { - "block_id_flag": 2, - "validator_address": "3BBA3A4BCF6BD50DF93399D28CCD2C77EAF04DD6", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "1P4n/NLvdTPfe485YOGI8la8QzNr2soeO/SSFRPRIoJUmR09ykwEav3eXVD48/6w5ouVLVykXMhmRyo6PmBgDg==" - }, - { - "block_id_flag": 2, - "validator_address": "3DEA89BC6049093CCBB86AB1A26A7A89FDC0F170", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "iGfUGunfdG8XBqmrs0z8XpuezAd0bmAk7FO46iTGrKKaFPvKxEArdK98uMEL2gntyi6vv3B4qnLghblhHylTBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "4099E6362C41FD472955FF42D640ADC8382143BD", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "n09GWyxHExO+1yFQn1vQEjNdGXUeERvz2MegisjobFloD9TawSXA7AjEU3U91u/NLCExLFAiyuliVwCr1iNjBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "409BA2271966FD00E50CF30D68F02656C1BBEEEE", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "kCu+Qpx/2JmKmTReuQ/zxPSH4CPgfiP/FXkpQUaK7gZ9DoEab1ZOKYwfm3P4ucSH94FFOOjhfTM8iIbXj4puDw==" - }, - { - "block_id_flag": 2, - "validator_address": "411EF3D45200CD9F4AAEB41569C30095BE5B8352", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Nr67EaPeh0MCLLxZIw/NrPPTNDvjsyCgyOXOJf42ErEpjqVKANpn2twa+HzLTHEJh5tNTbXaZmITXSzySSzqBw==" - }, - { - "block_id_flag": 2, - "validator_address": "44CC86D5E237AC35EFAAD48B737F4CC56CDF9DE4", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "5/VR9DEjLRx3Cq+3winFhrs9Y5HAWhJ0TjfvZGOkY6vj3YFWxs67pYuaaZsOKjSrdiwDvpu0dVNjDi/H34JqBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "44D5B54C74D990CDFFBED82788E0DD3DA5DF91CB", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "BZxWzKFdoExRum1ZYmLut6IbKJ5Pd7I7qtv3H17gR+CQQdLvYSgTPmgh/gP//W/NhiQnENicEUiqPHEJubZVCw==" - }, - { - "block_id_flag": 2, - "validator_address": "44F6313731281FA393DC0BC3CED0F141974E6E80", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Yl/oQbfjobk6dnivpZpVCLtCz8om2/VeESJ4L8hTwx/22hFfOtNbg1nley9MUGlCjBgiS4r2gE++Rt8BJIL2DA==" - }, - { - "block_id_flag": 2, - "validator_address": "46D87DE55A2AD46C8BF375467C857D88F23E9B27", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "ps8oyoVt5SpS3QDusH1Eq/BD8JuxSFAe6AjNWPbzcOqop1kHSHy9LM+I38DWO5nz6eVpIJ7FyNK9ed2NYcOHDg==" - }, - { - "block_id_flag": 2, - "validator_address": "483B3ADB1C595B2C292FEE8C65C9F6EED884CA00", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Mh2FmiHshsi/pvOGItYYulZaFY3YelKmuF9DJ8xnqxqvOX8UE78/DJ1bCvdhNQY9zSBxwRtSPZuEQR+AdD0ICQ==" - }, - { - "block_id_flag": 2, - "validator_address": "4B66EE9E8B13C4494CFCB6D0F6A19F1B417E172E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "UWSlXc7l8AKrtrLRG+gCxvPFq8kPxact77Pm1WwEx3unyLBf3TbZWx8jgtWrV828GsE81z65RQzCNSaSj8+WAA==" - }, - { - "block_id_flag": 2, - "validator_address": "4B924BD542EF7E25F33D1DA71CC9611CE640E4E3", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "pgDSIUoE3v5ZPBUSkK4G7DiNsGDOxoZw51Z2IabKIBeAoF2dVoyM4vwumNNsZoedueC3HdrUe9fwKWlWsKh/DQ==" - }, - { - "block_id_flag": 2, - "validator_address": "50C24570B899B11034B1A8F51CAA91D479C555C6", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nYhJDMwICUhmMpJ5cwU3RkuIumrHiM5fIypRArb4MaoaNEoSr73epVEG0+ihHSSUVXUEp2pLyv5Pt2ZlFBF5Bg==" - }, - { - "block_id_flag": 2, - "validator_address": "53BF6EA4BB98D5CCB8081DDC2B6D80E790ED6091", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "cYjnFBRjnt7fpmHVwr3UiLZlSa9SNSQegRPeCJMSE5EOxacC/RUtIg0AD6JJB5R93RgK8it1WQGz1Ll5L8NSCw==" - }, - { - "block_id_flag": 2, - "validator_address": "549523D99B417B356A37882EA5BE22444BCACE49", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "hmhDRb1tD3q94JScRdBKPDsiN3S/fv70sUw3lc/uvr/jwoFFQKhUGdZ2r0JoK9M+J+N8kiKzJ45GBBT3yR0NAw==" - }, - { - "block_id_flag": 2, - "validator_address": "55B6E0B429C582D102A8C5E9D211FA07D2AA3DCB", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "VYKxIHSlDX1IRc40nyN20iOKUcUGWluO/A+OYaJoZVWhPUvVWI6hs5LI//ADctmLM+kr465XWAZXGo4JX9OnAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "56BA4B6BE15A47356AC20339BE1FDEDA2994E34E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "IJhJqCEBKcQFT3/hTlmf2pEIf4RAHIu+MvLsHzbp7p6TYa9lvU/g9lwKyovyqbVj74WLonuK7TtBObJamqAIDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "58086A4142ECDD35E8FE1753A6256B98D9661F0A", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "bvKum8lY1FNaDKl1ouuihIOd0KpZ7l5n46+Pnorb4EajZ3yN/yXlAtSaE4ByLLxgXJD+N/Z9wSC7aTxK+NBuDw==" - }, - { - "block_id_flag": 2, - "validator_address": "5E561B91BCF07518E0FD2E510C233D455B306856", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "zyTpdU37PyTSzqThDBlpWJ2SYD1NNFy+lUToZZHG8+AaHE6o49vu3P2EW8zpvZYqGumSNJcBH5l0e4bdTyqqCA==" - }, - { - "block_id_flag": 2, - "validator_address": "5EFB8BD4E6B0A67DE3E9C64E728B8C10614DFFC2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "ovS7GhSyx+55WONnfvEaNmZBq2PcE/WGny3XX0qNZPeLNWov5relIBecZ+v4BU4KhhXnq0WPb2Wzh5CWgph3Bg==" - }, - { - "block_id_flag": 2, - "validator_address": "5F19CEF4820053AA8787D93C86B7CB39D7ABE40D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "fKhVpvEiw3V0Fnl2VajSNGkaCzEWWYJTO0PhB+8zIhjxhKZgh37Xs4Cgt3aZB4bNtmcWl5cXzQDRNx/Ll7BsAg==" - }, - { - "block_id_flag": 2, - "validator_address": "5F8C09291BC721346A7571FAA7936C33D2DBA44F", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "6CS98TUOcFSj38uM1psXejmgUzcunriDglyXomf5BPZAQxuNbIVblPYPGZy4KhVBTlr6MSvqnBr3I9Fbmw2iCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "631F83C22D4F46F72D732665F61630B408F216F2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "GfQwaM1DLt0fXSSkUnVY+tC9xNzYSImD8W7ybpI7pWe8p1EMXeICVZFd0PI/Ix1xSjrYzKMBeZL4gLrJEhbcDw==" - }, - { - "block_id_flag": 2, - "validator_address": "63D15DA922FD4DD88FDE33D9B6C80675D0BDEEF5", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "VuO1fGI0iYvWJgDsBpR7iVMEtvWjFnBcXRN87Kf0QbDQJFol0Fc3WHYg5gvLQ5BD6XBNnxaCZbossWM4bMfAAw==" - }, - { - "block_id_flag": 2, - "validator_address": "6548BDD3B9F3B8C243F3AC094C2C58332E7D32DC", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "yft8K53pUGEwUx4QJaOhbX6dZ28A3e2cCg/tkf9KVa4g3GjPAK/U4t2tNBiCpCz43V0UJwRtpTVgG6lITnx5Dw==" - }, - { - "block_id_flag": 2, - "validator_address": "66CECDE4581CDA058A1D708D183E606B43274946", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "JnfNQZ9B8Awhgd/SVw8qKycTON3PreDBZMEvNllwT8XXKBvxetRgpE4wUqgSdgnVuzkzuIlAdv1qZWsRgDB4AQ==" - }, - { - "block_id_flag": 2, - "validator_address": "6BA54EAE4890CB52A69F3F520524C5602442A857", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "xUfON9tQUMFLfooJCq3Sue9JUUOdAyvud0YQccnByI7zH6m4bWGO7FDa0Ngds9iUz6GEbhMhwoKx6KBYvwZeBw==" - }, - { - "block_id_flag": 2, - "validator_address": "71129EE0478B5EE8366C6D9E9465C494CA1063B9", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "pg+iIgu3HsJ2xAb0wvTdBsbscEGjOPf1R3opkS+xGaGXIgCQDPWe1snn4QUKZUZZfMe5nCuaozjSQyzNhl9xDw==" - }, - { - "block_id_flag": 2, - "validator_address": "71B73AC10644A4E0172BBA6EEFFFADE9729BA17A", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "RSUfsb/Hq1anamQENOjxeUnySG0YEbVlrHIOimp+/HcWtmzglOdSghDHJ+TNcw7BHGUJcdEAfJZ+bUKR3oDrCw==" - }, - { - "block_id_flag": 2, - "validator_address": "75726122C13922D71DBDBBC4ADB57AC147832914", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "0v40XVV7eaJABAdW3Uix5gUzPh3BylJYGT9nb3Ppsedl390c1lVOtHIyftXntf0di1s3H9iB1lbSfI2+F6atBw==" - }, - { - "block_id_flag": 2, - "validator_address": "75A48BE1310775AFC556D46EA2234EBA3BF388E5", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "uYUY6CnGP81vcDXr6Agdq5sgx1SuUOHnQg0CAlJ2tOL18NgB+zFeAhzsr+hN1nd8G0uT+NBFWPEjBRQNPZ9JAw==" - }, - { - "block_id_flag": 2, - "validator_address": "762408A51C56E050E55B4189D8D76709343F14DE", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "i561Ml3dMUaPhCiYpww+QgG2rdSqoOgR93/NpvxGk7wZvB3jDXpy8bFz+NuVMyW+RMhXifPfWtDWY1qJ2CRlAw==" - }, - { - "block_id_flag": 2, - "validator_address": "786EA666F2382583671F77A1846FC4ABDF9F2E52", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "rMZeXHVqwhxsO742OhL7s+dlbzA2HyPUan2qtDrKVp7DFx1jXr2g3dpak9TUSqv2wPxztdQWuNojI7Ue1TQQBw==" - }, - { - "block_id_flag": 2, - "validator_address": "787157EB0208852323804C28B3887F756F823A6A", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "hEQXbNp9N7T/J9uObK9tkq+kAObT7qvhLyMNdBiuGSuDtjh94eh374cOlipLOzYx+gCqiRQH5wzeW+0MPlzZAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "7B7F7BA0384E0EE165063F9FCC41204F290A50DF", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "aLr8RPvMTvlaWPQBX2PmPtZ1TSjik6yAguf0AI6GhyNb5KXWGmmT+yn9/8fZLGATpbI5/ZNmxEyyMs5GMyMABw==" - }, - { - "block_id_flag": 2, - "validator_address": "7C779C769D5F8173002F473CC719305FE8FC9437", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "7uhj/m0IoNWWIwQUj/JJP29q3G5gMhN5oI9j+wCiU/7wmu22LimRntknCcdBv/WM5q4uOl9G/KH+zY+MeM9DDA==" - }, - { - "block_id_flag": 2, - "validator_address": "7F3348BC852CED5B77DD8B279462E7EFDF078001", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "b5fWdREP2fVKbjFL3Ve2nSo9enhoINmV0o25VqK8GhYnFkMuRjR9ACspZco0OscHyAlZMrsmQ/WJTjee/q8cBg==" - }, - { - "block_id_flag": 2, - "validator_address": "7FCEE146134268E411753C6EA9C62FF36C7DB6D6", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "HxWHpr1/4h01oLqZTppRhMhAfgLNlauaHJF9Ttv2D8egXqP7Qi/V/Uko8+4EoxIgdmR7bsc9xKOojH2qPPJlBA==" - }, - { - "block_id_flag": 2, - "validator_address": "80204F6D505D5E420C935E3A15F401A19D3AD088", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "ezUiAck0EUwnndN7t4fEG1J8+O7vn/w5F2gIshfxbwrH6VZ07uaSlX8HYEqj4UuJ6cRJPHV8SAoClnYxNdM6AA==" - }, - { - "block_id_flag": 2, - "validator_address": "8244C94F5AC0A5C208672AF54B115715E27940AC", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Kep8ljVtl60lBfNbwQqqfwdoSEfwAitpEKALgzM9/K1c2MnSv026ZFdFdUdSVJMuR3WBiFW7Hiqma2gJlfJxDg==" - }, - { - "block_id_flag": 2, - "validator_address": "833CC4C5980DF7FFBED4F73EA347B44E8B985374", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "GJIuhojRELRlKUQkMYdPJEr2cSOHeqbCfbYR1qYnL2hSWCB1yqM+H397p6zKigA+/9sfT5ya96Ziy4bLq0ggCg==" - }, - { - "block_id_flag": 2, - "validator_address": "83DCA4191E49F62153DE50F18025F8876EA19BA3", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "L6b3dcpThKxtImI7qxUgUg+B2JVTpy//iJ8V05939lR3dGlHIIydEWi0AxGjS3Qxpj31XO+EE0ZzTowA8EKoBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "85458A404CE4B1798A67AB9BB83582C762BFC9AC", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Y+fbGuoxEEbywBe5MeP6w+KJXWKQKMTk4L1V/W+7ryo1SJczS6sGBtFv2n8U+39xJxwB8IPaZU08zBlFuiF7AQ==" - }, - { - "block_id_flag": 2, - "validator_address": "861227E76A82CAA51510E7E50E929DD7F0620632", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nntfZ5cAXnLbr78BElhwZ3viuMScRGoMjc3xQaYxnoHaZ44ZB6DgP9GrKcUmeqHHHhBnm9ehgEJ2zKEgPhhMCA==" - }, - { - "block_id_flag": 2, - "validator_address": "88BE7AF676F988584BDDDFAA7875D96C569046DA", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "HjxGLqcQP8LGWgCDeMkIPqrB9GjXG1kjMDay55Fu6JeXxrLdta1TCnuyPJ9QefagYpEGiX/vmoqKzCeafWhdCA==" - }, - { - "block_id_flag": 2, - "validator_address": "88CF3ED94C8FB8772CE13EB668E5A43C2B4105F2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "proBfdcPc5EbSL+qNZ9kIQig4BSdbJ4qaIjzMBDKn+fKd6l4uBo1e5aZtkcRrnwgIQcbP3SMiwLy8y1AmdDfCw==" - }, - { - "block_id_flag": 2, - "validator_address": "8E497CEB9698C545DD43A5D054DD19067DAED154", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "FFQnXTrxP7zOjNMW24tnwSsXRW7kW49zpzNcjGfNsElKgEkuyYVAoWdaSVzGwLUDcvqlAYeZbTjHR/e8DUOCAA==" - }, - { - "block_id_flag": 2, - "validator_address": "901C4F75F152494B605AD385A32697B47E542874", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "UhOyzcu5Vovd8ikULNmEWz2vI0IUxZnawebKPFZJp3xpnjFeNNmy3uZv/BoY14i9+jM5b9Q/z+Jgpme8zzuoCw==" - }, - { - "block_id_flag": 2, - "validator_address": "9029713BF8CF5E0796CF1824200264B58A54A831", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "X1omQoYmrAoDYFZ6EUkgEe4wh9OcI0BaG2PlVgbu4d4oMpSBbqgdsRJ6jv/tCLYRFlfu3xOr076dBEnSz/pkDw==" - }, - { - "block_id_flag": 2, - "validator_address": "90F696DF160C8DF08C2DBF439452CB559230FD52", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "W6fAaNmCUyb9MOHjNoTAsPu7fNRXEESa/E4AGcPqKWwlaEvoRi9C4dX4Hg/UeXDEtgWugvVPgGoV9jItZXmlDg==" - }, - { - "block_id_flag": 2, - "validator_address": "96C8B06B9A84DD50905374158D5874C360F0E436", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "GRb2qEfzj2SGWCEKeERO0eS+h6zg9xKcIAhXyc2PVBz0NsABXeeIhsIy9emAe4NC5T11chnjqWwmf97iGMCiAA==" - }, - { - "block_id_flag": 2, - "validator_address": "9887FE69CDF1A3B7E2B3587506A7DE299DB96841", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "UHXanvlPViRTEthB7NE4W5PWnzMNEEdkgi324c4z4kb+3M8CatFviG1YdVOawZk4vu0MTwiominhEUb9HHZQAg==" - }, - { - "block_id_flag": 2, - "validator_address": "9DD616591929A0821368A45635B71A55522F82C7", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "FsKPp5L+cM5tUE9l53l+MuiM8ZRQju4ttngjLy1Bq6qWI3Uo+DIHaJTbQ3LtJtWOqxeV4Ehjy4/efr9xQh3tDw==" - }, - { - "block_id_flag": 2, - "validator_address": "9ED26D8435540AA635478C769A328CFDB97A8518", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "2b6l05CFUzihSFlgUS/OTj7OFJgn3d3xoPqQ8KrqqMUVgQlnkr5HQxNr32NaW7URH4Wui5/wCwypy58cwFg7DQ==" - }, - { - "block_id_flag": 2, - "validator_address": "9F0D30B162AEF95F0B38488C47902BA4CEA6E6EA", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "me3D+JX8LwNkAXmSWbEgHNhEDHpMPoubhY96BK18hOMa1CLDhRhKF0+v/wGkHNfu9iys78HkxKLRciRm90DyAA==" - }, - { - "block_id_flag": 2, - "validator_address": "9F445AE036B207D2DE04D0E32313A5A4B715AE85", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "bu2o4Kb5oCDrFjv1lfqy4AVBR4WWx0yVcPGUUTm6lV5T/rzDkvmpHQ4i+p+6LxtVjLpRAUvSywnnxJF6XOUUAg==" - }, - { - "block_id_flag": 2, - "validator_address": "9FDCD33F13D8106E469212E112E37E3E48A09101", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "23RXT2a9GUe6iF0N3I/2d6Atg2U+XAwPG4oU5S7iFs8XnLnAZ3nVpqZhgYNRphVI28PxPcLahVnb9XwrOa9hBA==" - }, - { - "block_id_flag": 2, - "validator_address": "A37F40DF55197B9B24C3D9938A8AA76CCBB80BF3", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "WjKWhTOAmGEtwqLFu5sVH0KShfYq0Y+Uq7alaUszpb2diHvl17YBBLlMI8r3shogd5YvwCB4dC3Hob9bnaqJAg==" - }, - { - "block_id_flag": 2, - "validator_address": "A3E3EF26B675F46AB3B701A2E744BEB03F4A7F69", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "TscB9Tzf9gdesUs+aZ3rspsZe36vFfY3QvKC9vrFYIhdzlHlNg8c7Yp+GdA5enqroHNlvrYVOR3vuzewAZScCA==" - }, - { - "block_id_flag": 2, - "validator_address": "A54EF86C44B3F5071191A0144CCADB92118B2230", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "NPR2HYBBCq4lXw3WY27pr85T8fYdw7eJjWQCSkMFzRL9jO8q7tzqtadTbDtj33I/CG0H/jMhiJy5zWDgWURxDg==" - }, - { - "block_id_flag": 2, - "validator_address": "A92BBF76E98907998C193A4CCACC200A3CC75E30", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "pLo2pvNyExHR5FWY7daGvTEOewVHCygvZ1a9fdYItg83lUNKFUcugYDVqbvuFUKGsnxC2xLMQFvWZjiL+8c7DQ==" - }, - { - "block_id_flag": 2, - "validator_address": "AF4B21D9AC2387443EE4B05EE09F54D846A3BE6A", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "rkRPMKgtHLJAHc8EEBaiHdy51lSX+kcacP/qHXbGLYnSwFoCqsRCaeXAzIw+tKOCRzpfaS38vP2jum+2JfRzAg==" - }, - { - "block_id_flag": 2, - "validator_address": "AFA48E19711A6EAADF676EB680C82904FB1AC16B", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "A0tCf/agNXCHtEbPme0S19WuvUBKrfSeWJwhPqE7x71IsnhyVRCf/V3fwN5oyiq70KWS9Z+L4qXYDfXBUdx7Bg==" - }, - { - "block_id_flag": 2, - "validator_address": "B0AA5BFC7B1E2F324C4B46C4AA6083EE4ACF9B62", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "MQec/inQdU5bd7cW3wDkQKrm6buLtmJ1AhxaxU16PHv8ByFkK1UKzrrO6UkrcJwS41Tc3OG2aBNtM1Pf+Hh7CA==" - }, - { - "block_id_flag": 2, - "validator_address": "B46DF4B1C3BC26C37D5FDD5B911FCCD8244857DE", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "z2T8NjPWr29qpoAu6D2t+Rj9I5tAQCfmyp8biKFyLnoSdIHyF297hev3YgMQE2sJyUuVSYzHiHFg82LwMkURBg==" - }, - { - "block_id_flag": 2, - "validator_address": "B62E68DA52B0400EBDFA5401E2B77265A4ACB2B8", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "mCtKGbACAr55SJ6gszAx4wfefbozucbPCF/ZV8WOY+6GfEuzFpceD7zmxhv8TM2Famh4ldNo3dX2dvbCR8tlBg==" - }, - { - "block_id_flag": 2, - "validator_address": "B642D822FEBBA7990B9F02D4AF86670CAC27CA68", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "DWVcSL9c+WQV6s1aNjlsGCYg+8XYoQRN0RJrxEheCqaBIlJoTvSNTLi0NhdaTdLATHJ+3Lk2wBhm7np9TZWPBg==" - }, - { - "block_id_flag": 2, - "validator_address": "BB5A8EECC92ED313C2C67942320E781AF7ED7268", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "MnegX4JMn1XIzfw/a5l6MDVjrtks0+bSl0C7WTvAd0fZu4ISA0B2hSvxxrTR0TFrypomRxTlKNI5NY1ilqEODQ==" - }, - { - "block_id_flag": 2, - "validator_address": "BDF67CA82B7046E57B6B4982039B6D3FF901C9A7", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "zaSSNuYQWlEFsDl/VAJu9JbTEsxyEN2HHiqxITWeoxVb0Fq+LW3nYJr9GjRvWuzpSEvCBbfNmD4epuOiIxFKDw==" - }, - { - "block_id_flag": 2, - "validator_address": "C015E371B54F239FE683B7148A044070D7576977", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "GvygZXdbqxKgevB/ZaX/p8urVgRLziL+vWot9XnvYhLljbrjWLCDFxozUJxcMz3Qvs+YRRTdEdnLis5+6EcODw==" - }, - { - "block_id_flag": 2, - "validator_address": "C230CA072E37B073F97418CE158F691C99F79627", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "WtUPwsLLKkTVIoOBZZ9KrPyX16xkGIqCMtrZeDOTlmkdYA+V3Iriu1AVcO8NnjpqoiPVbmqSLGs4GxsG60EXCg==" - }, - { - "block_id_flag": 2, - "validator_address": "C37AE615063CA6060879A91AC426BE9426CBE419", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "NYBl6sE2aon56cYszleSMM3IB/BQWO+q/+C0YmAjV39LjrW1nhsyYK621tcJqfD8d8jQnPPYqPGSKFVAIPaRBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "C3F3E4A5624731E535149A43B32D9043B9520EE5", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "VudFENklBHMgA7B3DlY2etZSLFn9PKKyYdeEIecrOzAZrx3tE39Jh/hmvy34sKTvIgoe9gB/zZ/pbnaQGH4UAA==" - }, - { - "block_id_flag": 2, - "validator_address": "C4C16B56F41459D7A5AD3FB2AA364244EDB48036", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "GN9pcIl6GyU+vU8+KIjieme/DIj3EZBDf0PMBbZ5CL5iBsqG2rLPyKu6CSAkJf3493F/Z+zPolmH43ASHW/pAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "C66661B9D74DD31FAABAE5E17F5C73E04AFBF839", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "oT9v2Z1HC77ee643Okp0p99CSWcGB1uQFezQXJoqnvzb7IcCO2BhfDSgv2lNfl5OevvDtI4h8Vay9nTtFY7eDA==" - }, - { - "block_id_flag": 2, - "validator_address": "CCDB30DE6322925BA7A18ABDE21F8C0B1CDC6F30", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Y/jvT3GWjTc97EuFdxtVDwAOv3GhK3R6C5HhAsxKC+PXCmUa74CgavsA/4TDbtL8E4BXvBbwKPTzvKfhsWzqBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "CFFE7BA7EDA642BA98DE8605377965D441310A2E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "7SjB/extnH2Xm4y6AgFbhVMixtcS1JkfXW1627/zgaoqnLILcb//PSvuYSqAcqXG6aoJPmKta9ePpXRggL3YAA==" - }, - { - "block_id_flag": 2, - "validator_address": "D472E98EBC0AFBE1712E59B33935529CFE118A77", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "HDoPT3+P+QCEm7h8aMQHpnbY9JEBAXzmUYKwXR55m+SfvWiJbFUPWo2PytRRBad+UrUlfMMhlSN9Vct4A+WwAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "DA659B0EC148C5EDCB150E4C5F0F73731A7FE1D5", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "c4ZONdFkVp/n48OyJFS33lLhleNmZ/uOWEm0hDJR0zaftQyfgvYFnqEeOjntCamGlykdTp9fvbl2SxXR6jdsDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "DE1C088A2B107F6351DC857928568631D0EC4230", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "n3smO9E6VSxqbggeHIyvGDHAX2Y5ucJNPe1pDr9MPO5aMDn/3UxH6ir0SRqoEyHQ7t7/RJi57ECthapWtUBeAg==" - }, - { - "block_id_flag": 2, - "validator_address": "DECAE33B2A5556A877A3E43471988E21E9ACEDC5", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "VR29hziJ4yO4xUkgHgNlnRDD3q4LgWrN1LpCZH+3LXAvrss1upW1L6JJNbTd2laJR9ArLPlz2OLBIohD6ZW8Ag==" - }, - { - "block_id_flag": 2, - "validator_address": "DF600C1EEBA286C887D291321D08DF5DB781B41E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "zr3BXS+0k26PwY/BPfsBKep867/R59/BwGZiV63tQUJTr8b61sWlLJbpeg5vA3+6a7uMvM57/AEi4OAxSG7RBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "DF84994D8ADA8BD8018F9B1440F0CC58B6968401", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "vs8//az89NIROB4fW3qSvj6YLuh0x9BipCmXdGkXO01MOBe3329benxCS4+b17ABc/9b4zBsFJ+FofEUUBcOBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "DFC0D44126E79B374329A8D8F65B7A6361DE3922", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "jt7JLmJ6kR4f11S4SH0hfSgoc4nJhb+MptSFdsjNRaTQ+/01xz0z1wtyvU/ptFih2W5ShXcTWJyPveskcVO0AQ==" - }, - { - "block_id_flag": 2, - "validator_address": "E29C235109215DB8F7612C0F2096932B9D70567E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "bs/8DjMnZTPXEZJ1Qx18aZ70nLHou5DsUDEwYqDIae4HCUBnf1S39rnDYnbm7Sof6XxgzwBzgXQ+yUsm0HKRAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "EAA1B94BF621EA5F52C69B2ADD3C4E93A1D23C4A", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "F9HG8vrcjF1VzGuyUDTBlLQwAHAVKB+PH0SqByCyXNIEUOMwWjdN82ylqNs07inAMA3u4JtAhgOg71p+riCpAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "EAE4C8E1ED2E20F3ECE734F76984E7731D49F914", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "4O/J/ryN0fNzDzYFyTrArKSUlFXwvRaCxyNJw7/OgoWn9gm7g9YuOlR+kC816bigDbwdRoCb171lFyOQ23arBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "ECA31C24BA79E6165B5471D43D10AC8547354F9C", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "IOsxnn9gavIW22YCGYZ+ho9LXxV+X6okdBM8Qip8l+nuyBnK8cqKpPuQohb1T2SXzw6wGgF+p0tF8eMXjyLxCw==" - }, - { - "block_id_flag": 2, - "validator_address": "EDE6C887A1ADB6745DC304310B9A539D8A236AA1", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "OegMsG0SYrWwGSNnMPM9RPryO0/usuaVHBwuDkkZjiWJ9Br/bepNtBUe5wD9liItn8eQpGMWh/EDGVT/3KL1DA==" - }, - { - "block_id_flag": 2, - "validator_address": "EEF11EA67706C81E43FF769CF15C842E2C6FCDCE", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "iz4JL5HbyF8IP0+Nslm7F6MONSl+iCVlYIvxVZ57eO6FaLLcYBWENXWKYNyNWBq91HAGLIOv+cWefM5UJ4yfAw==" - }, - { - "block_id_flag": 2, - "validator_address": "F02A2853F65D73A334DFA636A82A2B308D6DC92A", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "D9z0LZxa6hdj4XNgEhUzXuKFey9NvWdqaVx5DZPYhmmdqXlEWTsRBsXlQgsJSdSpnItMAfmo6Y7PV+FRaHWsCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "F173A1AF07F7FC6820544AC1C6B214233492262A", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "avBBAgjQAOhwwIa8JDil6cZhsQqgZ2qevcmsfu00f7rJK1uEWZmAxyhXTb+sOAouT3ntxf+Vl86Na0QX+lvYCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "F25CB645995131C7AF5097427CE9F47990A12D9C", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "NxnGZRCrteXo0RFnhZd2PntDbYlZYeZ4S8IxkzYf0hRKv1w2J+B7ca/HcanCmiBSNh5QVrsw0Jv3dRMCyztmBg==" - }, - { - "block_id_flag": 2, - "validator_address": "F4053AAFEC0249F8D3D55C9E197657FA9B57184D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "xbX68UvH/etJq7I9o/bHAEqIyA81X1pgQm6/YhzROvWgGpktw5s31WTqcEqDusm+HX7iRFzv0mGDtauLjFvDDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "F95B539513FEDCBD12720D111F339280A222B64D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "XVHviLc8NVy2iZOLLeiyQv6eD7TjbwRRhM8PtmdcXsw0seh/JG1zNOC53gFpFQGtNp734lse864yGTbrD6VZDw==" - }, - { - "block_id_flag": 2, - "validator_address": "FC636C36924D225C09944E11CBE6B16882A0359C", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "gxypstH/mz0f3KE0C3tLL+GXJ0CwhBVSG66b1xsjAUfvNLNrU5/o747/N+eo2kfovIBe4Cd9R+WadiS2o9hnCA==" - }, - { - "block_id_flag": 2, - "validator_address": "FCCD710DFE0DC5AEB8ABC6A20031EC0E149F458E", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "md9e5I7U5Xq3wTpTgJxlheGNtNTyXxVOM7UcYijs/jWDtvYsVpxw1t7DyTEQgiRT8YO1eXCss3Oxe3quXNIgBw==" - }, - { - "block_id_flag": 2, - "validator_address": "FEE43DA03FE7782A458938545578AFC11DAEC071", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "U7kCpmg91cN6KxxJKhFDUGT2Q0VeRa6C97/mfuBitdxMD8N5IomUaqL9Qmm5fu/tn3m9weIMkMnnkpqaDBxQCA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-6300" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-6300" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XCK6BWW7PWfsMof+x3lYRaNKbtP9J2WoOUztl9TAumA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "0859D2467F0DA63744B220E6E270DD3F0EEAC10E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "I44Rs7aDNyhp+m0Tx8v5h5+PadBk0hrnGRxjjRcUN1M=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "0D7350841ACB4A53C7717C7E5776A5E0DB6D596E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "x0lc+iqSimWb7E5qjqGjhhcGfHvInloqPqcKeFs94Lo=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "0EC358ED84E4F9088BB57617024D49E834322B54", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/ruq8Sh5Uw9wfjlgz7365lP3V4UKMHijoZl+d3I76Bc=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "0F7E62DD0AB86CB03DA87EB9969B558AFE04CC6B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xsPsE8CiTwD9ZF1hVyOC3Pbucfk3pXhhA0T7OK/epNg=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "104776A7532559122F43A5763A13FA7E747AA44C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "17lBalGeyg7iPCeZZ5qqQo0IG10IqHdoejLCdRxwI3w=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "16E8EE7E867E20343ED67A83386B798BBC8CB7EA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "M0PtCXbgOaR3ldg6Wcpro1dnJiF86c2HwuG0lop+vhg=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "17017FDB07BD7604A356325D499FF1CD9965CD00", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "i89m18+VO3HWfYsh9uPTmGpFrJFNzauYrxqFHOY/NKE=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "19FF9F7C347FCC6100DABC66AE8D3E2294A145BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "rn5HJirSOlHMYWhuq9mMWvNOdp07fsYbp89nzIW/5Cc=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "1B6D50537048EE35C2F43BCF284B59CFCFAA2F91", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "l9nBQa9NVbrdBUi1x06afmoYnZ+GaeVWWfMc2rruNLA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "1DC38F15CC04F552E1677D405EDCB2AF8610A20E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "4puyaJfGWwrHyu2kuiZy/BvPdwIR8yBNSZXKAGJ2/jE=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "2022C00AE81BE3A15F9C64DAD16071AC4C78DD05", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fm5HuWZCIGo+n78q9EBp6ooMRoky6mmB48oQ3SkAvM4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "22A34A49E778B1F2324C501831F1B41D5CE2FD43", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "JSWsW1fQnAlWzK8Odm0OMhNj4p2ImsJmGEptlDPeqrU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "276DE96119FBBE4538214B94C62BDD2647B1E2E5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "U9bh0FPYB709KXVlJ4XAtHpCblL98lpatZZxDHtwPs0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "2BC8D138F5DF6CAB4EB88B96DA66D9FA18EF543D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "UP3UAgPsub6BAlmZ2gG6PtLNyjO/5LdzS4jYSSoTAiE=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "2BED56C755A702194CEFCEDDE096FF4F93C3652B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZNDcajXkY4bRtEBAmUAlx2d0HruUQWBS5HmQI0wwtBY=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "2C5901D7C2308886511BE96C7D60426032B4FD26", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hyG2JJlVjjWahm0WejWZng4Ril4gDMj3hXofQFTj+7A=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "305ACD56F23E26BDE200C06825B4B0C90D6EF09E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ck5ovdxs5unS0mvbGqalrir/gPPmSiAS/p8j2DCrxl4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "31B6C523836521A9896D96BA1B3D99571249CCC2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3MmFrfgiVg7r0j6pWy72d71qdmrr4VX8XZf54zRkOlA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "34167E39185F8B5E144BC73E9A54A65C58B5806B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fmYSCGXNmzqPVBqDZe/+2QCbXsrY8LJ4w3sIs25Rai0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "36F2C307B74BFA57300F1C7F8CC24180F86F2DB3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hxpKGTEPS46kLDoesT+WpdY/CcilcK8dtkPjWshPF9M=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "3790F095C2C35C28804F243DF9F1D9702527987A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "n4sqH4bqJSkoH9DOe/GYJJVAIX/j5Lj1QbDdi6tbUxE=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "3AF9DFDB695038C1CDC08E6532D7259ED3CE6136", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0RcGmAScpJvvMpnT+kzEfSllGQrNYvW7TTS4nRKeBIU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "3BBA3A4BCF6BD50DF93399D28CCD2C77EAF04DD6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "o7wzwfrjCiUUr7fjHb2vAmtN4FOvAWw2HB3J27rZ7uc=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "3DEA89BC6049093CCBB86AB1A26A7A89FDC0F170", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "8dIzhTOrl5C6Fie/BsyJ0jusfhuHmuIAj0PmurcSzTg=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "4099E6362C41FD472955FF42D640ADC8382143BD", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "bi9agQoC0nPb8ETaTbB7GtTTJWJ4Ac7+G1aIe3cpnn4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "409BA2271966FD00E50CF30D68F02656C1BBEEEE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "d7aLXaaYAOzSm7O/tXzmpFkAMIJoSbtLNmp5YRn7yPU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "411EF3D45200CD9F4AAEB41569C30095BE5B8352", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lidiSfq+SqGm+rrnUOTgeAdEVXSR7eI3nSRBSvtknxU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "44CC86D5E237AC35EFAAD48B737F4CC56CDF9DE4", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/kNzF1fajUfYDEO6YfnJzFR3FwFdM4vhIz6EgGaUX/c=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "44D5B54C74D990CDFFBED82788E0DD3DA5DF91CB", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "qzjHwG+dwCMXoBUj+BNJD9Re3s+UDUGP6lGX99qK8go=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "44F6313731281FA393DC0BC3CED0F141974E6E80", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "UzLjo4moq6iEE/t/OvZu0eyPRyEawT9KUIuBv903eDo=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "46D87DE55A2AD46C8BF375467C857D88F23E9B27", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "63/IWqNHDYYopzqHERVG7xlzpVAI1JpISqVXrpww9Yw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "483B3ADB1C595B2C292FEE8C65C9F6EED884CA00", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zZxuCLwHjbYyT0AGpAuRu6iFTqtrhr9A7aLYCRhRxXU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "4B66EE9E8B13C4494CFCB6D0F6A19F1B417E172E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lYcfeQrV/km1K1Is/Sqt2UOpITEaTB1C+Ak8gB1TZbg=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "4B924BD542EF7E25F33D1DA71CC9611CE640E4E3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "A05Mf3pnWpQMeWutGgI8bh22Bd6B+EiCkuwW7jWsOgw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "50C24570B899B11034B1A8F51CAA91D479C555C6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "znqmCvYTlA1RFIZBAzLRvT54efnS3EVmZ05ZrbFWZpI=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "53BF6EA4BB98D5CCB8081DDC2B6D80E790ED6091", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zv8gefGS9GKaAsVYQHh9y+xkw5sgBWP8gk1HGbYYRy4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "549523D99B417B356A37882EA5BE22444BCACE49", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KSrXAAa3As5ORLjMCeXLfxjqwsvOSAvYIljFGbhf3B4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "55B6E0B429C582D102A8C5E9D211FA07D2AA3DCB", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ppOdDZrQqjxtBvOifnSuQ4DzZ/w22q7lNE9xrYIIfS4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "56BA4B6BE15A47356AC20339BE1FDEDA2994E34E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "1qM9CJwyJQJGOIdWAozNaTs9KALlX0gnDDQUwcZJi5c=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "58086A4142ECDD35E8FE1753A6256B98D9661F0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Uby9JGpxx5WKUUfJQulMBb2qVUphJobqHEN86zMpFFA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "5E561B91BCF07518E0FD2E510C233D455B306856", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "NwPY9cymnZc1Lxb2DUZdW7PMRhBh7lQSGdVAgVZeDZ8=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "5EFB8BD4E6B0A67DE3E9C64E728B8C10614DFFC2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "eoBz3MZy5yLeSkJocxPobWDiU7akUc307R3zVoGUr+Y=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "5F19CEF4820053AA8787D93C86B7CB39D7ABE40D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZEpB4tm+ml9BJ69RyM1F6yC6KWpxciBJe/cZ/6NUldg=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "5F8C09291BC721346A7571FAA7936C33D2DBA44F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "i8iVTRxNhSfhxIZcuI4ppye3M47DLpOY0NVn1f4mUo4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "631F83C22D4F46F72D732665F61630B408F216F2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "RmvubhoqFcTLJPKuc9NQeI30RqYDlXu/YJaSmKWcThc=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "63D15DA922FD4DD88FDE33D9B6C80675D0BDEEF5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "gN338koMV+bz7fzauWSqGhJGBDPIUsjhj0oQKHdv5ww=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "6548BDD3B9F3B8C243F3AC094C2C58332E7D32DC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vPvGiLV/Mjtd2UgsImjV5TMxaUBLt5b82T6OwJfpLeA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "66CECDE4581CDA058A1D708D183E606B43274946", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xKTou5rj6JK5Riiq+LXVNl2AGEHB3hIaTj6JklrcenU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "6BA54EAE4890CB52A69F3F520524C5602442A857", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "jIPBmdnBx/aLRCmgOheKG6mN+ls1asRVn1ypQDeBVDQ=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "71129EE0478B5EE8366C6D9E9465C494CA1063B9", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TucFlevTMXVH8YX3LvP/Y0cq3u5DJ6kqfalnl01unKY=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "71B73AC10644A4E0172BBA6EEFFFADE9729BA17A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "9C+vwXG+jDElowp7hd0VtZMIM0QGs9hSpAjHatJoavs=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "75726122C13922D71DBDBBC4ADB57AC147832914", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zQe0pS1HdvVtcg1Hb0WfqhNBl9jpuJggDfSyKCa+0HU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "75A48BE1310775AFC556D46EA2234EBA3BF388E5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "z/Yxy+HxU07cB8fuAZgow4FhJZcm3tqkRdyj1+3ACv4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "762408A51C56E050E55B4189D8D76709343F14DE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ie4HhfootkQ2IugMlhqvkAQZUNCIKdNo9wxk49zXvZs=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "786EA666F2382583671F77A1846FC4ABDF9F2E52", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zplQxvJiEbjx+1PToTwDMnjc8ZGPikHoY6N1BzoMz1w=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "787157EB0208852323804C28B3887F756F823A6A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "iHjXDCZGLeGqbpe3Sr/p2I6YzhkwcrkGqxLxjLtae7o=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "7B7F7BA0384E0EE165063F9FCC41204F290A50DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "wvoROLitucFfBKlKtVbgdR91B/s6C2elUNBSB7jJ3NQ=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "7C779C769D5F8173002F473CC719305FE8FC9437", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vXTTO5/GcGP5+kcSbqteHENtjs6vLj5O8VWK7rEQoOg=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "7F3348BC852CED5B77DD8B279462E7EFDF078001", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "qz5EHLa8J5Qxw6DaSMSdVDY+adVxK8uy79HEnwSxT2g=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "7FCEE146134268E411753C6EA9C62FF36C7DB6D6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "MYRRf38BXVkdiGuTZ2OH4Ghhg0IxDo/4+bLyvks4/sQ=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "80204F6D505D5E420C935E3A15F401A19D3AD088", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "8lU058pusC1yBovi3twpc0cI4Zti6VyNzw9Hq4IpQzA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "8244C94F5AC0A5C208672AF54B115715E27940AC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/Bs8sf+d4K8uztlGCstc5NORiQy8EyfTCY9fzTJCQ4U=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "833CC4C5980DF7FFBED4F73EA347B44E8B985374", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kPyMxDMWgW4nGHXpClW4HogSwIZbt2oM9YJRxcUYROw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "83DCA4191E49F62153DE50F18025F8876EA19BA3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "rKZ9HIx7FEjxFIxfUstXXg4Cml7gU7H/WAbqEz9Ew9Q=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "85458A404CE4B1798A67AB9BB83582C762BFC9AC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "mSM58wILhLLDLDEaE+XZOE4UlSrstmkHgGuBiuffjEQ=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "861227E76A82CAA51510E7E50E929DD7F0620632", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "EYIEcSVx43luraoix32LPZVLAcgKQVWMh/aGbupnCWU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "88BE7AF676F988584BDDDFAA7875D96C569046DA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "2GOtwtXCIt3hoae7hAfHiih+zuojKrKPpCkoCDzdgyY=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "88CF3ED94C8FB8772CE13EB668E5A43C2B4105F2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "7YRNZJYRqTw3nsF9bOLoWFF0JdXyklQi8DZ13uXAg5s=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "8E497CEB9698C545DD43A5D054DD19067DAED154", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "P7S9NXci87tUoniFV92LrIy89CJhOITAOFiotfcFgHQ=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "901C4F75F152494B605AD385A32697B47E542874", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "bADiYHWxEj48QPl7V3NmFtEBDC6lRHwdolSoND/Azjw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "9029713BF8CF5E0796CF1824200264B58A54A831", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xi9BtBZFunLboJGtZ2BgDFB5sZ8B30LJ95eaAoKHEZ0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "90F696DF160C8DF08C2DBF439452CB559230FD52", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "l9VCVnigX9r/ngvvODJy65Ux05mHgq1bAtMzUTdj9eM=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "96C8B06B9A84DD50905374158D5874C360F0E436", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "iH9JV/rTwK4G601Xdt7UXazhzVEpoqGS41SLaZCv9Yg=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "9887FE69CDF1A3B7E2B3587506A7DE299DB96841", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZoRHjDslrC+Bt0ylNaKH3tdAFSjOUpKPsQHfCQdzgaI=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "9DD616591929A0821368A45635B71A55522F82C7", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZeKSKBR994qPBqDHZoPTX3Ka2Z7u3qA/LOtpudQeNOs=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "9ED26D8435540AA635478C769A328CFDB97A8518", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hGGrFZ2JCgq/vYPBpQxpY7aMPnIHkH1uAyUVYtW9Ba4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "9F0D30B162AEF95F0B38488C47902BA4CEA6E6EA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vpRJi+yl12C4zwge/VSeqIgvluclNBTvUqoTV8SHdjA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "9F445AE036B207D2DE04D0E32313A5A4B715AE85", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "FGdz9P2B8gYPui+kEMkdKNKzAldR3rrtvCtRaAWUiG0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "9FDCD33F13D8106E469212E112E37E3E48A09101", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "VvXH3+SoWTvCOXpfvWUUxvrVbJZ6eW3f4DpZaq96fe0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "A37F40DF55197B9B24C3D9938A8AA76CCBB80BF3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+cTbf6acip7dwxVi5ttJjPIbdeNSAmJriiufJbfisY4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "A3E3EF26B675F46AB3B701A2E744BEB03F4A7F69", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "y3D/fwrDDW1imqsB+9YVWUiOigYnKpoI3v7cz0aS3gE=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "A54EF86C44B3F5071191A0144CCADB92118B2230", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GhvEC9KhlqB5GQhtvrJfiwG/rT9Iopp3q8gUdYHRLY4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "A92BBF76E98907998C193A4CCACC200A3CC75E30", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "gmM2IlGnht2Ob1Ih+n6yrd8FuypOfjfhCteSSQ91Pak=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "AF4B21D9AC2387443EE4B05EE09F54D846A3BE6A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hlSyNoLvCCQTSUV6HXuiN3gmZAgQnlTaIHq4UE7Q0o4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "AFA48E19711A6EAADF676EB680C82904FB1AC16B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "cViNtsX7rEljq4sEm1nImdb43c45ncvyT7RihHXP/UU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "B0AA5BFC7B1E2F324C4B46C4AA6083EE4ACF9B62", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TGdcglY0fT4wpgKviFRhNdskxDDrKqIcbTwaqISTWps=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "B46DF4B1C3BC26C37D5FDD5B911FCCD8244857DE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ztE0dZ3qD/gJxASCrSyEMByum5hf0IKS8KuGm3brGNw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "B62E68DA52B0400EBDFA5401E2B77265A4ACB2B8", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3jcKUZws9cthuUvC8bHUlEQ83uogY1ABWaF6zy7GyIw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "B642D822FEBBA7990B9F02D4AF86670CAC27CA68", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "pN590Y+E8UIW6b3S7v+PQcMvw7Ipbe5fBNlvEPPZCjY=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "BB5A8EECC92ED313C2C67942320E781AF7ED7268", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "5k4lIz2K7+of+AphESqYW2err3cNXRNbsqUXm/k5x2M=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "BDF67CA82B7046E57B6B4982039B6D3FF901C9A7", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OpSNrFayxfW21PPMApfVuzLQfe5V1Dotd/MWwH5yVg0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "C015E371B54F239FE683B7148A044070D7576977", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "T7apJi+EyTZ4SEJtsxL5V+Fw04QUaBh316CFXME4Y20=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "C230CA072E37B073F97418CE158F691C99F79627", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0fFmL74Hrhcs5jmxsezvSAMacxqD98Uvqg23Ij/q21Q=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "C37AE615063CA6060879A91AC426BE9426CBE419", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "jRKiyGWNoXjJwcUnl4Rzeo6tAe/02/AoKwGkjxG6SEc=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "C3F3E4A5624731E535149A43B32D9043B9520EE5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "C7jFi3Zygv1OAoIkH2rJHNecgirSU6RIDMRD+lx0Q/4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "C4C16B56F41459D7A5AD3FB2AA364244EDB48036", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XDT8PdcVgniRAgbz3F1v7eHzhAXGu1IpmSx8FZTOSTE=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "C66661B9D74DD31FAABAE5E17F5C73E04AFBF839", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Oomi2eak/GkLZ4HA9fVuqCEyA9HihRnDxjJw4rOfgZY=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "CCDB30DE6322925BA7A18ABDE21F8C0B1CDC6F30", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "j3zM084W2/Kcv+R5OO72hjSfvYEvQqc+SA7aT1AgRe4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "CFFE7BA7EDA642BA98DE8605377965D441310A2E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BlaLhSbhOeU05Zi09z3hjISZkrmwJmy7eYlAoTaGkXc=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "D472E98EBC0AFBE1712E59B33935529CFE118A77", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hJUp+wx9txh+IHeJ4n5QHyQVxiZVBcHrZ4AYEPXWJY8=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "DA659B0EC148C5EDCB150E4C5F0F73731A7FE1D5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KBwlsk8RIoYg2HB1XDqNMnAfHLRQk8CMF1RPB+j3/S0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "DE1C088A2B107F6351DC857928568631D0EC4230", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/QW0pe/82MqaP3ueDLaCwnakNAo+GFoghEXgiLybP8o=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "DECAE33B2A5556A877A3E43471988E21E9ACEDC5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Glj0NnKo47wq3IoXYJpL2naLXoM8+fjgJQN+ZMfnAKU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "DF600C1EEBA286C887D291321D08DF5DB781B41E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Tf5T5r4/wsFvPdj8z35oWPP4TuuSZA74Ktnt3g8mwXQ=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "DF84994D8ADA8BD8018F9B1440F0CC58B6968401", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "LGS7jGMN1w8AF3DbGY0ulbwcYPVhgFJS6OJqrkMNhkw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "DFC0D44126E79B374329A8D8F65B7A6361DE3922", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "W+CjYjJLWr9oB8jwefIE7DDmPhugw0s7fq0KkNfsdVA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "E29C235109215DB8F7612C0F2096932B9D70567E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "7QIYRTtwCYDqadOIQ40c0pci64o+S182FR0V+x0fKEA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "EAA1B94BF621EA5F52C69B2ADD3C4E93A1D23C4A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "foKBMkfvkZ1nq3DrmiKxxZ3Mx4Dev0jVQA4mqSocHCo=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "EAE4C8E1ED2E20F3ECE734F76984E7731D49F914", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "WdwdjF4cDC8cr/QBwK7aSf0P65EU8zil/1oPYpjzB+c=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "ECA31C24BA79E6165B5471D43D10AC8547354F9C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Rryj1JTEgZ3cdfopjkmHI63AWOYCLhsq5BBtMLWrcNM=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "EDE6C887A1ADB6745DC304310B9A539D8A236AA1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "qIi5R1hO4fosjdY6Ao+tvrN243gT7nzKlOFZTa9Y564=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "EEF11EA67706C81E43FF769CF15C842E2C6FCDCE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "1qGw6O9yL43hxxpN8peRu/ViAXN0WjzG2utBwlIc4jU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "F02A2853F65D73A334DFA636A82A2B308D6DC92A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0l7zJ1NLfmin08u9wEk78rWwsG2+4OMveU0csi/9+tc=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "F173A1AF07F7FC6820544AC1C6B214233492262A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "4rJshjyQu4BHrT0ISKjxbzGeso6ABwgImeLXbvg2wG4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "F25CB645995131C7AF5097427CE9F47990A12D9C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ThgrMbboZQKsZxavjFmMnNw8drIWlkZq+F7gkF938vU=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "F4053AAFEC0249F8D3D55C9E197657FA9B57184D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "wm3aUzYr2z4AK4RfL0SzrPEKaOBPfix0FLKxHY1v5Ds=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "F95B539513FEDCBD12720D111F339280A222B64D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "L9Dl46Bw3k/ehotfwQdrtsCkn/9yKknPX5pmCk/CPA4=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "FC636C36924D225C09944E11CBE6B16882A0359C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "nHPrnHkvryBY3HYND3zQYv1z0Db1CymkbQq+HG3Se2Q=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "FCCD710DFE0DC5AEB8ABC6A20031EC0E149F458E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "YoqiYKzLy1IMN5OiHoCwUPgbJW11GvrIJ8P2hG5jLFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "FEE43DA03FE7782A458938545578AFC11DAEC071", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+kK9BAL2WiD18tpLQZzbn83/frwAj+neOeKu9W5Fn/U=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-6300" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-6350" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XCK6BWW7PWfsMof+x3lYRaNKbtP9J2WoOUztl9TAumA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0859D2467F0DA63744B220E6E270DD3F0EEAC10E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "I44Rs7aDNyhp+m0Tx8v5h5+PadBk0hrnGRxjjRcUN1M=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0D7350841ACB4A53C7717C7E5776A5E0DB6D596E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "x0lc+iqSimWb7E5qjqGjhhcGfHvInloqPqcKeFs94Lo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0EC358ED84E4F9088BB57617024D49E834322B54", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/ruq8Sh5Uw9wfjlgz7365lP3V4UKMHijoZl+d3I76Bc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0F7E62DD0AB86CB03DA87EB9969B558AFE04CC6B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xsPsE8CiTwD9ZF1hVyOC3Pbucfk3pXhhA0T7OK/epNg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "104776A7532559122F43A5763A13FA7E747AA44C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "17lBalGeyg7iPCeZZ5qqQo0IG10IqHdoejLCdRxwI3w=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "16E8EE7E867E20343ED67A83386B798BBC8CB7EA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "M0PtCXbgOaR3ldg6Wcpro1dnJiF86c2HwuG0lop+vhg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "17017FDB07BD7604A356325D499FF1CD9965CD00", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "i89m18+VO3HWfYsh9uPTmGpFrJFNzauYrxqFHOY/NKE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "19FF9F7C347FCC6100DABC66AE8D3E2294A145BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "rn5HJirSOlHMYWhuq9mMWvNOdp07fsYbp89nzIW/5Cc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "1B6D50537048EE35C2F43BCF284B59CFCFAA2F91", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "l9nBQa9NVbrdBUi1x06afmoYnZ+GaeVWWfMc2rruNLA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "1DC38F15CC04F552E1677D405EDCB2AF8610A20E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "4puyaJfGWwrHyu2kuiZy/BvPdwIR8yBNSZXKAGJ2/jE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "2022C00AE81BE3A15F9C64DAD16071AC4C78DD05", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fm5HuWZCIGo+n78q9EBp6ooMRoky6mmB48oQ3SkAvM4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "22A34A49E778B1F2324C501831F1B41D5CE2FD43", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "JSWsW1fQnAlWzK8Odm0OMhNj4p2ImsJmGEptlDPeqrU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "276DE96119FBBE4538214B94C62BDD2647B1E2E5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "U9bh0FPYB709KXVlJ4XAtHpCblL98lpatZZxDHtwPs0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "2BC8D138F5DF6CAB4EB88B96DA66D9FA18EF543D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "UP3UAgPsub6BAlmZ2gG6PtLNyjO/5LdzS4jYSSoTAiE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "2BED56C755A702194CEFCEDDE096FF4F93C3652B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZNDcajXkY4bRtEBAmUAlx2d0HruUQWBS5HmQI0wwtBY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "2C5901D7C2308886511BE96C7D60426032B4FD26", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hyG2JJlVjjWahm0WejWZng4Ril4gDMj3hXofQFTj+7A=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "305ACD56F23E26BDE200C06825B4B0C90D6EF09E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ck5ovdxs5unS0mvbGqalrir/gPPmSiAS/p8j2DCrxl4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "31B6C523836521A9896D96BA1B3D99571249CCC2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3MmFrfgiVg7r0j6pWy72d71qdmrr4VX8XZf54zRkOlA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "34167E39185F8B5E144BC73E9A54A65C58B5806B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fmYSCGXNmzqPVBqDZe/+2QCbXsrY8LJ4w3sIs25Rai0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "36F2C307B74BFA57300F1C7F8CC24180F86F2DB3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hxpKGTEPS46kLDoesT+WpdY/CcilcK8dtkPjWshPF9M=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "3790F095C2C35C28804F243DF9F1D9702527987A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "n4sqH4bqJSkoH9DOe/GYJJVAIX/j5Lj1QbDdi6tbUxE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "3AF9DFDB695038C1CDC08E6532D7259ED3CE6136", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0RcGmAScpJvvMpnT+kzEfSllGQrNYvW7TTS4nRKeBIU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "3BBA3A4BCF6BD50DF93399D28CCD2C77EAF04DD6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "o7wzwfrjCiUUr7fjHb2vAmtN4FOvAWw2HB3J27rZ7uc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "3DEA89BC6049093CCBB86AB1A26A7A89FDC0F170", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "8dIzhTOrl5C6Fie/BsyJ0jusfhuHmuIAj0PmurcSzTg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "4099E6362C41FD472955FF42D640ADC8382143BD", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "bi9agQoC0nPb8ETaTbB7GtTTJWJ4Ac7+G1aIe3cpnn4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "409BA2271966FD00E50CF30D68F02656C1BBEEEE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "d7aLXaaYAOzSm7O/tXzmpFkAMIJoSbtLNmp5YRn7yPU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "411EF3D45200CD9F4AAEB41569C30095BE5B8352", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lidiSfq+SqGm+rrnUOTgeAdEVXSR7eI3nSRBSvtknxU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "44CC86D5E237AC35EFAAD48B737F4CC56CDF9DE4", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/kNzF1fajUfYDEO6YfnJzFR3FwFdM4vhIz6EgGaUX/c=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "44D5B54C74D990CDFFBED82788E0DD3DA5DF91CB", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "qzjHwG+dwCMXoBUj+BNJD9Re3s+UDUGP6lGX99qK8go=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "44F6313731281FA393DC0BC3CED0F141974E6E80", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "UzLjo4moq6iEE/t/OvZu0eyPRyEawT9KUIuBv903eDo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "46D87DE55A2AD46C8BF375467C857D88F23E9B27", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "63/IWqNHDYYopzqHERVG7xlzpVAI1JpISqVXrpww9Yw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "483B3ADB1C595B2C292FEE8C65C9F6EED884CA00", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zZxuCLwHjbYyT0AGpAuRu6iFTqtrhr9A7aLYCRhRxXU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "4B66EE9E8B13C4494CFCB6D0F6A19F1B417E172E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lYcfeQrV/km1K1Is/Sqt2UOpITEaTB1C+Ak8gB1TZbg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "4B924BD542EF7E25F33D1DA71CC9611CE640E4E3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "A05Mf3pnWpQMeWutGgI8bh22Bd6B+EiCkuwW7jWsOgw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "50C24570B899B11034B1A8F51CAA91D479C555C6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "znqmCvYTlA1RFIZBAzLRvT54efnS3EVmZ05ZrbFWZpI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "53BF6EA4BB98D5CCB8081DDC2B6D80E790ED6091", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zv8gefGS9GKaAsVYQHh9y+xkw5sgBWP8gk1HGbYYRy4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "549523D99B417B356A37882EA5BE22444BCACE49", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KSrXAAa3As5ORLjMCeXLfxjqwsvOSAvYIljFGbhf3B4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "55B6E0B429C582D102A8C5E9D211FA07D2AA3DCB", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ppOdDZrQqjxtBvOifnSuQ4DzZ/w22q7lNE9xrYIIfS4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "56BA4B6BE15A47356AC20339BE1FDEDA2994E34E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "1qM9CJwyJQJGOIdWAozNaTs9KALlX0gnDDQUwcZJi5c=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "58086A4142ECDD35E8FE1753A6256B98D9661F0A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Uby9JGpxx5WKUUfJQulMBb2qVUphJobqHEN86zMpFFA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "5E561B91BCF07518E0FD2E510C233D455B306856", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "NwPY9cymnZc1Lxb2DUZdW7PMRhBh7lQSGdVAgVZeDZ8=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "5EFB8BD4E6B0A67DE3E9C64E728B8C10614DFFC2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "eoBz3MZy5yLeSkJocxPobWDiU7akUc307R3zVoGUr+Y=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "5F19CEF4820053AA8787D93C86B7CB39D7ABE40D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZEpB4tm+ml9BJ69RyM1F6yC6KWpxciBJe/cZ/6NUldg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "5F8C09291BC721346A7571FAA7936C33D2DBA44F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "i8iVTRxNhSfhxIZcuI4ppye3M47DLpOY0NVn1f4mUo4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "631F83C22D4F46F72D732665F61630B408F216F2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "RmvubhoqFcTLJPKuc9NQeI30RqYDlXu/YJaSmKWcThc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "63D15DA922FD4DD88FDE33D9B6C80675D0BDEEF5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "gN338koMV+bz7fzauWSqGhJGBDPIUsjhj0oQKHdv5ww=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "6548BDD3B9F3B8C243F3AC094C2C58332E7D32DC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vPvGiLV/Mjtd2UgsImjV5TMxaUBLt5b82T6OwJfpLeA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "66CECDE4581CDA058A1D708D183E606B43274946", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xKTou5rj6JK5Riiq+LXVNl2AGEHB3hIaTj6JklrcenU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "6BA54EAE4890CB52A69F3F520524C5602442A857", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "jIPBmdnBx/aLRCmgOheKG6mN+ls1asRVn1ypQDeBVDQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "71129EE0478B5EE8366C6D9E9465C494CA1063B9", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TucFlevTMXVH8YX3LvP/Y0cq3u5DJ6kqfalnl01unKY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "71B73AC10644A4E0172BBA6EEFFFADE9729BA17A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "9C+vwXG+jDElowp7hd0VtZMIM0QGs9hSpAjHatJoavs=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "75726122C13922D71DBDBBC4ADB57AC147832914", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zQe0pS1HdvVtcg1Hb0WfqhNBl9jpuJggDfSyKCa+0HU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "75A48BE1310775AFC556D46EA2234EBA3BF388E5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "z/Yxy+HxU07cB8fuAZgow4FhJZcm3tqkRdyj1+3ACv4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "762408A51C56E050E55B4189D8D76709343F14DE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ie4HhfootkQ2IugMlhqvkAQZUNCIKdNo9wxk49zXvZs=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "786EA666F2382583671F77A1846FC4ABDF9F2E52", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zplQxvJiEbjx+1PToTwDMnjc8ZGPikHoY6N1BzoMz1w=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "787157EB0208852323804C28B3887F756F823A6A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "iHjXDCZGLeGqbpe3Sr/p2I6YzhkwcrkGqxLxjLtae7o=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "7B7F7BA0384E0EE165063F9FCC41204F290A50DF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "wvoROLitucFfBKlKtVbgdR91B/s6C2elUNBSB7jJ3NQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "7C779C769D5F8173002F473CC719305FE8FC9437", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vXTTO5/GcGP5+kcSbqteHENtjs6vLj5O8VWK7rEQoOg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "7F3348BC852CED5B77DD8B279462E7EFDF078001", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "qz5EHLa8J5Qxw6DaSMSdVDY+adVxK8uy79HEnwSxT2g=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "7FCEE146134268E411753C6EA9C62FF36C7DB6D6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "MYRRf38BXVkdiGuTZ2OH4Ghhg0IxDo/4+bLyvks4/sQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "80204F6D505D5E420C935E3A15F401A19D3AD088", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "8lU058pusC1yBovi3twpc0cI4Zti6VyNzw9Hq4IpQzA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "8244C94F5AC0A5C208672AF54B115715E27940AC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/Bs8sf+d4K8uztlGCstc5NORiQy8EyfTCY9fzTJCQ4U=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "833CC4C5980DF7FFBED4F73EA347B44E8B985374", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "kPyMxDMWgW4nGHXpClW4HogSwIZbt2oM9YJRxcUYROw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "83DCA4191E49F62153DE50F18025F8876EA19BA3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "rKZ9HIx7FEjxFIxfUstXXg4Cml7gU7H/WAbqEz9Ew9Q=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "85458A404CE4B1798A67AB9BB83582C762BFC9AC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "mSM58wILhLLDLDEaE+XZOE4UlSrstmkHgGuBiuffjEQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "861227E76A82CAA51510E7E50E929DD7F0620632", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "EYIEcSVx43luraoix32LPZVLAcgKQVWMh/aGbupnCWU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "88BE7AF676F988584BDDDFAA7875D96C569046DA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "2GOtwtXCIt3hoae7hAfHiih+zuojKrKPpCkoCDzdgyY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "88CF3ED94C8FB8772CE13EB668E5A43C2B4105F2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "7YRNZJYRqTw3nsF9bOLoWFF0JdXyklQi8DZ13uXAg5s=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "8E497CEB9698C545DD43A5D054DD19067DAED154", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "P7S9NXci87tUoniFV92LrIy89CJhOITAOFiotfcFgHQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "901C4F75F152494B605AD385A32697B47E542874", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "bADiYHWxEj48QPl7V3NmFtEBDC6lRHwdolSoND/Azjw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9029713BF8CF5E0796CF1824200264B58A54A831", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xi9BtBZFunLboJGtZ2BgDFB5sZ8B30LJ95eaAoKHEZ0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "90F696DF160C8DF08C2DBF439452CB559230FD52", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "l9VCVnigX9r/ngvvODJy65Ux05mHgq1bAtMzUTdj9eM=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "96C8B06B9A84DD50905374158D5874C360F0E436", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "iH9JV/rTwK4G601Xdt7UXazhzVEpoqGS41SLaZCv9Yg=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9887FE69CDF1A3B7E2B3587506A7DE299DB96841", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZoRHjDslrC+Bt0ylNaKH3tdAFSjOUpKPsQHfCQdzgaI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9DD616591929A0821368A45635B71A55522F82C7", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZeKSKBR994qPBqDHZoPTX3Ka2Z7u3qA/LOtpudQeNOs=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9ED26D8435540AA635478C769A328CFDB97A8518", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hGGrFZ2JCgq/vYPBpQxpY7aMPnIHkH1uAyUVYtW9Ba4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9F0D30B162AEF95F0B38488C47902BA4CEA6E6EA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vpRJi+yl12C4zwge/VSeqIgvluclNBTvUqoTV8SHdjA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9F445AE036B207D2DE04D0E32313A5A4B715AE85", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "FGdz9P2B8gYPui+kEMkdKNKzAldR3rrtvCtRaAWUiG0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "9FDCD33F13D8106E469212E112E37E3E48A09101", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "VvXH3+SoWTvCOXpfvWUUxvrVbJZ6eW3f4DpZaq96fe0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "A37F40DF55197B9B24C3D9938A8AA76CCBB80BF3", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+cTbf6acip7dwxVi5ttJjPIbdeNSAmJriiufJbfisY4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "A3E3EF26B675F46AB3B701A2E744BEB03F4A7F69", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "y3D/fwrDDW1imqsB+9YVWUiOigYnKpoI3v7cz0aS3gE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "A54EF86C44B3F5071191A0144CCADB92118B2230", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GhvEC9KhlqB5GQhtvrJfiwG/rT9Iopp3q8gUdYHRLY4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "A92BBF76E98907998C193A4CCACC200A3CC75E30", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "gmM2IlGnht2Ob1Ih+n6yrd8FuypOfjfhCteSSQ91Pak=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "AF4B21D9AC2387443EE4B05EE09F54D846A3BE6A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hlSyNoLvCCQTSUV6HXuiN3gmZAgQnlTaIHq4UE7Q0o4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "AFA48E19711A6EAADF676EB680C82904FB1AC16B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "cViNtsX7rEljq4sEm1nImdb43c45ncvyT7RihHXP/UU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "B0AA5BFC7B1E2F324C4B46C4AA6083EE4ACF9B62", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TGdcglY0fT4wpgKviFRhNdskxDDrKqIcbTwaqISTWps=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "B46DF4B1C3BC26C37D5FDD5B911FCCD8244857DE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ztE0dZ3qD/gJxASCrSyEMByum5hf0IKS8KuGm3brGNw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "B62E68DA52B0400EBDFA5401E2B77265A4ACB2B8", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "3jcKUZws9cthuUvC8bHUlEQ83uogY1ABWaF6zy7GyIw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "B642D822FEBBA7990B9F02D4AF86670CAC27CA68", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "pN590Y+E8UIW6b3S7v+PQcMvw7Ipbe5fBNlvEPPZCjY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "BB5A8EECC92ED313C2C67942320E781AF7ED7268", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "5k4lIz2K7+of+AphESqYW2err3cNXRNbsqUXm/k5x2M=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "BDF67CA82B7046E57B6B4982039B6D3FF901C9A7", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OpSNrFayxfW21PPMApfVuzLQfe5V1Dotd/MWwH5yVg0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C015E371B54F239FE683B7148A044070D7576977", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "T7apJi+EyTZ4SEJtsxL5V+Fw04QUaBh316CFXME4Y20=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C230CA072E37B073F97418CE158F691C99F79627", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0fFmL74Hrhcs5jmxsezvSAMacxqD98Uvqg23Ij/q21Q=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C37AE615063CA6060879A91AC426BE9426CBE419", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "jRKiyGWNoXjJwcUnl4Rzeo6tAe/02/AoKwGkjxG6SEc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C3F3E4A5624731E535149A43B32D9043B9520EE5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "C7jFi3Zygv1OAoIkH2rJHNecgirSU6RIDMRD+lx0Q/4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C4C16B56F41459D7A5AD3FB2AA364244EDB48036", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XDT8PdcVgniRAgbz3F1v7eHzhAXGu1IpmSx8FZTOSTE=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "C66661B9D74DD31FAABAE5E17F5C73E04AFBF839", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Oomi2eak/GkLZ4HA9fVuqCEyA9HihRnDxjJw4rOfgZY=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "CCDB30DE6322925BA7A18ABDE21F8C0B1CDC6F30", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "j3zM084W2/Kcv+R5OO72hjSfvYEvQqc+SA7aT1AgRe4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "CFFE7BA7EDA642BA98DE8605377965D441310A2E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BlaLhSbhOeU05Zi09z3hjISZkrmwJmy7eYlAoTaGkXc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "D472E98EBC0AFBE1712E59B33935529CFE118A77", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hJUp+wx9txh+IHeJ4n5QHyQVxiZVBcHrZ4AYEPXWJY8=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DA659B0EC148C5EDCB150E4C5F0F73731A7FE1D5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KBwlsk8RIoYg2HB1XDqNMnAfHLRQk8CMF1RPB+j3/S0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DE1C088A2B107F6351DC857928568631D0EC4230", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/QW0pe/82MqaP3ueDLaCwnakNAo+GFoghEXgiLybP8o=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DECAE33B2A5556A877A3E43471988E21E9ACEDC5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Glj0NnKo47wq3IoXYJpL2naLXoM8+fjgJQN+ZMfnAKU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DF600C1EEBA286C887D291321D08DF5DB781B41E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Tf5T5r4/wsFvPdj8z35oWPP4TuuSZA74Ktnt3g8mwXQ=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DF84994D8ADA8BD8018F9B1440F0CC58B6968401", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "LGS7jGMN1w8AF3DbGY0ulbwcYPVhgFJS6OJqrkMNhkw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "DFC0D44126E79B374329A8D8F65B7A6361DE3922", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "W+CjYjJLWr9oB8jwefIE7DDmPhugw0s7fq0KkNfsdVA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "E29C235109215DB8F7612C0F2096932B9D70567E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "7QIYRTtwCYDqadOIQ40c0pci64o+S182FR0V+x0fKEA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "EAA1B94BF621EA5F52C69B2ADD3C4E93A1D23C4A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "foKBMkfvkZ1nq3DrmiKxxZ3Mx4Dev0jVQA4mqSocHCo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "EAE4C8E1ED2E20F3ECE734F76984E7731D49F914", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "WdwdjF4cDC8cr/QBwK7aSf0P65EU8zil/1oPYpjzB+c=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "ECA31C24BA79E6165B5471D43D10AC8547354F9C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Rryj1JTEgZ3cdfopjkmHI63AWOYCLhsq5BBtMLWrcNM=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "EDE6C887A1ADB6745DC304310B9A539D8A236AA1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "qIi5R1hO4fosjdY6Ao+tvrN243gT7nzKlOFZTa9Y564=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "EEF11EA67706C81E43FF769CF15C842E2C6FCDCE", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "1qGw6O9yL43hxxpN8peRu/ViAXN0WjzG2utBwlIc4jU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F02A2853F65D73A334DFA636A82A2B308D6DC92A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0l7zJ1NLfmin08u9wEk78rWwsG2+4OMveU0csi/9+tc=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F173A1AF07F7FC6820544AC1C6B214233492262A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "4rJshjyQu4BHrT0ISKjxbzGeso6ABwgImeLXbvg2wG4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F25CB645995131C7AF5097427CE9F47990A12D9C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ThgrMbboZQKsZxavjFmMnNw8drIWlkZq+F7gkF938vU=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F4053AAFEC0249F8D3D55C9E197657FA9B57184D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "wm3aUzYr2z4AK4RfL0SzrPEKaOBPfix0FLKxHY1v5Ds=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "F95B539513FEDCBD12720D111F339280A222B64D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "L9Dl46Bw3k/ehotfwQdrtsCkn/9yKknPX5pmCk/CPA4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "FC636C36924D225C09944E11CBE6B16882A0359C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "nHPrnHkvryBY3HYND3zQYv1z0Db1CymkbQq+HG3Se2Q=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "FCCD710DFE0DC5AEB8ABC6A20031EC0E149F458E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "YoqiYKzLy1IMN5OiHoCwUPgbJW11GvrIJ8P2hG5jLFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "FEE43DA03FE7782A458938545578AFC11DAEC071", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+kK9BAL2WiD18tpLQZzbn83/frwAj+neOeKu9W5Fn/U=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-6350" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_1_validator.json b/light-client/tests/support/single_step/sequential/validator_set/_1_validator.json deleted file mode 100644 index 84382c2da..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_1_validator.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: one lite block to fetch, one validator in the set, expects no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": "1", - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": "1", - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": "1", - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "nzE+gG7QoY0pl3PTTtaUqgyLpSxK5yihZmhUXNndHsnWaaaLF2mFcDhVr2IWxce8UG6toYERbNAdFEK8f06ZDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_8_validators.json b/light-client/tests/support/single_step/sequential/validator_set/_8_validators.json deleted file mode 100644 index 1691df15a..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_8_validators.json +++ /dev/null @@ -1,443 +0,0 @@ -{ - "description": "Case: one lite block to fetch, 8 validators in the set, expects no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "AAC4BAC846D1C00B6895A1F33A9AAB6AB73F10F5C86003E1562095FE6F018268", - "next_validators_hash": "AAC4BAC846D1C00B6895A1F33A9AAB6AB73F10F5C86003E1562095FE6F018268", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "1CD820382BADFE9F39B17798A4EAFB356F692C14DE2704CF827D0AAC33E9778E", - "part_set_header": { - "total": "1", - "hash": "CBB0495230B716FAD25E815C2766B059A7C2D7D31126ABCB76EE8FA2509C778E" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "4IRlGzbWb59aGUvHwQyNRb9/3JaD1U71gtRXDKAi4SBtFL5BxnYlx+NyEo0UXCq6MPPHMjKRtFokFl03zWvDBA==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "doY5P2slcWeX+HQb8udTW29YspDfYGU+J9C7KojjqSXY4cczrVb4cuVkCgPetWnnEj+AFWq0toX1jDCNwJy0Ag==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "X7p/9/nlV8nzzsGo8rqRCvKvhLqsYpVlMCwgK+4nmi/53P1N9PikhnmxfjKaNgMuSs/Cd1Jzqil+kvgOxUvRDg==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "V/SjRftrPqHbXc3CJka1Ppo+wk3duny7xEYrEB+uyq9cGhOqsXZ6PglkuPRYoAiiCaLJHdwLw3+vcUpScMZmBA==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "VIu7u7gTPKoW+3Gqlu4ozaAAbTZOmNnLVSBkLauO91XLTmUti6hFcby0HM+cUWajJlYQr0wI0CpYsuzoe668DQ==" - }, - { - "block_id_flag": 2, - "validator_address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "IVqkgKJMoIXchxeqxuCet9gkAEVw7jop/QGNw3uF3BQRqbUTUfAPt7knqet1wq9gDcoIq23kcKREAyzXy0dsBA==" - }, - { - "block_id_flag": 2, - "validator_address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ysGLr38vl+3/Ay3p09pw/iNGqs+pZovos7LyBkYhNpHEI46JIIqVr4a4JO3paVpzgtE9dAOW4UYf6GtGilUTBw==" - }, - { - "block_id_flag": 2, - "validator_address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "WBSCygLn/6K83J1xIz4MC4TTTc0xWqvJ31WRdThSn4NBsVXak1LE43xWxNac3BnaWl96uHC+RZyPKMyETPooBQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-350" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XCK6BWW7PWfsMof+x3lYRaNKbtP9J2WoOUztl9TAumA=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-350" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "1CD820382BADFE9F39B17798A4EAFB356F692C14DE2704CF827D0AAC33E9778E", - "part_set_header": { - "total": "1", - "hash": "CBB0495230B716FAD25E815C2766B059A7C2D7D31126ABCB76EE8FA2509C778E" - } - }, - "last_commit_hash": "2C5FB7F1E61BC8FA1581B0E0D1CCE414F0EE1D6C3DCF7A8AD3C6E51F786314E2", - "data_hash": "", - "validators_hash": "AAC4BAC846D1C00B6895A1F33A9AAB6AB73F10F5C86003E1562095FE6F018268", - "next_validators_hash": "AAC4BAC846D1C00B6895A1F33A9AAB6AB73F10F5C86003E1562095FE6F018268", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "B71EBFEE6DA7660E16700C517B2C4BDAE902E0C64711FBE5CE14B27F9B27BAB6", - "part_set_header": { - "total": "1", - "hash": "E48F3D3AEE914F0CD55E616CA8513142A35BE45DCD6C5E7EAA0798B747C42147" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "LGJ96Nu17ZDKz6qhtnAKBW6/Grf3Wnd1A7n/hTNoH1fp6aEE2HDmBrpkepmN3NJZCUrGjcbWfnmimK4XDVMdAA==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "OV11mn7RXstM9BUAF11mmIdfjlEpNX4ZGAj5jaekZ6xDehF83v7aI6AnyrxqIFml0DjwSDqRxMzaoKye6VeHCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "o22MmLcrJHKVBUI8RQ0H4zWzfMWzF/j57PbLNA6JDDLkebyWNjKNSyq3bTFIm/WUxoPpA93ntSE0RNxse85SDw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "UJOK2HZwz4mA7o5ecRKuQreM1+cWAbXRhLq9G/81AY6+GhJhj+q91DCTOyfzQ+aUYA44K2rgbnJgkkqj1W41Aw==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "HiyGRBOdopGse4d79p5nYdj3KL8aQg+244OhYLhOAEIxo67EI00czjNofX1LWOQERVXZLSEgnORp+/HGj5R4Cw==" - }, - { - "block_id_flag": 2, - "validator_address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "mjyt6SxIaxVR527dxHohppQDp8OsOE6Z1BnrCvlYX07ibOUSLUkkikGMgbaJkMrccNeU2N7k6p5ppR12rTr6CA==" - }, - { - "block_id_flag": 2, - "validator_address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "+lH4qmzusMSRefk0Y3xyDCseVa9WlSdPNKNPSICYvGfA5l/fGMSlrUs4v1Wae6SbSydXrPJlcMv5GH2ig5WcBA==" - }, - { - "block_id_flag": 2, - "validator_address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "hXfV2R4FXqH4RZOATMDfnOEIQKZHysI22+ZOb/eiROX7hbOUiV1u0V4ZMmihpymPr8s/cELmz0RMIvDgMmhsBw==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-300" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-300" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XCK6BWW7PWfsMof+x3lYRaNKbtP9J2WoOUztl9TAumA=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-300" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-350" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XCK6BWW7PWfsMof+x3lYRaNKbtP9J2WoOUztl9TAumA=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-350" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_half_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_half_valset_changes.json deleted file mode 100644 index 7be832bde..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_half_valset_changes.json +++ /dev/null @@ -1,451 +0,0 @@ -{ - "description": "Case: two lite blocks, 1/2 validator set changes, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "last_commit_hash": "D5439DD65D45EF1E51412691BCF2F6741D48AC1325572E08D48BD72F80669E70", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "1D0E097867957D60300DA09E9BDFB72D5D0FF6E737E895C613332EE1384013AB", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "5D8345A72BA9C1CFF6E358331E7749F6F046647E84C117BE5E6166CC1E5FDD8F", - "part_set_header": { - "total": "1", - "hash": "246B264D47EB5D355275E47C5C8E9D68F67FF608A4429EBC574A1A6DA7575FA3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "jirzqMHXQ1bxqNSJm/3VOUI4vV+z0xW3OAYSsJLidLmTiLmZCQ2IMemw8e3G6pgU2xPWmunQMD/q3ZajHhFvBA==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "+YllDRKCuw8AmuFIUorqLElC/45cOlA6excS/pmmJkdl0HU8Wb2CGmMBP0mW477pj1OdwUHFzUW/K7tD3wmpBw==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "C54u8lUbrJf1DCKcVN8oWX4WvvX4NvK9zUYnHj6IMoga8NDkpNauK9Bt53J/r+N4gj2vxdoX8+Ed7h8iJQktCg==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "xcJ5RFjQsUdD0izmcjUrRhK4QCOr1y/UdRfp7dxZysA3BVYDNpbGmCef4w8HDFjg254NczqIAVdRVN/L8EmuAg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - }, - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:15Z", - "last_block_id": { - "hash": "5D8345A72BA9C1CFF6E358331E7749F6F046647E84C117BE5E6166CC1E5FDD8F", - "part_set_header": { - "total": "1", - "hash": "246B264D47EB5D355275E47C5C8E9D68F67FF608A4429EBC574A1A6DA7575FA3" - } - }, - "last_commit_hash": "D381E74A7A4B614FCD86404E419FE3EDD0BCA4B81DFCEBF77553975E37C8C39C", - "data_hash": "", - "validators_hash": "1D0E097867957D60300DA09E9BDFB72D5D0FF6E737E895C613332EE1384013AB", - "next_validators_hash": "1D0E097867957D60300DA09E9BDFB72D5D0FF6E737E895C613332EE1384013AB", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "03EC0413849A3311A5341E7A69D6C544E9A30310" - }, - "commit": { - "height": "3", - "round": "1", - "block_id": { - "hash": "65BFBF3C6A94F15D77DCA9882CFF2620392D3BE01E0B0778C90B10F44977B7BF", - "part_set_header": { - "total": "1", - "hash": "34BCECAE745B8586DDFB4E3B3BE23027B459EAE6EF53AD516EBBF4B4D789F6E2" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "AdXaU8cjtmbDnKYTNnQnp7kQ7WDhMWD9hAbkTqM0GaAWmJ+tKMbfkSVUVaCyww8VOk4zT2prcYEC48K67vAMAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "gZuBQS2+zhQFMDNpExzXG3cVwQLyXZTdJ1P5LJqwCVeUQIUE9V2fl61SpTaJfslIk5rUzKHPlpbgWxF+aCR+Cw==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "chRQLM10+T289XAXkwxr9BVmKokn7C+oZU3sueoORqWVwHu/zpa8/qRkF+UPpa2aAk7VzocB5p9bu2+WyTK2Dw==" - }, - { - "block_id_flag": 2, - "validator_address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "0pF8EmtgvTKlD8Rse47ukqlCEKllUmU6PZ+B+0U2guQxRd83hj2+An4QoOTs8xXrPgHMFTkL950MXVpNiCduDQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_less_than_one_third_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_less_than_one_third_valset_changes.json deleted file mode 100644 index 92448510a..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_less_than_one_third_valset_changes.json +++ /dev/null @@ -1,451 +0,0 @@ -{ - "description": "Case: two lite blocks, less than 1/3 validator set changes, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "last_commit_hash": "D5439DD65D45EF1E51412691BCF2F6741D48AC1325572E08D48BD72F80669E70", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "036C46A0D3D02BD5609393501881911CCD9D28EFA81829E654AD02D421776BB8", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "8FD6915D5371DDD9BC5A1099B635CD847965634EB4C1C8602A7F6B9E2E479C2D", - "part_set_header": { - "total": "1", - "hash": "5079993121C414266DC4F5C356F1048276F8D1EEAB202771B5891C7092DB1517" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "8DguadcvB5NOBhR+SD7hWz5MC27PuQ8xp4YRl7ck+z5zRU5IqYS5uN7u5MEq3UGBwjEr7zNfuqR1VLNubhc+Cg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "NLFHLSDr2ut1cMN/TamBIAClayjgmnR6/eQ1tClzC6bgmkcgWmxj1yScxcAO8LyZ1lH1jHCk3s+xzlptkSElDg==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "ghpHjpnEJIcPUpo/kzp4EtiRKE31v33O0Mi+LTfrmdoclPARgoMVF9GzhNvpZySa8RWdnZc6AVpPmeBcqUimCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "0g7AXFFUWsNJ/fUQDeWMOhlTq9wV7MbiJ88VkcUtgzpGgf5j22wm+qpi1yGsssZGl4LBmdYpvSUEElOKujuoAg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - }, - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:15Z", - "last_block_id": { - "hash": "8FD6915D5371DDD9BC5A1099B635CD847965634EB4C1C8602A7F6B9E2E479C2D", - "part_set_header": { - "total": "1", - "hash": "5079993121C414266DC4F5C356F1048276F8D1EEAB202771B5891C7092DB1517" - } - }, - "last_commit_hash": "C5C941EC4E9296637A29C4A33348E42EAD6C8ACE0BCE4302A4C3DF1B850BD147", - "data_hash": "", - "validators_hash": "036C46A0D3D02BD5609393501881911CCD9D28EFA81829E654AD02D421776BB8", - "next_validators_hash": "036C46A0D3D02BD5609393501881911CCD9D28EFA81829E654AD02D421776BB8", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2" - }, - "commit": { - "height": "3", - "round": "1", - "block_id": { - "hash": "6DAF8F9DBCBA3CC85E46E8523D88C27356C646AB76141D7E59ADD9DF6D532FAF", - "part_set_header": { - "total": "1", - "hash": "75CFD5B7EBC2CA8C680789710CAB0B2991056C2EF4BAE017B9C8709754C361AE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "M/5t0j21Xzz9Ig/INzYLkSRM45M0bLZJIOA3arq7KihDomKm+atSNjxadY4XCnCfEAz3THsn6aOJyi3LqWt9Cw==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "bhc67LI7NiHcSEfnKj53upv0JJa3/0yC7uTDqgqMaLaQV9Tu65l18VUa+m8EEdoqy7oMBABfPTBelIgaj3+dDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "anmKyoJiqMqaUx7Yg+wwoP1yk6E34pWBcgOxwG+5FaxzzQGrrKjFt9gkzyloaj9ipBWoOlEeLEp55zrInKl5Cw==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "gMRvixV7iXFAqrCuAOju4HiJe6qe2ZU8Va1Ka68cSDldgQBKP0tINfcvm18i+6mOVRpoaJTgmGNBtnHOfZH2CQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_more_than_two_thirds_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_more_than_two_thirds_valset_changes.json deleted file mode 100644 index d4a7b4da8..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_more_than_two_thirds_valset_changes.json +++ /dev/null @@ -1,451 +0,0 @@ -{ - "description": "Case: two lite blocks, more than 2/3 validator set changes, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "last_commit_hash": "D5439DD65D45EF1E51412691BCF2F6741D48AC1325572E08D48BD72F80669E70", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "48EDBAFFB564AAA7AE0A8E3DE2AFA0ED4F64444B48587937B4F454703596404C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "2DDDDF1297BED341DDDCA18670FD3CF583BC74D023DA2D8336AC2CDEEABA9BDA", - "part_set_header": { - "total": "1", - "hash": "DBD8BC24177E9D6A95597AD17386ED38D420F8D5E97D453E40FB4E047B67154F" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "/bNg77MUVBZ45y2iNUeLRqPDXphqo0xf2av9EazersxSxS6Gg9cBoAVkpKo9Ix5zOlrCuP7MNH9wYNYmbel2Cg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Yo1vgPeZZpdKd08Al6e8erig1uuWvFMXX86bC6+5kQsoOQNffawDMNZqd3aWjwoiOm7GaHrZZPOjg6acj6JDBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "M6XdxzO1tZvSbVG7759C+7v8bQr4hkwcds4E2YumIPAofCRBG0pYjMh+JoCOf00q700Qini/BriLC1EJpeY6AA==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Szq59lW53Uj7lKUKgTPbKDHNK5djt2/TaA13gvyHzgZYm1FpfJD6mF1Wk1CkA5/eILqWfYzageaYvgYkzpYYCg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - }, - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:15Z", - "last_block_id": { - "hash": "2DDDDF1297BED341DDDCA18670FD3CF583BC74D023DA2D8336AC2CDEEABA9BDA", - "part_set_header": { - "total": "1", - "hash": "DBD8BC24177E9D6A95597AD17386ED38D420F8D5E97D453E40FB4E047B67154F" - } - }, - "last_commit_hash": "F35FAA211A970BE0F87FEEE47D471B1B03CFF1CC3C55646231BF4090A6AA032C", - "data_hash": "", - "validators_hash": "48EDBAFFB564AAA7AE0A8E3DE2AFA0ED4F64444B48587937B4F454703596404C", - "next_validators_hash": "48EDBAFFB564AAA7AE0A8E3DE2AFA0ED4F64444B48587937B4F454703596404C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295" - }, - "commit": { - "height": "3", - "round": "1", - "block_id": { - "hash": "071124F72D6AF72AC97EC643BC577F6810E26CA34993BA28A0C6ED287DAF47AF", - "part_set_header": { - "total": "1", - "hash": "1E45AF46930C1E34A457BC9A2FDDB9ABC5E7B9B00CCF2A041FA4672635733CE1" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "vXiSLV9CN98oT9KvO6cRgHOpJLVNyyXc1y421k9jtOuJ3Op7bcfr79W27+QXn6SNUgv1CicQwF8f6vkCmW4nBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "d3VDefKUpq6D+/R4jvF0c672LFM5gBeAyO8/Vcq4RGghcPPocXZws+gtFFZ+hv73IAbSQscm4JpIf+D63LZRCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "jgHQyUvnbRfn2v/k5rXh5GrmVhRR7E0YsDmdH4CVPAplOEHmwxjvRVCv444YwpUp7krvbuZ5dtoG5zhuax7ICw==" - }, - { - "block_id_flag": 2, - "validator_address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "kuXhsQ3vVq/qPqwHQzUVhWUQUyvEQy4NXcUJVltMGeRHz+LT7RIVddcM3U/J5RasxeTLgui56JcgkKmdENjJDg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_one_third_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_one_third_valset_changes.json deleted file mode 100644 index d0df25465..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_one_third_valset_changes.json +++ /dev/null @@ -1,388 +0,0 @@ -{ - "description": "Case: two lite blocks, 1/3 validator set changes, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": "1", - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "uGmIBqgS9cd3L8tdDNoECnp7dWB/9E5LVd67WCv2zjcihyRkQC9N7qv6HRYK4uVIx4A2TydKiPGR2iayGyADCg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gq9gLG1jOoYdTVGuvfRy0DFPEjARYDmQwWFDK3gIRSb/+hFLs773ULIbyw93n6M/tQdmWEvDZ2OI9LJ5hamCCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kF/JeXJ5hZajccjS0E36b7U9kcWu2dywnxeY74gO8Beu4+lbL/HIgXjv01RKIsJQoTl0LQF54ekf7ftU4fQXCQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": "1", - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "last_commit_hash": "CE50B907C13B48572BD2EFA1FED9A9341B7F680F3EC3F562ED0A8E745D6F528E", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "92B56B5EADC1236DC04154D4D22FB17A743DAC075DC0886234DBF430BC0A647F", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "0153E3DFDFAF4F6D6D9C7290D297B5580DE2EB33A7065F1B8A87447F418BCF13", - "part_set_header": { - "total": "1", - "hash": "79F36F0EAA0BF148E921BAC2AC329FCEEA87CC19848A418B97C09175E2BEE9E7" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "lfUhxslmeMaxpMt8Fp888Hj0jE2eaCmoNIh8Uwz/1DmwLFNBfMzYAhkZAmbn7lAD3aqHXErW/TLHGmejc34+Dg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "AkllOET/w8uWegGZLOSd2Ky2YLouTBN+q7b5/x7vWJ7ervhdde57J362+DKn4X2G7THx6++yZea9glCxk2ZkCA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "D9SlX4K0rsJ3G6pAgL7urnFbYg7zmgY6cIGky4FLrGnzob/2DbrSbwZfsXhrWeF/u2u/lUUPp52MrJq4rWeIBw==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - }, - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:15Z", - "last_block_id": { - "hash": "0153E3DFDFAF4F6D6D9C7290D297B5580DE2EB33A7065F1B8A87447F418BCF13", - "part_set_header": { - "total": "1", - "hash": "79F36F0EAA0BF148E921BAC2AC329FCEEA87CC19848A418B97C09175E2BEE9E7" - } - }, - "last_commit_hash": "ABC496BE31F33703CB14E0B20927CF3D4C91ADE5E133F1ACDDDF1673B575AA25", - "data_hash": "", - "validators_hash": "92B56B5EADC1236DC04154D4D22FB17A743DAC075DC0886234DBF430BC0A647F", - "next_validators_hash": "92B56B5EADC1236DC04154D4D22FB17A743DAC075DC0886234DBF430BC0A647F", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2" - }, - "commit": { - "height": "3", - "round": "1", - "block_id": { - "hash": "29593D4B37E92143833398B57900E16421D94E4951BEFFDF102373C843733571", - "part_set_header": { - "total": "1", - "hash": "2E39955B5EE48754ED1073B30635620115FE92CF0490EB7F543F0CEEED8BBD6C" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "w1nYGtIyH/wBRaMWmfw0E6aHpSGUzB9aFsCFfteh/DepWy3gEzsednxiqmPdQH/0c2I1tuZRjyAChe02SYVSAA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "+dCUz8jql5DZMXVuHLDxF3Pi8UbKT7VY6GZQ1a1R/8PDyyx0m4764gOqLn6nSM0VFrjd7G5mqUT/rSZyqlGkCg==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "Ok6qmZ392DawD7h49ythMS1ZiDozN2TG0eD646IFrxwu2i4fYlCn7h1fSki1u0ZhGqhHHsCQpFE2fuglOxl3AQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_two_thirds_valset_changes.json b/light-client/tests/support/single_step/sequential/validator_set/_two_thirds_valset_changes.json deleted file mode 100644 index 8beebfe77..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_two_thirds_valset_changes.json +++ /dev/null @@ -1,388 +0,0 @@ -{ - "description": "Case: two lite blocks, 2/3 validator set changes, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": "1", - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "uGmIBqgS9cd3L8tdDNoECnp7dWB/9E5LVd67WCv2zjcihyRkQC9N7qv6HRYK4uVIx4A2TydKiPGR2iayGyADCg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gq9gLG1jOoYdTVGuvfRy0DFPEjARYDmQwWFDK3gIRSb/+hFLs773ULIbyw93n6M/tQdmWEvDZ2OI9LJ5hamCCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kF/JeXJ5hZajccjS0E36b7U9kcWu2dywnxeY74gO8Beu4+lbL/HIgXjv01RKIsJQoTl0LQF54ekf7ftU4fQXCQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": "1", - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "last_commit_hash": "CE50B907C13B48572BD2EFA1FED9A9341B7F680F3EC3F562ED0A8E745D6F528E", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "732BB4932DBB44141CD0E9392AA88D078AA673920FD59848CB9A227A2C280F6F", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "C46D5CC1F77D0B1B710FF3677C7C8C12AA59CA9603743D982D7DBC25679A07F4", - "part_set_header": { - "total": "1", - "hash": "215E23C3BF8A2D9D36F96564D53F94F1652FD47A265EE13F83FD33F2DAE85844" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "b+H2N4K7IbMlMlcUDTxvCAwsXy9YADZhf5o67bWX0W5UcEvoNyaRESf4q30fPryBf36U8BaRMvnjZgic+u5bCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "cTbMVlPPMxHIWVOvoIWa+FBMPCbMKAE8BB+WtcHVUTcQEifdPmQ4sK0NRsHadUVtV85RzsYpGAw/GAu0oamUDw==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "wI6r4OzBISXXF3QYa67ZJGqvvPUPFB7pnWu0kvODvRmku69yJcjGf/CG4HdFAZ1mwAhPyp7t+Og6zbi/tfCuAA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - }, - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:15Z", - "last_block_id": { - "hash": "C46D5CC1F77D0B1B710FF3677C7C8C12AA59CA9603743D982D7DBC25679A07F4", - "part_set_header": { - "total": "1", - "hash": "215E23C3BF8A2D9D36F96564D53F94F1652FD47A265EE13F83FD33F2DAE85844" - } - }, - "last_commit_hash": "A91371D954867D13269898B24DFB03D4A2D44569C07FE14779786AC00C0D5DC5", - "data_hash": "", - "validators_hash": "732BB4932DBB44141CD0E9392AA88D078AA673920FD59848CB9A227A2C280F6F", - "next_validators_hash": "732BB4932DBB44141CD0E9392AA88D078AA673920FD59848CB9A227A2C280F6F", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "03EC0413849A3311A5341E7A69D6C544E9A30310" - }, - "commit": { - "height": "3", - "round": "1", - "block_id": { - "hash": "200B0B5145164BC845E9101062ED495AF28AEF62836B37459B6ACC0AC033E424", - "part_set_header": { - "total": "1", - "hash": "BE403574F924CDFFA1D65866FFE4279A4F834E85C4BFDE6C52BFFBAC5D0AB794" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "I0o6wGlg6iiz6HEyNJGy4PV+5DUq7sQeWG6hdCNKg+7rlH15XXIL4QmKLQwyr5wr/Qn6mjBreGkGKxB1yz/RAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "YYlqZLmslcjCriSgFK2cdg5nPGxk+2px8LpJYH2bZymwYFrCtk+m6WFxYJSikiEjqblt8EXh8uS4rOLSjBxICA==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "Mh+EXA2+JKqpuy7vjEZpTzsL/2IFQ0rkwsA+3UKjCWGWQZzcYit+eUmVkBuVs6YhXxenJPw/3Sjl5RUZ2a9bDA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_valset_changes_fully.json b/light-client/tests/support/single_step/sequential/validator_set/_valset_changes_fully.json deleted file mode 100644 index ecf61cc2d..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_valset_changes_fully.json +++ /dev/null @@ -1,514 +0,0 @@ -{ - "description": "Case: two lite blocks, validator set changes completely, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "5D634879D82042E0AF0EA3F2971A3A32290C68FD460321B8AF7A917AA07AAB94", - "next_validators_hash": "5D634879D82042E0AF0EA3F2971A3A32290C68FD460321B8AF7A917AA07AAB94", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "2EB6F5FA9AAFDB54CB286AA79AB51F83739FE14ED920FE3FC0539C1F220D9D1F", - "part_set_header": { - "total": "1", - "hash": "D9CEF668B474BC7CD90A909A7273650B16ABD3D3FC9876F108F4F490710165B0" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "Jg7HcrkFjXDSu2bn16b7co4VAySH16G39LNBk37P7r0N6n9MVuCHc7rAScEZe5CpiIHG+G8qN/lQJpAztKo2AQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xRHlaPGTF2le2Y3lUMCjcCVmiH0RhP3FLstJON+PtFw1lisH8sihrvhqHW8yp+DYVQB1E1tyfVLPDgLjiuE9CA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "wWrxfbb/n1RVNhCR6hne+sc1iYB3cshyUO0q8Fg8XNebQlkSrJTqiWPt4XyMmypsSba1OEOULT47zM7OaeQNCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "o0VniJFncFaq2hNSadJRDH38wOnwtOCKzAPLZRi5mwARZz/4cIT+zkXVHO2vvLaOABL6LMbok0QDCYwp6K4KBA==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "aX7deHWVmZ3ekCBsSGYTjaAqer4MF68KycHHDKrR5KBSYsQ0A9FA2mUrPtDrIsypBXuouK8xoG4LFaAvQ7LpAQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-200" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-200" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "2EB6F5FA9AAFDB54CB286AA79AB51F83739FE14ED920FE3FC0539C1F220D9D1F", - "part_set_header": { - "total": "1", - "hash": "D9CEF668B474BC7CD90A909A7273650B16ABD3D3FC9876F108F4F490710165B0" - } - }, - "last_commit_hash": "10D072F2B758ACA3D0A03CA5ECD08B704CD17A7749E44D4957D6A186281768FF", - "data_hash": "", - "validators_hash": "5D634879D82042E0AF0EA3F2971A3A32290C68FD460321B8AF7A917AA07AAB94", - "next_validators_hash": "20E53822958F67EF2B65D48DE0E97C437C099F51609B1AC13F12F1EB2F101D05", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "10F427D310AB14961658AA4157A60A0776A5B02A263B04E30FAED9D82A55B56C", - "part_set_header": { - "total": "1", - "hash": "24C52C4DEACA0659CEB742A0066DF7E06FBCC67832DF40C0D54E5B280EDCBBC9" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "6+oxRMEPhV01+EWkhph8ZxR+ZFHvZdcr6VzR17h0bAN5nBohFzfcXuuxl2kAPRfhVFw6g1m5/0MFznWALq8eDA==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "rImKQFTR1szKZFvdkrn32oaoOw3cbbh5dB9ILBBMP8qmJlqq/54xcKLezxTq0QwyLdOLRQq/81Lxs0EEaKtdBw==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "f4wo07jJMnHgxeijpQW4qsQE6WtqalisGVKqjM/0gtcIJgwwDXc2e3upkV1g/ci3ifEZZShfIy6WqbEdNkjSBg==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "9q5nNxcFWo3uRC4cJz+GvUgWtrjDxuBvr8JvI3BXNc5K7Iofd4Jbw//nk7YeO5Gxduz6sxxzMIZJu/5Ddn0dCg==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "jDPBw8PGl9QmU6A9rbQ+4hF0FwuXB7m3JmOF7wFAfAIfWfZi4RKX+h9HkCci2eicDr5ij18QlTXkqG4MC7cWCA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "-200" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XCK6BWW7PWfsMof+x3lYRaNKbtP9J2WoOUztl9TAumA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0859D2467F0DA63744B220E6E270DD3F0EEAC10E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "I44Rs7aDNyhp+m0Tx8v5h5+PadBk0hrnGRxjjRcUN1M=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0D7350841ACB4A53C7717C7E5776A5E0DB6D596E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "x0lc+iqSimWb7E5qjqGjhhcGfHvInloqPqcKeFs94Lo=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "-200" - } - } - }, - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:15Z", - "last_block_id": { - "hash": "10F427D310AB14961658AA4157A60A0776A5B02A263B04E30FAED9D82A55B56C", - "part_set_header": { - "total": "1", - "hash": "24C52C4DEACA0659CEB742A0066DF7E06FBCC67832DF40C0D54E5B280EDCBBC9" - } - }, - "last_commit_hash": "EF480C96177D9DBE0385613E12CBA1824A0FF4B2431756C5C713E6F1B23CD4DE", - "data_hash": "", - "validators_hash": "20E53822958F67EF2B65D48DE0E97C437C099F51609B1AC13F12F1EB2F101D05", - "next_validators_hash": "20E53822958F67EF2B65D48DE0E97C437C099F51609B1AC13F12F1EB2F101D05", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F" - }, - "commit": { - "height": "3", - "round": "1", - "block_id": { - "hash": "21BA9CFB515FE00FE08E89C5E74E4E425C705CBFA309796A3540A897773EDEAB", - "part_set_header": { - "total": "1", - "hash": "DAB3C93C1C84059ECDC13C6B3D321E8FDE28A0ABEEB8C3BBBC18818B15F09ADC" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "fROC3Bfgv1NUP3VFFJxXxNwhztPINLHeQ+c9f1IilU2Zos6iOQqsRqwv6EEgOZPorEPN6cRP7ah3K1vkRx0UCg==" - }, - { - "block_id_flag": 2, - "validator_address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "WXzDjC5RUsVWCSYBe/5P7YtCHdmoAK5FdKxkqrl4+Oi+t120FpubzLVJLjVVrWkFLtR6idmZleINezZGgR/PCg==" - }, - { - "block_id_flag": 2, - "validator_address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "Ho+RUHeFewxeWHgJowH5Y3rsEpkvRRexDAO4kM/Y+qSBPU04AJMsCNWVhSnK7G2wLbWV6m103dbTO3kx1qZjCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "0859D2467F0DA63744B220E6E270DD3F0EEAC10E", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "BuT0brdag15S5S0eFaE5Eo2ph2Twwv8FT1vo62nH+E1eMNZkNhnP42scZJlsGiJ7rztfo7oNEf9UUT+OsmEmDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "0D7350841ACB4A53C7717C7E5776A5E0DB6D596E", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "UpqhA3SrdSacvIRhJIDL8anoiTBFfrEPmrP+sP5KL3DZCK1IIlaZy2I7N3lm9vHB7cpJRM2cfLA6bU12tt9FAQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XCK6BWW7PWfsMof+x3lYRaNKbtP9J2WoOUztl9TAumA=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "0859D2467F0DA63744B220E6E270DD3F0EEAC10E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "I44Rs7aDNyhp+m0Tx8v5h5+PadBk0hrnGRxjjRcUN1M=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "0D7350841ACB4A53C7717C7E5776A5E0DB6D596E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "x0lc+iqSimWb7E5qjqGjhhcGfHvInloqPqcKeFs94Lo=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "-200" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "074D8A3973885CD484ED4904DC82ED812773C5BA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "XCK6BWW7PWfsMof+x3lYRaNKbtP9J2WoOUztl9TAumA=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0859D2467F0DA63744B220E6E270DD3F0EEAC10E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "I44Rs7aDNyhp+m0Tx8v5h5+PadBk0hrnGRxjjRcUN1M=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "0D7350841ACB4A53C7717C7E5776A5E0DB6D596E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "x0lc+iqSimWb7E5qjqGjhhcGfHvInloqPqcKeFs94Lo=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "-200" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_valset_size_doubles.json b/light-client/tests/support/single_step/sequential/validator_set/_valset_size_doubles.json deleted file mode 100644 index a7e82f837..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_valset_size_doubles.json +++ /dev/null @@ -1,391 +0,0 @@ -{ - "description": "Case: two lite blocks, validator set increases 2x, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "ADAE23D9D908638F3866C11A39E31CE4399AE6DE8EC8EBBCB1916B90C46EDDE3", - "next_validators_hash": "ADAE23D9D908638F3866C11A39E31CE4399AE6DE8EC8EBBCB1916B90C46EDDE3", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "part_set_header": { - "total": "1", - "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "NaNXQhv7SgBtcq+iHwItxlYUMGHP5MeFpTbyNsnLtzwM6P/EAAAexUH94+osvRDoiahUOoQrRlTiZrYGfahWBw==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "tw0csJ1L1vkBG/71BMjrFEcA6VWjOx29WMwkg1cmDn82XBjRFz+HJu7amGoIj6WLL2p26pO25yQR49crsYQ+AA==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "76B0FB738138A2C934300D7B23C280B65965D7427DA4D5414B41C75EBC4AD4C3", - "part_set_header": { - "total": "1", - "hash": "073CE26981DF93820595E602CE63B810BC8F1003D6BB28DEDFF5B2F4F09811A1" - } - }, - "last_commit_hash": "73916609DD7C8268FBD0A6A118D041F8D6E9EDC18BAA30B221B5D7D04EAE1F2F", - "data_hash": "", - "validators_hash": "ADAE23D9D908638F3866C11A39E31CE4399AE6DE8EC8EBBCB1916B90C46EDDE3", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "5750BB0C6B0A5BB3B3E3C7254E8523D02981843B0052203A6A8851EA2715D57B", - "part_set_header": { - "total": "1", - "hash": "EBCC54DF2FC6F66DBB4EF1F34B612ED0A32AAD8F492BF7E27E3A2F8BEECC3B84" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "/WmbJy+tfXx+/8Um/WU7SZ8fGdkaqmnNZ35zxhSo9kedkJhL8sMBzPiCxpur7+GremEJFtxVLhzQGYkWjJXsCg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "tvjBq7xsxR0RC3mKmjy+dgyOkK2cIdA0CyQo1g14ASLc5AyA1CNg7kIIEL4q3ojn8pT9HiXFaMJ0z4jxxA4RBg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - }, - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:15Z", - "last_block_id": { - "hash": "5750BB0C6B0A5BB3B3E3C7254E8523D02981843B0052203A6A8851EA2715D57B", - "part_set_header": { - "total": "1", - "hash": "EBCC54DF2FC6F66DBB4EF1F34B612ED0A32AAD8F492BF7E27E3A2F8BEECC3B84" - } - }, - "last_commit_hash": "7443547152722BA6061E141FCA7BAA970857CEF647EC13D8847F7E4182817673", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "3", - "round": "1", - "block_id": { - "hash": "61D474D8DF2941DC662FBF87CD31DD9BC2E26359B80949E171A7CE026C15528C", - "part_set_header": { - "total": "1", - "hash": "E3A68D13F47F0DDCD8CBC0BF9617B4D113F7B49A734D87353786A9838C2CD3AD" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "3CkPIygYGFPEEz5ByC+KLseJQLGB0zy9cPoDVSH6aT3Bu1ooBE5bL4BOYJxyAjplMJlT+QErH74kwCnB8iQGBg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "UlYUSWlLwQYstDLHPE9gd4NWTpIwkbcdIFHkvuIvJdhUUai5h2GF4QwVq2WuqLaL+4DKsAbqfdZ6lWCJ4A9VCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "KGt2uJfY7yKEHKVwfbJ4Yx5tmEIsd2WA3LwsoS83C45SBz6xyZOR+dj2IJxm/is2E83/gd9ag25rbQto5RdBBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "U4Up6TVBugc85JQmOmlRnnGK+1O0+YkS/GNx96wIJ43f5NkwavQZ0aZWh3P4qyYl2fJBforjKxM2ELZ9oiyRAQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/_valset_size_halves.json b/light-client/tests/support/single_step/sequential/validator_set/_valset_size_halves.json deleted file mode 100644 index 01f901a44..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/_valset_size_halves.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "description": "Case: two lite blocks, validator set reduces to half, no error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "last_commit_hash": "D5439DD65D45EF1E51412691BCF2F6741D48AC1325572E08D48BD72F80669E70", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "ADAE23D9D908638F3866C11A39E31CE4399AE6DE8EC8EBBCB1916B90C46EDDE3", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": "1", - "block_id": { - "hash": "4007EAB43FB13ED8648B3388FEF543740E19FE9CA11A6FFC712685E6C09D0B02", - "part_set_header": { - "total": "1", - "hash": "C02108A3CFAE6A6BC9F83A13F8FF74A5B490506966C685BA61358883B538BBE6" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "bWoo8vsIGinGLisaRbSO72gLbRbpE3rYNdq21bBUmGYABLrnWNxXlb6aKEPvqBWRm1mDWYB4jd51zLqJHBakBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "UOszbjSstcBSGeSLZnNPpIrsQSAzQDQ5JnsIQVSJaH6zBxVrXevjpD3BO33quvYDc2kSq00FkA1OL7jMQNVNAA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "NalzLfVZ8BwvNzfiKQ4lbWJGypo3ADFGVG/oXc/tU2nPQtIHsd5hifSDQYI1s2eMRW2qFkVSiojpjulfc9YCAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "0DEssriQmGP8ULQ3snMmUOiLpJV7CxM3QHXXiQ3ecQgKwzKiDBZwzlOSVJkpGt0n0Nq/ZlZKTOcCWztkBK8FCw==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - } - }, - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:15Z", - "last_block_id": { - "hash": "4007EAB43FB13ED8648B3388FEF543740E19FE9CA11A6FFC712685E6C09D0B02", - "part_set_header": { - "total": "1", - "hash": "C02108A3CFAE6A6BC9F83A13F8FF74A5B490506966C685BA61358883B538BBE6" - } - }, - "last_commit_hash": "1298E834C4F0CEB7BA5185417819392C43A8E5D7B6B74204DA79B29A7CF21007", - "data_hash": "", - "validators_hash": "ADAE23D9D908638F3866C11A39E31CE4399AE6DE8EC8EBBCB1916B90C46EDDE3", - "next_validators_hash": "ADAE23D9D908638F3866C11A39E31CE4399AE6DE8EC8EBBCB1916B90C46EDDE3", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "3", - "round": "1", - "block_id": { - "hash": "53B8F366C0D6EDB6D70C48BB67DBF3CA520B88FF25B6B7DBA09BD8E5C9A49D36", - "part_set_header": { - "total": "1", - "hash": "7CD48149E322EC0BB7EA319D93F708578F1C3359F015D70856F3A84A65B6D3B8" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "/NYDfGBfb9fJiB/+b8Wn1ZGqolN87PHAXejduUF7p7ABNxMj2jEU21K8fLFSaGVwn8NsEmyTmMNKjodMLnYyAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "Ft9q4pQJTVrk5xFEbq69iXzlkpedtev7JYsYZc/k5YLMjyE0x9v59DFTqnSK4vtAiuMsITd/PaNnco82ED+NAA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/sequential/validator_set/faulty_signer.json b/light-client/tests/support/single_step/sequential/validator_set/faulty_signer.json deleted file mode 100644 index 7c7788c56..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/faulty_signer.json +++ /dev/null @@ -1,263 +0,0 @@ -{ - "description": "Case: one lite block, faulty signer (not present in validator set), expects error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": 1, - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": 1, - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "last_commit_hash": "D5439DD65D45EF1E51412691BCF2F6741D48AC1325572E08D48BD72F80669E70", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "AFCEFE8A9B59376401E78B7732D25A06D82625D0AD5B915929D8AF61D323F43F", - "part_set_header": { - "total": 1, - "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "Bn8cV8WlqGjezZcFgQey0ikBshIHw56jpuzWssO2/0HOpMC1Mr2mJ5mxEd4mpsQ4PwenpGtrLJv11PFK6aJLBw==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "mhgrDo+fV5GaS34CZn//zgNx24H21Ila9io5HPgxeEWbG24eGLp0GAAlGPryT9bdv5LXPUq8wZpUHxAcyhvZAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "+g5Rhm8Utshm0SN2gxKeRrqsJyUO32BxDqTVu0wHzaJz0cFJWZxA2JaYxaf6EzuQULkwp+oh6u3xboy/e5wHAg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/sequential/validator_set/wrong_valset.json b/light-client/tests/support/single_step/sequential/validator_set/wrong_valset.json deleted file mode 100644 index 442e887bc..000000000 --- a/light-client/tests/support/single_step/sequential/validator_set/wrong_valset.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "description": "Case: one lite block, wrong validator set, expects error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": 1, - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "uGmIBqgS9cd3L8tdDNoECnp7dWB/9E5LVd67WCv2zjcihyRkQC9N7qv6HRYK4uVIx4A2TydKiPGR2iayGyADCg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gq9gLG1jOoYdTVGuvfRy0DFPEjARYDmQwWFDK3gIRSb/+hFLs773ULIbyw93n6M/tQdmWEvDZ2OI9LJ5hamCCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kF/JeXJ5hZajccjS0E36b7U9kcWu2dywnxeY74gO8Beu4+lbL/HIgXjv01RKIsJQoTl0LQF54ekf7ftU4fQXCQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "2", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": 1, - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "last_commit_hash": "CE50B907C13B48572BD2EFA1FED9A9341B7F680F3EC3F562ED0A8E745D6F528E", - "data_hash": "", - "validators_hash": "B484E0C9EC0F151960F870D3E897D6EF856A096C7694C160B7A9615D7CD18540", - "next_validators_hash": "B484E0C9EC0F151960F870D3E897D6EF856A096C7694C160B7A9615D7CD18540", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "03EC0413849A3311A5341E7A69D6C544E9A30310" - }, - "commit": { - "height": "2", - "round": 1, - "block_id": { - "hash": "ECE1D8CE9CA2EC2FD97C691BC77ADD1E839A8F77341DE46C37958950DC7719ED", - "part_set_header": { - "total": 1, - "hash": "7CC80FAE035AE9FE8D2A7B5497B72937CFC01C4ADD909E1EC18BEB60FC47D60F" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "GGH/WteiPCOFYO+sucwH4Iz3H/VA9/rgqZWxDUPjlUGEkKY1OpEOyXJzhWxd2NgYLp/lFkF2+dyhWV0PZHC5DA==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "IaOUGr5FPb9QQqbjZ+OPAYclCpSEM7wBcijMyEFEaSnCMLUXHlkDzyFJOylAsPZv0fQ6BOfv4XW/JZA45u1aCA==" - }, - { - "block_id_flag": 2, - "validator_address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "timestamp": "2019-11-02T15:04:15Z", - "signature": "r9rHrhst6aeEuc5cAKdbPOErRTijU+3xTFTAzT88hDTmf/hcW0LUrxnVmOdnkNTFW+jEhXXDZOJsEsrN6RpdDQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/skipping/commit/_more_than_two_third_vals_sign.json b/light-client/tests/support/single_step/skipping/commit/_more_than_two_third_vals_sign.json deleted file mode 100644 index aad5a18f4..000000000 --- a/light-client/tests/support/single_step/skipping/commit/_more_than_two_third_vals_sign.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "description": "Case: Trusted height=1, verifying signed header at height=3 where more than two-thirds vals did sign, should not expect error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": "1", - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "5E87BD3A35C62D06138273453AF49C7728E4F8FB4CAFB0784F4816D5052AA349", - "part_set_header": { - "total": "1", - "hash": "DC797E9C450AE5FD0D8000E31672BE3EE97B6C0A3BD69239187F75C00C39D72B" - } - }, - "last_commit_hash": "D5439DD65D45EF1E51412691BCF2F6741D48AC1325572E08D48BD72F80669E70", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "3", - "round": "1", - "block_id": { - "hash": "673A5926573823D76B84C01877887D9AA305E1FAFE50EC167F433E7B3A0FAABB", - "part_set_header": { - "total": "1", - "hash": "08B22B6102C1AA5A35FE903C7ED2631A0DFC38D09F4592A39F9C1B5D82F61F85" - } - }, - "signatures": [ - { - "block_id_flag": 1, - "validator_address": "", - "timestamp": "0001-01-01T00:00:00Z", - "signature": null - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "IRwtPBFCkc8Yu+lbWiQxdyi3R7xIdbq/gDpR0Kvu8tVji5R4RkpxxQMfG4kifR2P+B/WbPLrsmep942qXFZeCg==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "SlPhkzu1YtvKr2SXG3gLZwNfoe/Y/xWAgnQGHSDPzjUzlNC79mUqBRrUvKqojXGpSeGgrNUvW/4uCaVCvUBECg==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "IUSW0/ZRdXN4pemlovBHqsGCGRQi/cbPupjqZeEB+e051fAee4QaQrGERxSZwqQ7edrFlRY6Z2L/2Z0/w2MLDA==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/skipping/commit/more_signatures_than_validators.json b/light-client/tests/support/single_step/skipping/commit/more_signatures_than_validators.json deleted file mode 100644 index 9c018b83d..000000000 --- a/light-client/tests/support/single_step/skipping/commit/more_signatures_than_validators.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "description": "Case: commit contains more signatures than number of validators in the set, expects error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": 1, - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "uGmIBqgS9cd3L8tdDNoECnp7dWB/9E5LVd67WCv2zjcihyRkQC9N7qv6HRYK4uVIx4A2TydKiPGR2iayGyADCg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gq9gLG1jOoYdTVGuvfRy0DFPEjARYDmQwWFDK3gIRSb/+hFLs773ULIbyw93n6M/tQdmWEvDZ2OI9LJ5hamCCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kF/JeXJ5hZajccjS0E36b7U9kcWu2dywnxeY74gO8Beu4+lbL/HIgXjv01RKIsJQoTl0LQF54ekf7ftU4fQXCQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "7", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "CB139C4EF48BAE1007BB3CF4E39131C3B27782CB8D12E1690C916C4CFEA359E0", - "part_set_header": { - "total": 1, - "hash": "9C6CEEFF8397D19C6AB5AD3F00608D3152090A9B645D3C3CC9D8E66C8B319034" - } - }, - "last_commit_hash": "CE50B907C13B48572BD2EFA1FED9A9341B7F680F3EC3F562ED0A8E745D6F528E", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "7", - "round": 1, - "block_id": { - "hash": "22D13748C59A4A6D05B38FBFF520F6F6BA7BD74DA1ECBDD8419CF9B196DD9E5A", - "part_set_header": { - "total": 1, - "hash": "A862597A9288A057560DA73B642C7E1588C6D62BE1C89DBF9FD81C2E8FFA9E46" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:40Z", - "signature": "QhxBEPW9FejpUm5PKyKe6ZdO0tbYOl67D4PDmytwyoimi/4bYJuPY70DqBT1wuu96t/+lpJhIe+v1wYhQNhRCA==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:40Z", - "signature": "sbSWtG0eMcYM8u24mG856AeQ68iEvTMkDg8owbz/GMtIup6toIDNCXPNVTfKplFY5r0ejXivs445yVaBt67/DA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:40Z", - "signature": "7eiIrsXRb4uHQB4gbbZR2e6NHNHP30O0rhP2hfSlNq+8OsBz62WRNu1vVQ/eIc6n5R99GCUabT+z4ZjoFDpBDQ==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:40Z", - "signature": "zoEJsI6NvB7FnlCHrAXvLNsuPO8JQZfs3SxI/b9fFEOvAoVKA1QUPI4BAEuBlALOtDHfLym9leb3EDDkJ1uaBg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/skipping/commit/no_signatures.json b/light-client/tests/support/single_step/skipping/commit/no_signatures.json deleted file mode 100644 index 5cc8adac4..000000000 --- a/light-client/tests/support/single_step/skipping/commit/no_signatures.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "description": "Case: one lite block, no signatures present in commit, expects error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "7", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "5C90F6FF07D5C5CFDD5334877502167F5823D99A7D4DF01AAD138B61B45519C9", - "part_set_header": { - "total": 1, - "hash": "D173D7CB2421A4D1A1214E45ADDCDC99FCB644A9EFECAE6FBD04BF4397DCE3FD" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "7", - "round": 1, - "block_id": { - "hash": "E2D461B56E897D006C8C6EB27B8C04E5B356233A33CF3CE563039BAC982A49EE", - "part_set_header": { - "total": 1, - "hash": "019870B693E80D52541782D79256EED22A3694B1C45DC498D69128DB9CE6F43C" - } - }, - "signatures": [] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/skipping/commit/one_third_vals_dont_sign.json b/light-client/tests/support/single_step/skipping/commit/one_third_vals_dont_sign.json deleted file mode 100644 index 3b7699c23..000000000 --- a/light-client/tests/support/single_step/skipping/commit/one_third_vals_dont_sign.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "description": "Case: Trusted height=1, verifying signed header at height=3 where 1/3 vals dont sign, should expect error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": 1, - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "uGmIBqgS9cd3L8tdDNoECnp7dWB/9E5LVd67WCv2zjcihyRkQC9N7qv6HRYK4uVIx4A2TydKiPGR2iayGyADCg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gq9gLG1jOoYdTVGuvfRy0DFPEjARYDmQwWFDK3gIRSb/+hFLs773ULIbyw93n6M/tQdmWEvDZ2OI9LJ5hamCCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kF/JeXJ5hZajccjS0E36b7U9kcWu2dywnxeY74gO8Beu4+lbL/HIgXjv01RKIsJQoTl0LQF54ekf7ftU4fQXCQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "BF9535C5A5FEFB00719BAB70B177C0D4EA3E18E433E91E396EC61ADE2CE12161", - "part_set_header": { - "total": 1, - "hash": "1DC8F8E942E7FDFB42A83B3E308FCBD6CC7602F60FB7812DC91F91A6AFAE295A" - } - }, - "last_commit_hash": "CE50B907C13B48572BD2EFA1FED9A9341B7F680F3EC3F562ED0A8E745D6F528E", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "3", - "round": 1, - "block_id": { - "hash": "E56DEC6C1AF5879B55DB7288CE698E7C67BAD20011371BF1EC53845079583524", - "part_set_header": { - "total": 1, - "hash": "E7198B911EF65EA64C7A1601504F116213E27AE32A5D2BD6B5BDBFB3F28A69DE" - } - }, - "signatures": [ - { - "block_id_flag": 1, - "validator_address": "", - "timestamp": "0001-01-01T00:00:00Z", - "signature": null - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "w1RvpvDNe7aS2RBXrHBTJPbpQ9SdBVX38Bh+se+5zziL0+sihK6SZqrnHBulH7x4VUMDHgJg5dVwXwkjiOLHAA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "UaEzvVJ5ewddDy5mnuBfIzEDpcMUX2La8PMZhjjKTN/IVVRnrxgLZ4pbKg+tAD4eho5KYVkqAVn2u1m9XQuWAg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/skipping/header/header_from_future.json b/light-client/tests/support/single_step/skipping/header/header_from_future.json deleted file mode 100644 index 06e51ef94..000000000 --- a/light-client/tests/support/single_step/skipping/header/header_from_future.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: Trusted height=1, fails at height=6 with error - header_from_future", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:04:05Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "5B769D15E38158CBE7CD657DACC5505C857C0290951CD364A232DBF611024B22", - "part_set_header": { - "total": 1, - "hash": "9CE8DAB030B30FFC52D03E03ADA6310AD1A3F03E3423493F2388B4575F53FEEE" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "3", - "round": 1, - "block_id": { - "hash": "91C69B5C2135FC990C55328044785D55347C14D34AC0C4CB294C4C998011CCEE", - "part_set_header": { - "total": 1, - "hash": "BE6B7084656BF44140CB0B948A75ED2D3660F40E37B4549608FC6B737F37E624" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "nB/f2m1jPqOwcPMPqNw3+QEgA9ZNx53Kd5AEARzLjS/y3baZpOC1qbyKxB/4jK0+DOm9uUpyZXZq6tW8mXRJAQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/skipping/header/out_of_trusting_period.json b/light-client/tests/support/single_step/skipping/header/out_of_trusting_period.json deleted file mode 100644 index 83b494435..000000000 --- a/light-client/tests/support/single_step/skipping/header/out_of_trusting_period.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "Case: Trusted height=1 but is out of trusting period, verifying signed header at height=6, expects an error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "round": 1, - "block_id": { - "hash": "9FF0F7C1F18374545CBC009BD6E59566AA568324D542050B5683615ADCAC6A47", - "part_set_header": { - "total": 1, - "hash": "5DEAF7B76F7C379B7850946013451BF2BA23EA01CB81BB320889782B2A6E7BD3" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "K9TiLbablYPl7Fz4gibHhG5Fc80if/sMO/3zIcKvVPOWuZMgSimwLHZIGcEfEyQpXFQfFzV6Pe0R2tzsyNpiAg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "trusting_period": "5000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "6", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "99399EF10C52CD14F1C256C93A575142FEFD529F29A2838F370ADDF5F44BE7BA", - "part_set_header": { - "total": 1, - "hash": "E34CEDF8C84D8D464CA2E86819640F413D4EFD93237C017AE73B8BBABD1FED26" - } - }, - "last_commit_hash": "A07B92432C2504E8C869B2E9853FDAE071BC364C222FE8520C112E645962325A", - "data_hash": "", - "validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "next_validators_hash": "75B9F27F25F3515EF7CA61DD42C272CCC280C537E6A9ED493710EB361CB90B0D", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "6", - "round": 1, - "block_id": { - "hash": "5C90F6FF07D5C5CFDD5334877502167F5823D99A7D4DF01AAD138B61B45519C9", - "part_set_header": { - "total": 1, - "hash": "D173D7CB2421A4D1A1214E45ADDCDC99FCB644A9EFECAE6FBD04BF4397DCE3FD" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:35Z", - "signature": "PmJts3lD2ExkXzHITbiGmnsFOpR54o5JA16iAhvkKFh5mJPzl5MgIaAPExLMxfKbh2p8w2yxBqJ9bkmQOWxXCg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "0" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/single_step/skipping/validator_set/_skip_five_blocks.json b/light-client/tests/support/single_step/skipping/validator_set/_skip_five_blocks.json deleted file mode 100644 index 6eaa4f522..000000000 --- a/light-client/tests/support/single_step/skipping/validator_set/_skip_five_blocks.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "description": "Case: Trusted height=1, verifying signed header at height=7, should not expect error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "1", - "block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": "1", - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "uGmIBqgS9cd3L8tdDNoECnp7dWB/9E5LVd67WCv2zjcihyRkQC9N7qv6HRYK4uVIx4A2TydKiPGR2iayGyADCg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gq9gLG1jOoYdTVGuvfRy0DFPEjARYDmQwWFDK3gIRSb/+hFLs773ULIbyw93n6M/tQdmWEvDZ2OI9LJ5hamCCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kF/JeXJ5hZajccjS0E36b7U9kcWu2dywnxeY74gO8Beu4+lbL/HIgXjv01RKIsJQoTl0LQF54ekf7ftU4fQXCQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "7", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "CB139C4EF48BAE1007BB3CF4E39131C3B27782CB8D12E1690C916C4CFEA359E0", - "part_set_header": { - "total": "1", - "hash": "9C6CEEFF8397D19C6AB5AD3F00608D3152090A9B645D3C3CC9D8E66C8B319034" - } - }, - "last_commit_hash": "CE50B907C13B48572BD2EFA1FED9A9341B7F680F3EC3F562ED0A8E745D6F528E", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "7", - "1", - "block_id": { - "hash": "22D13748C59A4A6D05B38FBFF520F6F6BA7BD74DA1ECBDD8419CF9B196DD9E5A", - "part_set_header": { - "total": "1", - "hash": "A862597A9288A057560DA73B642C7E1588C6D62BE1C89DBF9FD81C2E8FFA9E46" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:40Z", - "signature": "QhxBEPW9FejpUm5PKyKe6ZdO0tbYOl67D4PDmytwyoimi/4bYJuPY70DqBT1wuu96t/+lpJhIe+v1wYhQNhRCA==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:40Z", - "signature": "sbSWtG0eMcYM8u24mG856AeQ68iEvTMkDg8owbz/GMtIup6toIDNCXPNVTfKplFY5r0ejXivs445yVaBt67/DA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:40Z", - "signature": "7eiIrsXRb4uHQB4gbbZR2e6NHNHP30O0rhP2hfSlNq+8OsBz62WRNu1vVQ/eIc6n5R99GCUabT+z4ZjoFDpBDQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/skipping/validator_set/_skip_one_block.json b/light-client/tests/support/single_step/skipping/validator_set/_skip_one_block.json deleted file mode 100644 index f49aee2bf..000000000 --- a/light-client/tests/support/single_step/skipping/validator_set/_skip_one_block.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "description": "Case: Trusted height=1, verifying signed header at height=3, should not expect error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "1", - "block_id": { - "hash": "A245849C14EF8556CBF925997900CDD4B5519981FD96A2DBE822E5F048031ABD", - "part_set_header": { - "total": "1", - "hash": "D1F30CEBE0D8767074E22104CC7F548E41003C096B776C6152A5CAF48F72E63A" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "uGmIBqgS9cd3L8tdDNoECnp7dWB/9E5LVd67WCv2zjcihyRkQC9N7qv6HRYK4uVIx4A2TydKiPGR2iayGyADCg==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "gq9gLG1jOoYdTVGuvfRy0DFPEjARYDmQwWFDK3gIRSb/+hFLs773ULIbyw93n6M/tQdmWEvDZ2OI9LJ5hamCCQ==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "kF/JeXJ5hZajccjS0E36b7U9kcWu2dywnxeY74gO8Beu4+lbL/HIgXjv01RKIsJQoTl0LQF54ekf7ftU4fQXCQ==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "3", - "time": "2019-11-02T15:04:10Z", - "last_block_id": { - "hash": "BF9535C5A5FEFB00719BAB70B177C0D4EA3E18E433E91E396EC61ADE2CE12161", - "part_set_header": { - "total": "1", - "hash": "1DC8F8E942E7FDFB42A83B3E308FCBD6CC7602F60FB7812DC91F91A6AFAE295A" - } - }, - "last_commit_hash": "CE50B907C13B48572BD2EFA1FED9A9341B7F680F3EC3F562ED0A8E745D6F528E", - "data_hash": "", - "validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "next_validators_hash": "C403871B77A3295FFF1EE321424FC969EFAD87EF16740DF28A1B6CA62CA0977C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "026CC7B6F3E62F789DBECEC59766888B5464737D" - }, - "commit": { - "height": "3", - "1", - "block_id": { - "hash": "E56DEC6C1AF5879B55DB7288CE698E7C67BAD20011371BF1EC53845079583524", - "part_set_header": { - "total": "1", - "hash": "E7198B911EF65EA64C7A1601504F116213E27AE32A5D2BD6B5BDBFB3F28A69DE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "cynkKHMj7Q+4HpeSMntB0XgpvEciMKgYb/twD0/QEl7aotW2gXrCxCFMgw1ph5KvVEWRRrjSGC7IJTrHV9y2DQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "w1RvpvDNe7aS2RBXrHBTJPbpQ9SdBVX38Bh+se+5zziL0+sihK6SZqrnHBulH7x4VUMDHgJg5dVwXwkjiOLHAA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:20Z", - "signature": "UaEzvVJ5ewddDy5mnuBfIzEDpcMUX2La8PMZhjjKTN/IVVRnrxgLZ4pbKg+tAD4eho5KYVkqAVn2u1m9XQuWAg==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-50" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_less_than_trust_level.json b/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_less_than_trust_level.json deleted file mode 100644 index 3320418ef..000000000 --- a/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_less_than_trust_level.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "description": "Case: Trusted height=1 verifying signed header at height=7 while valset changes less than default trust level (1/3), should not expect error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - "1", - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": "1", - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "7", - "time": "2019-11-02T15:04:50Z", - "last_block_id": { - "hash": "E5F746181F4DF1A002D34813250C1F0AD4C902CA3FAE0407720E7DF9A97CFEEF", - "part_set_header": { - "total": "1", - "hash": "9AADFF3B4468D4AA0672E667F68C92266AE4F8D1BBA2629AD1AB5B11BBCC71B2" - } - }, - "last_commit_hash": "749061EA44BBE684D6E35EEFABFD92D73C282B54CEF8FD5F80E319241C578474", - "data_hash": "", - "validators_hash": "036C46A0D3D02BD5609393501881911CCD9D28EFA81829E654AD02D421776BB8", - "next_validators_hash": "036C46A0D3D02BD5609393501881911CCD9D28EFA81829E654AD02D421776BB8", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2" - }, - "commit": { - "height": "7", - "1", - "block_id": { - "hash": "9E6C2B83DA2E8AABF69216B7DD6811BB79B3DFF86D9AB1AE4C1E33A52CD196F8", - "part_set_header": { - "total": "1", - "hash": "55AD480BBF5C09C12C113AAB8231B96953094898B1179267F4DF5C90FBFDC48F" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:55Z", - "signature": "o7XeTLbdubftuq5XgSZXkDsfFenrQz9D31nVtYrZbM5yJwLOiJy/iA80T37AdWOgEZwCHuJBfrydLE2Tx/9CCg==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:55Z", - "signature": "zsCZonk/kEhXRJ7X/IIoqJY2mycYgGWrGCP3cWds6qw2wSgNhjjVNMcUMk4jpXX63/1YMqW9onRoX4mZ5yWyDA==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:55Z", - "signature": "EQOGrkmg65hqkmyC1YsNYpRpIYgDcZOPaWq+z45v+yMZmo0XWf4xCWGIGoMQZXY/qr+bDQu1Chfqxd+aC4pEAQ==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:55Z", - "signature": "ghatkgeTIXsxOk7DdvmFA0IVlweucv3FifczSI+lJv+ARFwEUfyjlsZwEtFsZA7wN1BLfIO10h7IjhYSDsIgDw==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "no error" - } \ No newline at end of file diff --git a/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_more_than_trust_level.json b/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_more_than_trust_level.json deleted file mode 100644 index 9c9e32388..000000000 --- a/light-client/tests/support/single_step/skipping/validator_set/_valset_changes_more_than_trust_level.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "description": "Case: Trusted height=1, verifying signed header at height=7 while valset changes more than default trust level (1/3), should expect error", - "initial": { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "1", - "time": "2019-11-02T15:04:00Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "next_validators_hash": "26952B5D784A1564D167DF98D2D37376B5E77771928256D25E6FF9AE3AD11564", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33" - }, - "commit": { - "height": "1", - 1, - "block_id": { - "hash": "15F15EF50BDE2018F4B129A827F90C18222C757770C8295EB8EE7BF50E761BC0", - "part_set_header": { - "total": 1, - "hash": "077E16D720F9AA656EBFD7F3FB31A4A35E1F2F4EBEBB123642BED45535D88AD5" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "GpfzfJN5RQpKqHiZsNu3dg5z5SuD4M2sg5UdMhJdhyIEoX6jZey1M2bYec3tHy44crtfCM6D4o6RIYvsfZRlBQ==" - }, - { - "block_id_flag": 2, - "validator_address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "ObsWDMxodz7SfkGHvX5iLbHKpVkvvso0kSl2X8cPmDjinzc8fDNcMiO5V8ba3EZM9ZALayiIMsd0Pw3Z2C+nBA==" - }, - { - "block_id_flag": 2, - "validator_address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "mxvQzgchsY/GnZ7qF/I7YavLGi4aVo7hR0xqoCTB1q3PMJ/tRbTgvzdxlPtcK0POB7dQwmc20f9EGLKs1bAiAw==" - }, - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:10Z", - "signature": "xiOf4pjfMACBpVmPGK+OoC0WPB3zqrv9GSizPF8S//W3n6D1P21AlCfmqOLp4Uzl/dwGxW4MQ1s+LqQxBzs5Bg==" - } - ] - } - }, - "next_validator_set": { - "validators": [ - { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "026CC7B6F3E62F789DBECEC59766888B5464737D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03A238BCAF7D1626DFE8A4AFB9448D00B7A3D2E2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "b6hwk3pjiOTJfLVCcLDA3I3lO71zWJ0VSded5LUl9T0=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "01F527D77D3FFCC4FCFF2DDC2952EEA5414F2A33", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "OAaNq3DX/15fGJP2MI6bujt1GRpvjwrqIevChirJsbc=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - }, - "trusting_period": "10800000000000", - "now": "2019-11-02T15:30:00Z" - }, - "input": [ - { - "signed_header": { - "header": { - "version": { - "block": "0", - "app": "0" - }, - "chain_id": "test-chain-01", - "height": "7", - "time": "2019-11-02T15:04:50Z", - "last_block_id": { - "hash": "C12ECA3BF0B713AA466AB3F4BF8923A7E6CF6F43A10A244FF199B3265D324E84", - "part_set_header": { - "total": 1, - "hash": "75C4E395D74369EE3391853437E7F950FCBF9B4D996E8C0DA79206F956C15C7E" - } - }, - "last_commit_hash": "A04DD4654AF073E000FFD78D14C0E97CB0E0531D28CD39C28D7BEC531D78F1F8", - "data_hash": "", - "validators_hash": "48EDBAFFB564AAA7AE0A8E3DE2AFA0ED4F64444B48587937B4F454703596404C", - "next_validators_hash": "48EDBAFFB564AAA7AE0A8E3DE2AFA0ED4F64444B48587937B4F454703596404C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "6170705F68617368", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295" - }, - "commit": { - "height": "7", - 1, - "block_id": { - "hash": "A4F4DE05CA302866B95F7300A802A1DF796C3560E906DEEF806377A942EC087B", - "part_set_header": { - "total": 1, - "hash": "4853DA8E3F94BEF6D9D13A9B6F09A6CF62C4F737C7BD28FED602E77641054E9C" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "timestamp": "2019-11-02T15:04:55Z", - "signature": "MJ/Xp5qBHQcjZB8w99KFhMqZsms+n06KhK6v5ZvDMF/6+Ko0b6LFSA5xgrhzb4JgiuloiYVM0Tdwg/0sJtd+Bg==" - }, - { - "block_id_flag": 2, - "validator_address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "timestamp": "2019-11-02T15:04:55Z", - "signature": "ln216qk71niLCkpTxJTUSRhaEja7C7S/176mfVgi4czaNjA0fr3ArSGoudKgGTueaSAheIEEYJ1Q0lfpTuP8DA==" - }, - { - "block_id_flag": 2, - "validator_address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "timestamp": "2019-11-02T15:04:55Z", - "signature": "YPFgS1+ZEl1NUqLzcLbVMET3iBgHY2XCP4pEsZbRdynBQOWll42dtvbBbh9RCElkbkPgl/N52BnP3wHHanI8Bg==" - }, - { - "block_id_flag": 2, - "validator_address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "timestamp": "2019-11-02T15:04:55Z", - "signature": "cm11+whNEs1dRU7TMcnUxxN4gikJdAa2qUoqpmccNT/i3hvQ012RLuRgdJXluPSclXqZTsbTei7vmnZqyzwlAQ==" - } - ] - } - }, - "validator_set": { - "validators": [ - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "-100" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "100" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "100" - } - ], - "proposer": { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "-100" - } - }, - "next_validator_set": { - "validators": [ - { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-150" - }, - { - "address": "044EB1BB5D4C1CDB90029648439AEB10431FF295", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Wc790fkCDAi7LvZ4UIBAIJSNI+Rp2aU80/8l+idZ/wI=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "04D58F15E56D6531CED6FFEFB17512E30AD8F219", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e7XdW4ExhnQ6hDwS0B239yJV80+6uhAq5G6zIZJnbwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - }, - { - "address": "06C9F55B64064F2FC983A2A3BA5BFE8085E4CD7F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Eh62iQ5J/OUTqF55Xq3fkl0MyzBdCsdRJdnc/N0Xrwo=" - }, - "voting_power": "50", - "proposer_priority": "50" - } - ], - "proposer": { - "address": "03EC0413849A3311A5341E7A69D6C544E9A30310", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "BQpQJElLqI4Ajo+vLroQ7KaNv+khVW2oexo0vDbPGFw=" - }, - "voting_power": "50", - "proposer_priority": "-150" - } - } - } - ], - "expected_output": "error" - } diff --git a/light-client/tests/support/voting_power/1_empty_signatures.json b/light-client/tests/support/voting_power/1_empty_signatures.json index 7a1a78a5a..146e8c08d 100644 --- a/light-client/tests/support/voting_power/1_empty_signatures.json +++ b/light-client/tests/support/voting_power/1_empty_signatures.json @@ -92,6 +92,7 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" } } diff --git a/light-client/tests/support/voting_power/2_1_all_signatures_absent.json b/light-client/tests/support/voting_power/2_1_all_signatures_absent.json index 7106e1a8c..7180dd35e 100644 --- a/light-client/tests/support/voting_power/2_1_all_signatures_absent.json +++ b/light-client/tests/support/voting_power/2_1_all_signatures_absent.json @@ -117,6 +117,7 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" } } diff --git a/light-client/tests/support/voting_power/2_2_all_signatures_nil.json b/light-client/tests/support/voting_power/2_2_all_signatures_nil.json index aa07ff543..734e90d58 100644 --- a/light-client/tests/support/voting_power/2_2_all_signatures_nil.json +++ b/light-client/tests/support/voting_power/2_2_all_signatures_nil.json @@ -117,6 +117,7 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" } } diff --git a/light-client/tests/support/voting_power/3_1_one_invalid_signature.json b/light-client/tests/support/voting_power/3_1_one_invalid_signature.json index 1f747081b..aa4544131 100644 --- a/light-client/tests/support/voting_power/3_1_one_invalid_signature.json +++ b/light-client/tests/support/voting_power/3_1_one_invalid_signature.json @@ -116,6 +116,7 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" } } diff --git a/light-client/tests/support/voting_power/3_2_all_signatures_invalid.json b/light-client/tests/support/voting_power/3_2_all_signatures_invalid.json index 7b83a6182..aad306a32 100644 --- a/light-client/tests/support/voting_power/3_2_all_signatures_invalid.json +++ b/light-client/tests/support/voting_power/3_2_all_signatures_invalid.json @@ -116,6 +116,7 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" } } diff --git a/light-client/tests/support/voting_power/7_signatures_from_diff_valset.json b/light-client/tests/support/voting_power/7_signatures_from_diff_valset.json index b930ce21b..e6fbb4e36 100644 --- a/light-client/tests/support/voting_power/7_signatures_from_diff_valset.json +++ b/light-client/tests/support/voting_power/7_signatures_from_diff_valset.json @@ -117,6 +117,7 @@ }, "voting_power": "50", "proposer_priority": "-100" - } + }, + "total_voting_power": "0" } } diff --git a/light-node/src/rpc.rs b/light-node/src/rpc.rs index e1bc5da95..4feab2c06 100644 --- a/light-node/src/rpc.rs +++ b/light-node/src/rpc.rs @@ -258,7 +258,8 @@ mod test { }, "voting_power": "50", "proposer_priority": "-50" - } + }, + "total_voting_power": "0" }, "next_validator_set": { "validators": [ @@ -288,7 +289,9 @@ mod test { "value": "+vlsKpn6ojn+UoTZl+w+fxeqm6xvUfBokTcKfcG3au4=" }, "voting_power": "50", - "proposer_priority": "0" } + "proposer_priority": "0" + }, + "total_voting_power": "0" }, "provider": "9D61B19DEFFD5A60BA844AF492EC2CC44449C569" } diff --git a/proto-compiler/Cargo.toml b/proto-compiler/Cargo.toml index 2cc8c28fe..b765574f2 100644 --- a/proto-compiler/Cargo.toml +++ b/proto-compiler/Cargo.toml @@ -6,11 +6,9 @@ edition = "2018" publish = false [dependencies] -walkdir = { version = "2.3" } - -[build-dependencies] +walkdir = { version = "2.3" } prost-build = { version = "0.6" } -walkdir = { version = "2.3" } -git2 = { version = "0.13" } +git2 = { version = "0.13" } +tempdir = { version = "0.3" } [workspace] diff --git a/proto-compiler/build.rs b/proto-compiler/build.rs deleted file mode 100644 index 3dc1653ef..000000000 --- a/proto-compiler/build.rs +++ /dev/null @@ -1,41 +0,0 @@ -use git2::Repository; -use prost_build::compile_protos; -use std::env::var; -use std::path::{Path, PathBuf}; -use walkdir::WalkDir; - -fn main() { - let tendermint_dir = var("TENDERMINT_DIR").unwrap_or_else(|_| "target/tendermint".to_string()); - if !Path::new(&tendermint_dir).exists() { - let url = "https://github.com/tendermint/tendermint"; - Repository::clone(url, &tendermint_dir).unwrap(); - } - let proto_paths = [format!("{}/proto", tendermint_dir)]; - let proto_includes_paths = [ - format!("{}/proto", tendermint_dir), - format!("{}/third_party/proto", tendermint_dir), - ]; - - // List available proto files - let mut protos: Vec = vec![]; - for proto_path in &proto_paths { - protos.append( - &mut WalkDir::new(proto_path) - .into_iter() - .filter_map(|e| e.ok()) - .filter(|e| { - e.file_type().is_file() - && e.path().extension().is_some() - && e.path().extension().unwrap() == "proto" - }) - .map(|e| e.into_path()) - .collect(), - ); - } - - // List available paths for dependencies - let includes: Vec = proto_includes_paths.iter().map(PathBuf::from).collect(); - - // Compile all proto files - compile_protos(&protos, &includes).unwrap(); -} diff --git a/proto-compiler/src/constants.rs b/proto-compiler/src/constants.rs new file mode 100644 index 000000000..5506a3dc3 --- /dev/null +++ b/proto-compiler/src/constants.rs @@ -0,0 +1,140 @@ +/// Tendermint protobuf version +pub const TENDERMINT_REPO: &str = "https://github.com/tendermint/tendermint"; +pub const TENDERMINT_COMMITISH: &str = "tags/v0.34.0-rc4"; + +/// Predefined custom attributes for message annotations +const PRIMITIVE_ENUM: &str = r#"#[derive(::num_derive::FromPrimitive, ::num_derive::ToPrimitive)]"#; +const SERIALIZED: &str = r#"#[derive(::serde::Deserialize, ::serde::Serialize)]"#; +const TYPE_TAG: &str = r#"#[serde(tag = "type", content = "value")]"#; + +/// Predefined custom attributes for field annotations +const QUOTED: &str = r#"#[serde(with = "crate::serializers::from_str")]"#; +const QUOTED_WITH_DEFAULT: &str = r#"#[serde(with = "crate::serializers::from_str", default)]"#; +const HEXSTRING: &str = r#"#[serde(with = "crate::serializers::bytes::hexstring")]"#; +const BASE64STRING: &str = r#"#[serde(with = "crate::serializers::bytes::base64string")]"#; +const TIMESTAMP: &str = r#"#[serde(with = "crate::serializers::option_timestamp")]"#; +const VEC_SKIP_IF_EMPTY: &str = + r#"#[serde(skip_serializing_if = "Vec::is_empty", with = "serde_bytes")]"#; +const NULLABLEVECARRAY: &str = r#"#[serde(with = "crate::serializers::txs")]"#; +const NULLABLE: &str = r#"#[serde(with = "crate::serializers::nullable")]"#; +const ALIAS_POWER_QUOTED: &str = + r#"#[serde(alias = "power", with = "crate::serializers::from_str")]"#; +const RENAME_PUBKEY: &str = r#"#[serde(rename = "tendermint/PubKeyEd25519", with = "crate::serializers::bytes::base64string")]"#; +const RENAME_DUPLICATEVOTE: &str = r#"#[serde(rename = "tendermint/DuplicateVoteEvidence")]"#; +const RENAME_LIGHTCLIENTATTACK: &str = + r#"#[serde(rename = "tendermint/LightClientAttackEvidence")]"#; +const EVIDENCE_VARIANT: &str = r#"#[serde(from = "crate::serializers::evidence::EvidenceVariant", into = "crate::serializers::evidence::EvidenceVariant")]"#; +const ALIAS_PARTS: &str = r#"#[serde(alias = "parts")]"#; +const DEFAULT: &str = r#"#[serde(default)]"#; + +/// Custom type attributes applied on top of protobuf structs +/// The first item in the tuple defines the message where the annotation should apply and +/// the second item is the string that should be added as annotation. +/// The first item is a path as defined in the prost_build::Config::btree_map here: +/// https://docs.rs/prost-build/0.6.1/prost_build/struct.Config.html#method.btree_map +pub static CUSTOM_TYPE_ATTRIBUTES: &[(&str, &str)] = &[ + (".tendermint.libs.bits.BitArray", SERIALIZED), + (".tendermint.types.EvidenceParams", SERIALIZED), + (".tendermint.types.BlockIDFlag", PRIMITIVE_ENUM), + (".tendermint.types.Block", SERIALIZED), + (".tendermint.types.Data", SERIALIZED), + (".tendermint.types.EvidenceData", SERIALIZED), + (".tendermint.types.Evidence", SERIALIZED), + (".tendermint.types.DuplicateVoteEvidence", SERIALIZED), + (".tendermint.types.Vote", SERIALIZED), + (".tendermint.types.BlockID", SERIALIZED), + (".tendermint.types.PartSetHeader", SERIALIZED), + (".google.protobuf.Timestamp", SERIALIZED), + (".tendermint.types.LightClientAttackEvidence", SERIALIZED), + (".tendermint.types.LightBlock", SERIALIZED), + (".tendermint.types.SignedHeader", SERIALIZED), + (".tendermint.types.Header", SERIALIZED), + (".tendermint.version.Consensus", SERIALIZED), + (".tendermint.types.Commit", SERIALIZED), + (".tendermint.types.CommitSig", SERIALIZED), + (".tendermint.types.ValidatorSet", SERIALIZED), + (".tendermint.crypto.PublicKey", SERIALIZED), + (".tendermint.crypto.PublicKey.sum", TYPE_TAG), + (".tendermint.types.Evidence.sum", TYPE_TAG), + (".tendermint.abci.ResponseInfo", SERIALIZED), + (".tendermint.types.CanonicalBlockID", SERIALIZED), + (".tendermint.types.CanonicalPartSetHeader", SERIALIZED), + (".tendermint.types.Validator", SERIALIZED), + (".tendermint.types.CanonicalVote", SERIALIZED), + (".tendermint.types.BlockMeta", SERIALIZED), + (".tendermint.types.Evidence", EVIDENCE_VARIANT), +]; + +/// Custom field attributes applied on top of protobuf fields in (a) struct(s) +/// The first item in the tuple defines the field where the annotation should apply and +/// the second item is the string that should be added as annotation. +/// The first item is a path as defined in the prost_build::Config::btree_map here: +/// https://docs.rs/prost-build/0.6.1/prost_build/struct.Config.html#method.btree_map +pub static CUSTOM_FIELD_ATTRIBUTES: &[(&str, &str)] = &[ + ( + ".tendermint.types.EvidenceParams.max_num", + QUOTED_WITH_DEFAULT, + ), + (".tendermint.types.Data.hash", DEFAULT), + (".tendermint.types.EvidenceData.hash", DEFAULT), + (".tendermint.types.Commit.hash", DEFAULT), + (".tendermint.abci.ResponseInfo.last_block_height", QUOTED), + (".tendermint.version.Consensus.block", QUOTED), + (".tendermint.version.Consensus.app", QUOTED_WITH_DEFAULT), + ( + ".tendermint.abci.ResponseInfo.last_block_app_hash", + VEC_SKIP_IF_EMPTY, + ), + (".tendermint.abci.ResponseInfo.app_version", QUOTED), + (".tendermint.types.BlockID.hash", HEXSTRING), + (".tendermint.types.BlockID.part_set_header", ALIAS_PARTS), + ( + ".tendermint.types.CanonicalBlockID.part_set_header", + ALIAS_PARTS, + ), + (".tendermint.types.PartSetHeader.hash", HEXSTRING), + (".tendermint.types.Header.height", QUOTED), + (".tendermint.types.Header.time", TIMESTAMP), + (".tendermint.types.Header.last_commit_hash", HEXSTRING), + (".tendermint.types.Header.data_hash", HEXSTRING), + (".tendermint.types.Header.validators_hash", HEXSTRING), + (".tendermint.types.Header.next_validators_hash", HEXSTRING), + (".tendermint.types.Header.consensus_hash", HEXSTRING), + (".tendermint.types.Header.app_hash", HEXSTRING), + (".tendermint.types.Header.last_results_hash", HEXSTRING), + (".tendermint.types.Header.evidence_hash", HEXSTRING), + (".tendermint.types.Header.proposer_address", HEXSTRING), + (".tendermint.types.Data.txs", NULLABLEVECARRAY), + (".tendermint.types.EvidenceData.evidence", NULLABLE), + (".tendermint.types.Commit.height", QUOTED), + (".tendermint.types.Commit.signatures", NULLABLE), + (".tendermint.types.CommitSig.validator_address", HEXSTRING), + (".tendermint.types.CommitSig.timestamp", TIMESTAMP), + (".tendermint.types.CommitSig.signature", BASE64STRING), + (".tendermint.types.Vote.round", QUOTED), + (".tendermint.types.Vote.height", QUOTED), + (".tendermint.types.Vote.validator_index", QUOTED), + (".tendermint.types.Vote.validator_address", HEXSTRING), + (".tendermint.types.Vote.signature", BASE64STRING), + (".tendermint.types.Vote.timestamp", TIMESTAMP), + (".tendermint.types.Validator.address", HEXSTRING), + ( + ".tendermint.types.Validator.voting_power", + ALIAS_POWER_QUOTED, + ), // https://github.com/tendermint/tendermint/issues/5549 + ( + ".tendermint.types.Validator.proposer_priority", + QUOTED_WITH_DEFAULT, + ), // Default is for /genesis deserialization + (".tendermint.types.BlockMeta.block_size", QUOTED), + (".tendermint.types.BlockMeta.num_txs", QUOTED), + (".tendermint.crypto.PublicKey.sum.ed25519", RENAME_PUBKEY), + ( + ".tendermint.types.Evidence.sum.duplicate_vote_evidence", + RENAME_DUPLICATEVOTE, + ), + ( + ".tendermint.types.Evidence.sum.light_client_attack_evidence", + RENAME_LIGHTCLIENTATTACK, + ), +]; diff --git a/proto-compiler/src/functions.rs b/proto-compiler/src/functions.rs new file mode 100644 index 000000000..ff3078694 --- /dev/null +++ b/proto-compiler/src/functions.rs @@ -0,0 +1,139 @@ +use git2::build::{CheckoutBuilder, RepoBuilder}; +use git2::{AutotagOption, FetchOptions, Repository}; +use std::fs::remove_dir_all; +use std::fs::{copy, create_dir_all}; +use std::path::PathBuf; +use walkdir::WalkDir; + +/// Clone/open, fetch and check out a specific commitish +pub fn get_commitish(dir: &PathBuf, url: &str, commitish: &str) { + if dir.exists() { + update_and_get_commitish(dir, commitish) + } else { + clone_and_get_commitish(dir, url, commitish) + } +} + +fn clone_and_get_commitish(dir: &PathBuf, url: &str, commitish: &str) { + println!(" [info] => Cloning {} to {}", url, dir.to_string_lossy()); + + let mut fo = FetchOptions::new(); + fo.download_tags(AutotagOption::All); + fo.update_fetchhead(true); + + let mut builder = RepoBuilder::new(); + builder.fetch_options(fo); + + let repo = builder.clone(url, dir).unwrap(); + checkout_commitish(&repo, commitish); +} + +fn update_and_get_commitish(dir: &PathBuf, commitish: &str) { + println!(" [info] => Opening {}", dir.to_string_lossy()); + let repo = Repository::open(dir).unwrap(); + + let mut fo = git2::FetchOptions::new(); + fo.download_tags(git2::AutotagOption::All); + + let mut remote = repo.find_remote("origin").unwrap(); + println!(" [info] => Fetching {} for repo", remote.name().unwrap()); + remote.fetch(&[commitish], Some(&mut fo), None).unwrap(); + + let stats = remote.stats(); + if stats.local_objects() > 0 { + println!( + " [info] => Received {}/{} objects in {} bytes (used {} local \ + objects)", + stats.indexed_objects(), + stats.total_objects(), + stats.received_bytes(), + stats.local_objects() + ); + } else { + println!( + " [info] => Received {}/{} objects in {} bytes", + stats.indexed_objects(), + stats.total_objects(), + stats.received_bytes() + ); + } + + checkout_commitish(&repo, commitish); +} + +fn checkout_commitish(repo: &Repository, commitish: &str) { + let ref_name = format!("refs/{}", commitish); + let commitish_ref = repo.find_reference(&ref_name).unwrap(); + + if commitish_ref.is_tag() { + println!( + " [info] => Checking out repo in detached HEAD mode at {}", + commitish + ); + repo.set_head_detached(commitish_ref.target().unwrap()) + .unwrap(); + } else if commitish_ref.is_branch() { + println!(" [info] => Checking out repo at branch {}", commitish); + repo.set_head(&ref_name).unwrap(); + } else { + panic!( + " [error] => Commitish \"{}\" is neither a tag nor a branch", + commitish + ); + } + + repo.checkout_head(Some(CheckoutBuilder::new().force())) + .unwrap(); +} + +/// Copy generated files to target folder +pub fn copy_files(src_dir: PathBuf, target_dir: PathBuf) { + // Remove old compiled files + remove_dir_all(&target_dir).unwrap_or_default(); + create_dir_all(&target_dir).unwrap(); + + // Copy new compiled files (prost does not use folder structures) + let errors = WalkDir::new(&src_dir) + .into_iter() + .filter_map(|e| e.ok()) + .filter(|e| e.file_type().is_file()) + .map(|e| { + copy( + e.path(), + std::path::Path::new(&format!( + "{}/{}", + &target_dir.display(), + &e.file_name().to_os_string().to_str().unwrap() + )), + ) + }) + .filter_map(|e| e.err()) + .collect::>(); + + if !errors.is_empty() { + for e in errors { + println!("[error] Error while copying compiled file: {}", e); + } + panic!("[error] Aborted."); + } +} + +/// Walk through the list of directories and gather all *.proto files +pub fn find_proto_files(proto_paths: Vec) -> Vec { + let mut protos: Vec = vec![]; + for proto_path in &proto_paths { + protos.append( + &mut WalkDir::new(proto_path) + .into_iter() + .filter_map(|e| e.ok()) + .filter(|e| { + e.file_type().is_file() + && e.path().extension().is_some() + && e.path().extension().unwrap() == "proto" + }) + .map(|e| e.into_path()) + .collect(), + ); + } + protos +} diff --git a/proto-compiler/src/main.rs b/proto-compiler/src/main.rs index cb4813186..e0e150c1a 100644 --- a/proto-compiler/src/main.rs +++ b/proto-compiler/src/main.rs @@ -1,36 +1,69 @@ -use std::fs::remove_dir_all; -use std::fs::{copy, create_dir_all}; -use walkdir::WalkDir; +use std::env::var; +use std::path::PathBuf; +use tempdir::TempDir; + +mod functions; +use functions::{copy_files, find_proto_files, get_commitish}; + +mod constants; +use constants::{ + CUSTOM_FIELD_ATTRIBUTES, CUSTOM_TYPE_ATTRIBUTES, TENDERMINT_COMMITISH, TENDERMINT_REPO, +}; fn main() { - let tendermint_proto_path = "../proto/src/prost"; + let root = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + let target_dir = root.join("../proto/src/prost"); + let out_dir = var("OUT_DIR") + .map(PathBuf::from) + .or_else(|_| TempDir::new("tendermint_proto_out").map(|d| d.into_path())) + .unwrap(); + let tendermint_dir = var("TENDERMINT_DIR").unwrap_or_else(|_| "target/tendermint".to_string()); - // Remove old compiled files - remove_dir_all(tendermint_proto_path).unwrap_or_default(); - create_dir_all(tendermint_proto_path).unwrap(); + println!( + "[info] => Fetching {} at {} into {}", + TENDERMINT_REPO, TENDERMINT_COMMITISH, tendermint_dir + ); + get_commitish( + &PathBuf::from(&tendermint_dir), + TENDERMINT_REPO, + TENDERMINT_COMMITISH, + ); // This panics if it fails. - // Copy new compiled files (prost does not use folder structures) - let err: Vec = WalkDir::new(env!("OUT_DIR")) - .into_iter() - .filter_map(|e| e.ok()) - .filter(|e| e.file_type().is_file()) - .map(|e| { - copy( - e.path(), - std::path::Path::new(&format!( - "{}/{}", - tendermint_proto_path, - &e.file_name().to_os_string().to_str().unwrap() - )), - ) - }) - .filter_map(|e| e.err()) - .collect(); + let proto_paths = [format!("{}/proto", tendermint_dir)]; + let proto_includes_paths = [ + format!("{}/proto", tendermint_dir), + format!("{}/third_party/proto", tendermint_dir), + ]; + // List available proto files + let protos = find_proto_files(proto_paths.to_vec()); + // List available paths for dependencies + let includes: Vec = proto_includes_paths.iter().map(PathBuf::from).collect(); - if !err.is_empty() { - for e in err { - dbg!(e); - } - panic!("error while copying compiled files") + // Compile proto files with added annotations, exchange prost_types to our own + let mut pb = prost_build::Config::new(); + pb.out_dir(&out_dir); + for type_attribute in CUSTOM_TYPE_ATTRIBUTES { + pb.type_attribute(type_attribute.0, type_attribute.1); } + for field_attribute in CUSTOM_FIELD_ATTRIBUTES { + pb.field_attribute(field_attribute.0, field_attribute.1); + } + pb.compile_well_known_types(); + // The below in-place path redirection removes the Duration and Timestamp structs from + // google.protobuf.rs. We replace them with our own versions that have valid doctest comments. + // See also https://github.com/danburkert/prost/issues/374 . + pb.extern_path( + ".google.protobuf.Duration", + "super::super::google::protobuf::Duration", + ); + pb.extern_path( + ".google.protobuf.Timestamp", + "super::super::google::protobuf::Timestamp", + ); + println!("[info] => Creating structs."); + pb.compile_protos(&protos, &includes).unwrap(); + + println!("[info] => Removing old structs and copying new structs."); + copy_files(out_dir, target_dir); // This panics if it fails. + println!("[info] => Done!"); } diff --git a/proto/Cargo.toml b/proto/Cargo.toml index 800448388..6da3a9bad 100644 --- a/proto/Cargo.toml +++ b/proto/Cargo.toml @@ -22,3 +22,12 @@ prost-types = { version = "0.6" } bytes = "0.5" anomaly = "0.2" thiserror = "1.0" +serde = { version = "1.0", features = ["derive"] } +subtle-encoding = "0.5" +serde_bytes = "0.11" +num-traits = "0.2" +num-derive = "0.3" +chrono = { version = "0.4", features = ["serde"] } + +[dev-dependencies] +serde_json = "1.0" diff --git a/proto/src/lib.rs b/proto/src/lib.rs index 63e05ca50..db9da5fc5 100644 --- a/proto/src/lib.rs +++ b/proto/src/lib.rs @@ -3,84 +3,70 @@ // This module setup is necessary because the generated code contains "super::" calls for // dependencies. Unfortunately, prost doesn't create this for us automatically. -#![deny( - warnings, - missing_docs, - trivial_casts, - trivial_numeric_casts, - unused_import_braces -)] +#![deny(warnings, trivial_casts, trivial_numeric_casts, unused_import_braces)] #![forbid(unsafe_code)] #![doc(html_root_url = "https://docs.rs/tendermint-proto/0.17.0-rc1")] +// Built-in prost_types with slight customization to enable JSON-encoding +pub mod google { + pub mod protobuf { + include!("prost/google.protobuf.rs"); + // custom Timeout and Duration types that have valid doctest documentation texts + include!("protobuf.rs"); + } +} + mod tendermint { pub mod abci { - #![allow(missing_docs)] #![allow(clippy::large_enum_variant)] include!("prost/tendermint.abci.rs"); } pub mod blockchain { - #![allow(missing_docs)] #![allow(clippy::large_enum_variant)] include!("prost/tendermint.blockchain.rs"); } pub mod consensus { - #![allow(missing_docs)] include!("prost/tendermint.consensus.rs"); } pub mod crypto { - #![allow(missing_docs)] include!("prost/tendermint.crypto.rs"); } pub mod evidence { - #![allow(missing_docs)] include!("prost/tendermint.evidence.rs"); } pub mod libs { - #![allow(missing_docs)] pub mod bits { - #![allow(missing_docs)] include!("prost/tendermint.libs.bits.rs"); } } pub mod mempool { - #![allow(missing_docs)] include!("prost/tendermint.mempool.rs"); } pub mod p2p { - #![allow(missing_docs)] include!("prost/tendermint.p2p.rs"); } pub mod privval { - #![allow(missing_docs)] include!("prost/tendermint.privval.rs"); } pub mod rpc { - #![allow(missing_docs)] pub mod grpc { - #![allow(missing_docs)] include!("prost/tendermint.rpc.grpc.rs"); } } pub mod state { - #![allow(missing_docs)] include!("prost/tendermint.state.rs"); } pub mod statesync { - #![allow(missing_docs)] include!("prost/tendermint.statesync.rs"); } pub mod store { - #![allow(missing_docs)] include!("prost/tendermint.store.rs"); } pub mod types { - #![allow(missing_docs)] #![allow(clippy::large_enum_variant)] include!("prost/tendermint.types.rs"); } pub mod version { - #![allow(missing_docs)] include!("prost/tendermint.version.rs"); } } @@ -93,7 +79,4 @@ pub use domaintype::DomainType; mod error; pub use error::{Error, Kind}; -// Re-export the DomainType derive macro #[derive(DomainType)] -#[cfg(feature = "tendermint-proto-derive")] -#[doc(hidden)] -pub use tendermint_proto_derive::DomainType; +pub mod serializers; diff --git a/proto/src/prost/google.protobuf.rs b/proto/src/prost/google.protobuf.rs index e69de29bb..cd9969fba 100644 --- a/proto/src/prost/google.protobuf.rs +++ b/proto/src/prost/google.protobuf.rs @@ -0,0 +1,882 @@ +/// The protocol compiler can output a FileDescriptorSet containing the .proto +/// files it parses. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FileDescriptorSet { + #[prost(message, repeated, tag="1")] + pub file: ::std::vec::Vec, +} +/// Describes a complete .proto file. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FileDescriptorProto { + /// file name, relative to root of source tree + #[prost(string, optional, tag="1")] + pub name: ::std::option::Option, + /// e.g. "foo", "foo.bar", etc. + #[prost(string, optional, tag="2")] + pub package: ::std::option::Option, + /// Names of files imported by this file. + #[prost(string, repeated, tag="3")] + pub dependency: ::std::vec::Vec, + /// Indexes of the public imported files in the dependency list above. + #[prost(int32, repeated, packed="false", tag="10")] + pub public_dependency: ::std::vec::Vec, + /// Indexes of the weak imported files in the dependency list. + /// For Google-internal migration only. Do not use. + #[prost(int32, repeated, packed="false", tag="11")] + pub weak_dependency: ::std::vec::Vec, + /// All top-level definitions in this file. + #[prost(message, repeated, tag="4")] + pub message_type: ::std::vec::Vec, + #[prost(message, repeated, tag="5")] + pub enum_type: ::std::vec::Vec, + #[prost(message, repeated, tag="6")] + pub service: ::std::vec::Vec, + #[prost(message, repeated, tag="7")] + pub extension: ::std::vec::Vec, + #[prost(message, optional, tag="8")] + pub options: ::std::option::Option, + /// This field contains optional information about the original source code. + /// You may safely remove this entire field without harming runtime + /// functionality of the descriptors -- the information is needed only by + /// development tools. + #[prost(message, optional, tag="9")] + pub source_code_info: ::std::option::Option, + /// The syntax of the proto file. + /// The supported values are "proto2" and "proto3". + #[prost(string, optional, tag="12")] + pub syntax: ::std::option::Option, +} +/// Describes a message type. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DescriptorProto { + #[prost(string, optional, tag="1")] + pub name: ::std::option::Option, + #[prost(message, repeated, tag="2")] + pub field: ::std::vec::Vec, + #[prost(message, repeated, tag="6")] + pub extension: ::std::vec::Vec, + #[prost(message, repeated, tag="3")] + pub nested_type: ::std::vec::Vec, + #[prost(message, repeated, tag="4")] + pub enum_type: ::std::vec::Vec, + #[prost(message, repeated, tag="5")] + pub extension_range: ::std::vec::Vec, + #[prost(message, repeated, tag="8")] + pub oneof_decl: ::std::vec::Vec, + #[prost(message, optional, tag="7")] + pub options: ::std::option::Option, + #[prost(message, repeated, tag="9")] + pub reserved_range: ::std::vec::Vec, + /// Reserved field names, which may not be used by fields in the same message. + /// A given name may only be reserved once. + #[prost(string, repeated, tag="10")] + pub reserved_name: ::std::vec::Vec, +} +pub mod descriptor_proto { + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct ExtensionRange { + /// Inclusive. + #[prost(int32, optional, tag="1")] + pub start: ::std::option::Option, + /// Exclusive. + #[prost(int32, optional, tag="2")] + pub end: ::std::option::Option, + #[prost(message, optional, tag="3")] + pub options: ::std::option::Option, + } + /// Range of reserved tag numbers. Reserved tag numbers may not be used by + /// fields or extension ranges in the same message. Reserved ranges may + /// not overlap. + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct ReservedRange { + /// Inclusive. + #[prost(int32, optional, tag="1")] + pub start: ::std::option::Option, + /// Exclusive. + #[prost(int32, optional, tag="2")] + pub end: ::std::option::Option, + } +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExtensionRangeOptions { + /// The parser stores options it doesn't recognize here. See above. + #[prost(message, repeated, tag="999")] + pub uninterpreted_option: ::std::vec::Vec, +} +/// Describes a field within a message. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FieldDescriptorProto { + #[prost(string, optional, tag="1")] + pub name: ::std::option::Option, + #[prost(int32, optional, tag="3")] + pub number: ::std::option::Option, + #[prost(enumeration="field_descriptor_proto::Label", optional, tag="4")] + pub label: ::std::option::Option, + /// If type_name is set, this need not be set. If both this and type_name + /// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + #[prost(enumeration="field_descriptor_proto::Type", optional, tag="5")] + pub r#type: ::std::option::Option, + /// For message and enum types, this is the name of the type. If the name + /// starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + /// rules are used to find the type (i.e. first the nested types within this + /// message are searched, then within the parent, on up to the root + /// namespace). + #[prost(string, optional, tag="6")] + pub type_name: ::std::option::Option, + /// For extensions, this is the name of the type being extended. It is + /// resolved in the same manner as type_name. + #[prost(string, optional, tag="2")] + pub extendee: ::std::option::Option, + /// For numeric types, contains the original text representation of the value. + /// For booleans, "true" or "false". + /// For strings, contains the default text contents (not escaped in any way). + /// For bytes, contains the C escaped value. All bytes >= 128 are escaped. + /// TODO(kenton): Base-64 encode? + #[prost(string, optional, tag="7")] + pub default_value: ::std::option::Option, + /// If set, gives the index of a oneof in the containing type's oneof_decl + /// list. This field is a member of that oneof. + #[prost(int32, optional, tag="9")] + pub oneof_index: ::std::option::Option, + /// JSON name of this field. The value is set by protocol compiler. If the + /// user has set a "json_name" option on this field, that option's value + /// will be used. Otherwise, it's deduced from the field's name by converting + /// it to camelCase. + #[prost(string, optional, tag="10")] + pub json_name: ::std::option::Option, + #[prost(message, optional, tag="8")] + pub options: ::std::option::Option, +} +pub mod field_descriptor_proto { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum Type { + /// 0 is reserved for errors. + /// Order is weird for historical reasons. + Double = 1, + Float = 2, + /// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + /// negative values are likely. + Int64 = 3, + Uint64 = 4, + /// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + /// negative values are likely. + Int32 = 5, + Fixed64 = 6, + Fixed32 = 7, + Bool = 8, + String = 9, + /// Tag-delimited aggregate. + /// Group type is deprecated and not supported in proto3. However, Proto3 + /// implementations should still be able to parse the group wire format and + /// treat group fields as unknown fields. + Group = 10, + /// Length-delimited aggregate. + Message = 11, + /// New in version 2. + Bytes = 12, + Uint32 = 13, + Enum = 14, + Sfixed32 = 15, + Sfixed64 = 16, + /// Uses ZigZag encoding. + Sint32 = 17, + /// Uses ZigZag encoding. + Sint64 = 18, + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum Label { + /// 0 is reserved for errors + Optional = 1, + Required = 2, + Repeated = 3, + } +} +/// Describes a oneof. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct OneofDescriptorProto { + #[prost(string, optional, tag="1")] + pub name: ::std::option::Option, + #[prost(message, optional, tag="2")] + pub options: ::std::option::Option, +} +/// Describes an enum type. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EnumDescriptorProto { + #[prost(string, optional, tag="1")] + pub name: ::std::option::Option, + #[prost(message, repeated, tag="2")] + pub value: ::std::vec::Vec, + #[prost(message, optional, tag="3")] + pub options: ::std::option::Option, + /// Range of reserved numeric values. Reserved numeric values may not be used + /// by enum values in the same enum declaration. Reserved ranges may not + /// overlap. + #[prost(message, repeated, tag="4")] + pub reserved_range: ::std::vec::Vec, + /// Reserved enum value names, which may not be reused. A given name may only + /// be reserved once. + #[prost(string, repeated, tag="5")] + pub reserved_name: ::std::vec::Vec, +} +pub mod enum_descriptor_proto { + /// Range of reserved numeric values. Reserved values may not be used by + /// entries in the same enum. Reserved ranges may not overlap. + /// + /// Note that this is distinct from DescriptorProto.ReservedRange in that it + /// is inclusive such that it can appropriately represent the entire int32 + /// domain. + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct EnumReservedRange { + /// Inclusive. + #[prost(int32, optional, tag="1")] + pub start: ::std::option::Option, + /// Inclusive. + #[prost(int32, optional, tag="2")] + pub end: ::std::option::Option, + } +} +/// Describes a value within an enum. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EnumValueDescriptorProto { + #[prost(string, optional, tag="1")] + pub name: ::std::option::Option, + #[prost(int32, optional, tag="2")] + pub number: ::std::option::Option, + #[prost(message, optional, tag="3")] + pub options: ::std::option::Option, +} +/// Describes a service. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ServiceDescriptorProto { + #[prost(string, optional, tag="1")] + pub name: ::std::option::Option, + #[prost(message, repeated, tag="2")] + pub method: ::std::vec::Vec, + #[prost(message, optional, tag="3")] + pub options: ::std::option::Option, +} +/// Describes a method of a service. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MethodDescriptorProto { + #[prost(string, optional, tag="1")] + pub name: ::std::option::Option, + /// Input and output type names. These are resolved in the same way as + /// FieldDescriptorProto.type_name, but must refer to a message type. + #[prost(string, optional, tag="2")] + pub input_type: ::std::option::Option, + #[prost(string, optional, tag="3")] + pub output_type: ::std::option::Option, + #[prost(message, optional, tag="4")] + pub options: ::std::option::Option, + /// Identifies if client streams multiple client messages + #[prost(bool, optional, tag="5", default="false")] + pub client_streaming: ::std::option::Option, + /// Identifies if server streams multiple server messages + #[prost(bool, optional, tag="6", default="false")] + pub server_streaming: ::std::option::Option, +} +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached. These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them. Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +// organization, or for experimental options, use field numbers 50000 +// through 99999. It is up to you to ensure that you do not use the +// same number for multiple options. +// * For options which will be published and used publicly by multiple +// independent entities, e-mail protobuf-global-extension-registry@google.com +// to reserve extension numbers. Simply provide your project name (e.g. +// Objective-C plugin) and your project website (if available) -- there's no +// need to explain how you intend to use them. Usually you only need one +// extension number. You can declare multiple options with only one extension +// number by putting them in a sub-message. See the Custom Options section of +// the docs for examples: +// https://developers.google.com/protocol-buffers/docs/proto#options +// If this turns out to be popular, a web service will be set up +// to automatically assign option numbers. + +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FileOptions { + /// Sets the Java package where classes generated from this .proto will be + /// placed. By default, the proto package is used, but this is often + /// inappropriate because proto packages do not normally start with backwards + /// domain names. + #[prost(string, optional, tag="1")] + pub java_package: ::std::option::Option, + /// If set, all the classes from the .proto file are wrapped in a single + /// outer class with the given name. This applies to both Proto1 + /// (equivalent to the old "--one_java_file" option) and Proto2 (where + /// a .proto always translates to a single class, but you may want to + /// explicitly choose the class name). + #[prost(string, optional, tag="8")] + pub java_outer_classname: ::std::option::Option, + /// If set true, then the Java code generator will generate a separate .java + /// file for each top-level message, enum, and service defined in the .proto + /// file. Thus, these types will *not* be nested inside the outer class + /// named by java_outer_classname. However, the outer class will still be + /// generated to contain the file's getDescriptor() method as well as any + /// top-level extensions defined in the file. + #[prost(bool, optional, tag="10", default="false")] + pub java_multiple_files: ::std::option::Option, + /// This option does nothing. + #[prost(bool, optional, tag="20")] + pub java_generate_equals_and_hash: ::std::option::Option, + /// If set true, then the Java2 code generator will generate code that + /// throws an exception whenever an attempt is made to assign a non-UTF-8 + /// byte sequence to a string field. + /// Message reflection will do the same. + /// However, an extension field still accepts non-UTF-8 byte sequences. + /// This option has no effect on when used with the lite runtime. + #[prost(bool, optional, tag="27", default="false")] + pub java_string_check_utf8: ::std::option::Option, + #[prost(enumeration="file_options::OptimizeMode", optional, tag="9", default="Speed")] + pub optimize_for: ::std::option::Option, + /// Sets the Go package where structs generated from this .proto will be + /// placed. If omitted, the Go package will be derived from the following: + /// - The basename of the package import path, if provided. + /// - Otherwise, the package statement in the .proto file, if present. + /// - Otherwise, the basename of the .proto file, without extension. + #[prost(string, optional, tag="11")] + pub go_package: ::std::option::Option, + /// Should generic services be generated in each language? "Generic" services + /// are not specific to any particular RPC system. They are generated by the + /// main code generators in each language (without additional plugins). + /// Generic services were the only kind of service generation supported by + /// early versions of google.protobuf. + /// + /// Generic services are now considered deprecated in favor of using plugins + /// that generate code specific to your particular RPC system. Therefore, + /// these default to false. Old code which depends on generic services should + /// explicitly set them to true. + #[prost(bool, optional, tag="16", default="false")] + pub cc_generic_services: ::std::option::Option, + #[prost(bool, optional, tag="17", default="false")] + pub java_generic_services: ::std::option::Option, + #[prost(bool, optional, tag="18", default="false")] + pub py_generic_services: ::std::option::Option, + #[prost(bool, optional, tag="42", default="false")] + pub php_generic_services: ::std::option::Option, + /// Is this file deprecated? + /// Depending on the target platform, this can emit Deprecated annotations + /// for everything in the file, or it will be completely ignored; in the very + /// least, this is a formalization for deprecating files. + #[prost(bool, optional, tag="23", default="false")] + pub deprecated: ::std::option::Option, + /// Enables the use of arenas for the proto messages in this file. This applies + /// only to generated classes for C++. + #[prost(bool, optional, tag="31", default="false")] + pub cc_enable_arenas: ::std::option::Option, + /// Sets the objective c class prefix which is prepended to all objective c + /// generated classes from this .proto. There is no default. + #[prost(string, optional, tag="36")] + pub objc_class_prefix: ::std::option::Option, + /// Namespace for generated classes; defaults to the package. + #[prost(string, optional, tag="37")] + pub csharp_namespace: ::std::option::Option, + /// By default Swift generators will take the proto package and CamelCase it + /// replacing '.' with underscore and use that to prefix the types/symbols + /// defined. When this options is provided, they will use this value instead + /// to prefix the types/symbols defined. + #[prost(string, optional, tag="39")] + pub swift_prefix: ::std::option::Option, + /// Sets the php class prefix which is prepended to all php generated classes + /// from this .proto. Default is empty. + #[prost(string, optional, tag="40")] + pub php_class_prefix: ::std::option::Option, + /// Use this option to change the namespace of php generated classes. Default + /// is empty. When this option is empty, the package name will be used for + /// determining the namespace. + #[prost(string, optional, tag="41")] + pub php_namespace: ::std::option::Option, + /// Use this option to change the namespace of php generated metadata classes. + /// Default is empty. When this option is empty, the proto file name will be + /// used for determining the namespace. + #[prost(string, optional, tag="44")] + pub php_metadata_namespace: ::std::option::Option, + /// Use this option to change the package of ruby generated classes. Default + /// is empty. When this option is not set, the package name will be used for + /// determining the ruby package. + #[prost(string, optional, tag="45")] + pub ruby_package: ::std::option::Option, + /// The parser stores options it doesn't recognize here. + /// See the documentation for the "Options" section above. + #[prost(message, repeated, tag="999")] + pub uninterpreted_option: ::std::vec::Vec, +} +pub mod file_options { + /// Generated classes can be optimized for speed or code size. + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum OptimizeMode { + /// Generate complete code for parsing, serialization, + Speed = 1, + /// etc. + /// + /// Use ReflectionOps to implement these methods. + CodeSize = 2, + /// Generate code using MessageLite and the lite runtime. + LiteRuntime = 3, + } +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MessageOptions { + /// Set true to use the old proto1 MessageSet wire format for extensions. + /// This is provided for backwards-compatibility with the MessageSet wire + /// format. You should not use this for any other reason: It's less + /// efficient, has fewer features, and is more complicated. + /// + /// The message must be defined exactly as follows: + /// message Foo { + /// option message_set_wire_format = true; + /// extensions 4 to max; + /// } + /// Note that the message cannot have any defined fields; MessageSets only + /// have extensions. + /// + /// All extensions of your type must be singular messages; e.g. they cannot + /// be int32s, enums, or repeated messages. + /// + /// Because this is an option, the above two restrictions are not enforced by + /// the protocol compiler. + #[prost(bool, optional, tag="1", default="false")] + pub message_set_wire_format: ::std::option::Option, + /// Disables the generation of the standard "descriptor()" accessor, which can + /// conflict with a field of the same name. This is meant to make migration + /// from proto1 easier; new code should avoid fields named "descriptor". + #[prost(bool, optional, tag="2", default="false")] + pub no_standard_descriptor_accessor: ::std::option::Option, + /// Is this message deprecated? + /// Depending on the target platform, this can emit Deprecated annotations + /// for the message, or it will be completely ignored; in the very least, + /// this is a formalization for deprecating messages. + #[prost(bool, optional, tag="3", default="false")] + pub deprecated: ::std::option::Option, + /// Whether the message is an automatically generated map entry type for the + /// maps field. + /// + /// For maps fields: + /// map map_field = 1; + /// The parsed descriptor looks like: + /// message MapFieldEntry { + /// option map_entry = true; + /// optional KeyType key = 1; + /// optional ValueType value = 2; + /// } + /// repeated MapFieldEntry map_field = 1; + /// + /// Implementations may choose not to generate the map_entry=true message, but + /// use a native map in the target language to hold the keys and values. + /// The reflection APIs in such implementations still need to work as + /// if the field is a repeated message field. + /// + /// NOTE: Do not set the option in .proto files. Always use the maps syntax + /// instead. The option should only be implicitly set by the proto compiler + /// parser. + #[prost(bool, optional, tag="7")] + pub map_entry: ::std::option::Option, + /// The parser stores options it doesn't recognize here. See above. + #[prost(message, repeated, tag="999")] + pub uninterpreted_option: ::std::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FieldOptions { + /// The ctype option instructs the C++ code generator to use a different + /// representation of the field than it normally would. See the specific + /// options below. This option is not yet implemented in the open source + /// release -- sorry, we'll try to include it in a future version! + #[prost(enumeration="field_options::CType", optional, tag="1", default="String")] + pub ctype: ::std::option::Option, + /// The packed option can be enabled for repeated primitive fields to enable + /// a more efficient representation on the wire. Rather than repeatedly + /// writing the tag and type for each element, the entire array is encoded as + /// a single length-delimited blob. In proto3, only explicit setting it to + /// false will avoid using packed encoding. + #[prost(bool, optional, tag="2")] + pub packed: ::std::option::Option, + /// The jstype option determines the JavaScript type used for values of the + /// field. The option is permitted only for 64 bit integral and fixed types + /// (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + /// is represented as JavaScript string, which avoids loss of precision that + /// can happen when a large value is converted to a floating point JavaScript. + /// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + /// use the JavaScript "number" type. The behavior of the default option + /// JS_NORMAL is implementation dependent. + /// + /// This option is an enum to permit additional types to be added, e.g. + /// goog.math.Integer. + #[prost(enumeration="field_options::JsType", optional, tag="6", default="JsNormal")] + pub jstype: ::std::option::Option, + /// Should this field be parsed lazily? Lazy applies only to message-type + /// fields. It means that when the outer message is initially parsed, the + /// inner message's contents will not be parsed but instead stored in encoded + /// form. The inner message will actually be parsed when it is first accessed. + /// + /// This is only a hint. Implementations are free to choose whether to use + /// eager or lazy parsing regardless of the value of this option. However, + /// setting this option true suggests that the protocol author believes that + /// using lazy parsing on this field is worth the additional bookkeeping + /// overhead typically needed to implement it. + /// + /// This option does not affect the public interface of any generated code; + /// all method signatures remain the same. Furthermore, thread-safety of the + /// interface is not affected by this option; const methods remain safe to + /// call from multiple threads concurrently, while non-const methods continue + /// to require exclusive access. + /// + /// + /// Note that implementations may choose not to check required fields within + /// a lazy sub-message. That is, calling IsInitialized() on the outer message + /// may return true even if the inner message has missing required fields. + /// This is necessary because otherwise the inner message would have to be + /// parsed in order to perform the check, defeating the purpose of lazy + /// parsing. An implementation which chooses not to check required fields + /// must be consistent about it. That is, for any particular sub-message, the + /// implementation must either *always* check its required fields, or *never* + /// check its required fields, regardless of whether or not the message has + /// been parsed. + #[prost(bool, optional, tag="5", default="false")] + pub lazy: ::std::option::Option, + /// Is this field deprecated? + /// Depending on the target platform, this can emit Deprecated annotations + /// for accessors, or it will be completely ignored; in the very least, this + /// is a formalization for deprecating fields. + #[prost(bool, optional, tag="3", default="false")] + pub deprecated: ::std::option::Option, + /// For Google-internal migration only. Do not use. + #[prost(bool, optional, tag="10", default="false")] + pub weak: ::std::option::Option, + /// The parser stores options it doesn't recognize here. See above. + #[prost(message, repeated, tag="999")] + pub uninterpreted_option: ::std::vec::Vec, +} +pub mod field_options { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum CType { + /// Default mode. + String = 0, + Cord = 1, + StringPiece = 2, + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum JsType { + /// Use the default type. + JsNormal = 0, + /// Use JavaScript strings. + JsString = 1, + /// Use JavaScript numbers. + JsNumber = 2, + } +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct OneofOptions { + /// The parser stores options it doesn't recognize here. See above. + #[prost(message, repeated, tag="999")] + pub uninterpreted_option: ::std::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EnumOptions { + /// Set this option to true to allow mapping different tag names to the same + /// value. + #[prost(bool, optional, tag="2")] + pub allow_alias: ::std::option::Option, + /// Is this enum deprecated? + /// Depending on the target platform, this can emit Deprecated annotations + /// for the enum, or it will be completely ignored; in the very least, this + /// is a formalization for deprecating enums. + #[prost(bool, optional, tag="3", default="false")] + pub deprecated: ::std::option::Option, + /// The parser stores options it doesn't recognize here. See above. + #[prost(message, repeated, tag="999")] + pub uninterpreted_option: ::std::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EnumValueOptions { + /// Is this enum value deprecated? + /// Depending on the target platform, this can emit Deprecated annotations + /// for the enum value, or it will be completely ignored; in the very least, + /// this is a formalization for deprecating enum values. + #[prost(bool, optional, tag="1", default="false")] + pub deprecated: ::std::option::Option, + /// The parser stores options it doesn't recognize here. See above. + #[prost(message, repeated, tag="999")] + pub uninterpreted_option: ::std::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ServiceOptions { + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + /// Is this service deprecated? + /// Depending on the target platform, this can emit Deprecated annotations + /// for the service, or it will be completely ignored; in the very least, + /// this is a formalization for deprecating services. + #[prost(bool, optional, tag="33", default="false")] + pub deprecated: ::std::option::Option, + /// The parser stores options it doesn't recognize here. See above. + #[prost(message, repeated, tag="999")] + pub uninterpreted_option: ::std::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MethodOptions { + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + /// Is this method deprecated? + /// Depending on the target platform, this can emit Deprecated annotations + /// for the method, or it will be completely ignored; in the very least, + /// this is a formalization for deprecating methods. + #[prost(bool, optional, tag="33", default="false")] + pub deprecated: ::std::option::Option, + #[prost(enumeration="method_options::IdempotencyLevel", optional, tag="34", default="IdempotencyUnknown")] + pub idempotency_level: ::std::option::Option, + /// The parser stores options it doesn't recognize here. See above. + #[prost(message, repeated, tag="999")] + pub uninterpreted_option: ::std::vec::Vec, +} +pub mod method_options { + /// Is this method side-effect-free (or safe in HTTP parlance), or idempotent, + /// or neither? HTTP based RPC implementation may choose GET verb for safe + /// methods, and PUT verb for idempotent methods instead of the default POST. + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum IdempotencyLevel { + IdempotencyUnknown = 0, + /// implies idempotent + NoSideEffects = 1, + /// idempotent, but may have side effects + Idempotent = 2, + } +} +/// A message representing a option the parser does not recognize. This only +/// appears in options protos created by the compiler::Parser class. +/// DescriptorPool resolves these when building Descriptor objects. Therefore, +/// options protos in descriptor objects (e.g. returned by Descriptor::options(), +/// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +/// in them. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UninterpretedOption { + #[prost(message, repeated, tag="2")] + pub name: ::std::vec::Vec, + /// The value of the uninterpreted option, in whatever type the tokenizer + /// identified it as during parsing. Exactly one of these should be set. + #[prost(string, optional, tag="3")] + pub identifier_value: ::std::option::Option, + #[prost(uint64, optional, tag="4")] + pub positive_int_value: ::std::option::Option, + #[prost(int64, optional, tag="5")] + pub negative_int_value: ::std::option::Option, + #[prost(double, optional, tag="6")] + pub double_value: ::std::option::Option, + #[prost(bytes, optional, tag="7")] + pub string_value: ::std::option::Option>, + #[prost(string, optional, tag="8")] + pub aggregate_value: ::std::option::Option, +} +pub mod uninterpreted_option { + /// The name of the uninterpreted option. Each string represents a segment in + /// a dot-separated name. is_extension is true iff a segment represents an + /// extension (denoted with parentheses in options specs in .proto files). + /// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents + /// "foo.(bar.baz).qux". + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct NamePart { + #[prost(string, required, tag="1")] + pub name_part: std::string::String, + #[prost(bool, required, tag="2")] + pub is_extension: bool, + } +} +// =================================================================== +// Optional source code info + +/// Encapsulates information about the original source file from which a +/// FileDescriptorProto was generated. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SourceCodeInfo { + /// A Location identifies a piece of source code in a .proto file which + /// corresponds to a particular definition. This information is intended + /// to be useful to IDEs, code indexers, documentation generators, and similar + /// tools. + /// + /// For example, say we have a file like: + /// message Foo { + /// optional string foo = 1; + /// } + /// Let's look at just the field definition: + /// optional string foo = 1; + /// ^ ^^ ^^ ^ ^^^ + /// a bc de f ghi + /// We have the following locations: + /// span path represents + /// [a,i) [ 4, 0, 2, 0 ] The whole field definition. + /// [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + /// [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + /// [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + /// [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + /// + /// Notes: + /// - A location may refer to a repeated field itself (i.e. not to any + /// particular index within it). This is used whenever a set of elements are + /// logically enclosed in a single code segment. For example, an entire + /// extend block (possibly containing multiple extension definitions) will + /// have an outer location whose path refers to the "extensions" repeated + /// field without an index. + /// - Multiple locations may have the same path. This happens when a single + /// logical declaration is spread out across multiple places. The most + /// obvious example is the "extend" block again -- there may be multiple + /// extend blocks in the same scope, each of which will have the same path. + /// - A location's span is not always a subset of its parent's span. For + /// example, the "extendee" of an extension declaration appears at the + /// beginning of the "extend" block and is shared by all extensions within + /// the block. + /// - Just because a location's span is a subset of some other location's span + /// does not mean that it is a descendant. For example, a "group" defines + /// both a type and a field in a single declaration. Thus, the locations + /// corresponding to the type and field and their components will overlap. + /// - Code which tries to interpret locations should probably be designed to + /// ignore those that it doesn't understand, as more types of locations could + /// be recorded in the future. + #[prost(message, repeated, tag="1")] + pub location: ::std::vec::Vec, +} +pub mod source_code_info { + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct Location { + /// Identifies which part of the FileDescriptorProto was defined at this + /// location. + /// + /// Each element is a field number or an index. They form a path from + /// the root FileDescriptorProto to the place where the definition. For + /// example, this path: + /// [ 4, 3, 2, 7, 1 ] + /// refers to: + /// file.message_type(3) // 4, 3 + /// .field(7) // 2, 7 + /// .name() // 1 + /// This is because FileDescriptorProto.message_type has field number 4: + /// repeated DescriptorProto message_type = 4; + /// and DescriptorProto.field has field number 2: + /// repeated FieldDescriptorProto field = 2; + /// and FieldDescriptorProto.name has field number 1: + /// optional string name = 1; + /// + /// Thus, the above path gives the location of a field name. If we removed + /// the last element: + /// [ 4, 3, 2, 7 ] + /// this path refers to the whole field declaration (from the beginning + /// of the label to the terminating semicolon). + #[prost(int32, repeated, tag="1")] + pub path: ::std::vec::Vec, + /// Always has exactly three or four elements: start line, start column, + /// end line (optional, otherwise assumed same as start line), end column. + /// These are packed into a single field for efficiency. Note that line + /// and column numbers are zero-based -- typically you will want to add + /// 1 to each before displaying to a user. + #[prost(int32, repeated, tag="2")] + pub span: ::std::vec::Vec, + /// If this SourceCodeInfo represents a complete declaration, these are any + /// comments appearing before and after the declaration which appear to be + /// attached to the declaration. + /// + /// A series of line comments appearing on consecutive lines, with no other + /// tokens appearing on those lines, will be treated as a single comment. + /// + /// leading_detached_comments will keep paragraphs of comments that appear + /// before (but not connected to) the current element. Each paragraph, + /// separated by empty lines, will be one comment element in the repeated + /// field. + /// + /// Only the comment content is provided; comment markers (e.g. //) are + /// stripped out. For block comments, leading whitespace and an asterisk + /// will be stripped from the beginning of each line other than the first. + /// Newlines are included in the output. + /// + /// Examples: + /// + /// optional int32 foo = 1; // Comment attached to foo. + /// // Comment attached to bar. + /// optional int32 bar = 2; + /// + /// optional string baz = 3; + /// // Comment attached to baz. + /// // Another line attached to baz. + /// + /// // Comment attached to qux. + /// // + /// // Another line attached to qux. + /// optional double qux = 4; + /// + /// // Detached comment for corge. This is not leading or trailing comments + /// // to qux or corge because there are blank lines separating it from + /// // both. + /// + /// // Detached comment for corge paragraph 2. + /// + /// optional string corge = 5; + /// /* Block comment attached + /// * to corge. Leading asterisks + /// * will be removed. */ + /// /* Block comment attached to + /// * grault. */ + /// optional int32 grault = 6; + /// + /// // ignored detached comments. + #[prost(string, optional, tag="3")] + pub leading_comments: ::std::option::Option, + #[prost(string, optional, tag="4")] + pub trailing_comments: ::std::option::Option, + #[prost(string, repeated, tag="6")] + pub leading_detached_comments: ::std::vec::Vec, + } +} +/// Describes the relationship between generated code and its original source +/// file. A GeneratedCodeInfo message is associated with only one generated +/// source file, but may contain references to different source .proto files. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GeneratedCodeInfo { + /// An Annotation connects some span of text in generated code to an element + /// of its generating .proto file. + #[prost(message, repeated, tag="1")] + pub annotation: ::std::vec::Vec, +} +pub mod generated_code_info { + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct Annotation { + /// Identifies the element in the original source .proto file. This field + /// is formatted the same as SourceCodeInfo.Location.path. + #[prost(int32, repeated, tag="1")] + pub path: ::std::vec::Vec, + /// Identifies the filesystem path to the original source .proto. + #[prost(string, optional, tag="2")] + pub source_file: ::std::option::Option, + /// Identifies the starting offset in bytes in the generated code + /// that relates to the identified object. + #[prost(int32, optional, tag="3")] + pub begin: ::std::option::Option, + /// Identifies the ending offset in bytes in the generated code that + /// relates to the identified offset. The end offset should be one past + /// the last relevant byte (so the length of the text = end - begin). + #[prost(int32, optional, tag="4")] + pub end: ::std::option::Option, + } +} diff --git a/proto/src/prost/tendermint.abci.rs b/proto/src/prost/tendermint.abci.rs index 6bb352dff..37d5829e6 100644 --- a/proto/src/prost/tendermint.abci.rs +++ b/proto/src/prost/tendermint.abci.rs @@ -73,7 +73,7 @@ pub struct RequestSetOption { #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestInitChain { #[prost(message, optional, tag="1")] - pub time: ::std::option::Option<::prost_types::Timestamp>, + pub time: ::std::option::Option, #[prost(string, tag="2")] pub chain_id: std::string::String, #[prost(message, optional, tag="3")] @@ -221,16 +221,20 @@ pub struct ResponseEcho { pub struct ResponseFlush { } #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct ResponseInfo { #[prost(string, tag="1")] pub data: std::string::String, #[prost(string, tag="2")] pub version: std::string::String, #[prost(uint64, tag="3")] + #[serde(with = "crate::serializers::from_str")] pub app_version: u64, #[prost(int64, tag="4")] + #[serde(with = "crate::serializers::from_str")] pub last_block_height: i64, #[prost(bytes, tag="5")] + #[serde(skip_serializing_if = "Vec::is_empty", with = "serde_bytes")] pub last_block_app_hash: std::vec::Vec, } /// nondeterministic @@ -505,17 +509,17 @@ pub struct VoteInfo { } #[derive(Clone, PartialEq, ::prost::Message)] pub struct Evidence { - #[prost(string, tag="1")] - pub r#type: std::string::String, + #[prost(enumeration="EvidenceType", tag="1")] + pub r#type: i32, /// The offending validator #[prost(message, optional, tag="2")] pub validator: ::std::option::Option, - /// The height when the offense occurred + /// The height when the offense occurred #[prost(int64, tag="3")] pub height: i64, /// The corresponding time where the offense occurred #[prost(message, optional, tag="4")] - pub time: ::std::option::Option<::prost_types::Timestamp>, + pub time: ::std::option::Option, /// Total voting power of the validator set in case the ABCI application does /// not store historical validators. /// https://github.com/tendermint/tendermint/issues/4581 @@ -549,3 +553,10 @@ pub enum CheckTxType { New = 0, Recheck = 1, } +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum EvidenceType { + Unknown = 0, + DuplicateVote = 1, + LightClientAttack = 2, +} diff --git a/proto/src/prost/tendermint.consensus.rs b/proto/src/prost/tendermint.consensus.rs index 32e17efb6..0a6834840 100644 --- a/proto/src/prost/tendermint.consensus.rs +++ b/proto/src/prost/tendermint.consensus.rs @@ -139,7 +139,7 @@ pub struct MsgInfo { #[derive(Clone, PartialEq, ::prost::Message)] pub struct TimeoutInfo { #[prost(message, optional, tag="1")] - pub duration: ::std::option::Option<::prost_types::Duration>, + pub duration: ::std::option::Option, #[prost(int64, tag="2")] pub height: i64, #[prost(int32, tag="3")] @@ -176,7 +176,7 @@ pub mod wal_message { #[derive(Clone, PartialEq, ::prost::Message)] pub struct TimedWalMessage { #[prost(message, optional, tag="1")] - pub time: ::std::option::Option<::prost_types::Timestamp>, + pub time: ::std::option::Option, #[prost(message, optional, tag="2")] pub msg: ::std::option::Option, } diff --git a/proto/src/prost/tendermint.crypto.rs b/proto/src/prost/tendermint.crypto.rs index e459e853c..4b3e8c2b0 100644 --- a/proto/src/prost/tendermint.crypto.rs +++ b/proto/src/prost/tendermint.crypto.rs @@ -47,28 +47,18 @@ pub struct ProofOps { } /// PublicKey defines the keys available for use with Tendermint Validators #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct PublicKey { #[prost(oneof="public_key::Sum", tags="1")] pub sum: ::std::option::Option, } pub mod public_key { #[derive(Clone, PartialEq, ::prost::Oneof)] + #[derive(::serde::Deserialize, ::serde::Serialize)] + #[serde(tag = "type", content = "value")] pub enum Sum { #[prost(bytes, tag="1")] - Ed25519(std::vec::Vec), - } -} -/// PrivateKey defines the keys available for use with Tendermint Validators -/// WARNING PrivateKey is used for internal purposes only -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct PrivateKey { - #[prost(oneof="private_key::Sum", tags="1")] - pub sum: ::std::option::Option, -} -pub mod private_key { - #[derive(Clone, PartialEq, ::prost::Oneof)] - pub enum Sum { - #[prost(bytes, tag="1")] + #[serde(rename = "tendermint/PubKeyEd25519", with = "crate::serializers::bytes::base64string")] Ed25519(std::vec::Vec), } } diff --git a/proto/src/prost/tendermint.evidence.rs b/proto/src/prost/tendermint.evidence.rs index 0e31bf7c1..2f2dbcc7d 100644 --- a/proto/src/prost/tendermint.evidence.rs +++ b/proto/src/prost/tendermint.evidence.rs @@ -5,10 +5,12 @@ pub struct List { } #[derive(Clone, PartialEq, ::prost::Message)] pub struct Info { - #[prost(bool, tag="1")] - pub committed: bool, - #[prost(int64, tag="2")] - pub priority: i64, - #[prost(message, optional, tag="3")] + #[prost(message, optional, tag="1")] pub evidence: ::std::option::Option, + #[prost(message, optional, tag="2")] + pub time: ::std::option::Option, + #[prost(message, repeated, tag="3")] + pub validators: ::std::vec::Vec, + #[prost(int64, tag="4")] + pub total_voting_power: i64, } diff --git a/proto/src/prost/tendermint.libs.bits.rs b/proto/src/prost/tendermint.libs.bits.rs index 4e078a0aa..01692c547 100644 --- a/proto/src/prost/tendermint.libs.bits.rs +++ b/proto/src/prost/tendermint.libs.bits.rs @@ -1,4 +1,5 @@ #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct BitArray { #[prost(int64, tag="1")] pub bits: i64, diff --git a/proto/src/prost/tendermint.mempool.rs b/proto/src/prost/tendermint.mempool.rs index 1f44c353f..c6ff5c9c5 100644 --- a/proto/src/prost/tendermint.mempool.rs +++ b/proto/src/prost/tendermint.mempool.rs @@ -1,7 +1,7 @@ #[derive(Clone, PartialEq, ::prost::Message)] -pub struct Tx { - #[prost(bytes, tag="1")] - pub tx: std::vec::Vec, +pub struct Txs { + #[prost(bytes, repeated, tag="1")] + pub txs: ::std::vec::Vec>, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct Message { @@ -12,6 +12,6 @@ pub mod message { #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Sum { #[prost(message, tag="1")] - Tx(super::Tx), + Txs(super::Txs), } } diff --git a/proto/src/prost/tendermint.state.rs b/proto/src/prost/tendermint.state.rs index 0d98c412e..664dc6556 100644 --- a/proto/src/prost/tendermint.state.rs +++ b/proto/src/prost/tendermint.state.rs @@ -48,7 +48,7 @@ pub struct State { #[prost(message, optional, tag="4")] pub last_block_id: ::std::option::Option, #[prost(message, optional, tag="5")] - pub last_block_time: ::std::option::Option<::prost_types::Timestamp>, + pub last_block_time: ::std::option::Option, /// LastValidators is used to validate block.LastCommit. /// Validators are persisted to the database separately every time they change, /// so we can query for historical validator sets. diff --git a/proto/src/prost/tendermint.types.rs b/proto/src/prost/tendermint.types.rs index f5bc42660..125192acd 100644 --- a/proto/src/prost/tendermint.types.rs +++ b/proto/src/prost/tendermint.types.rs @@ -1,9 +1,43 @@ +#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] +pub struct ValidatorSet { + #[prost(message, repeated, tag="1")] + pub validators: ::std::vec::Vec, + #[prost(message, optional, tag="2")] + pub proposer: ::std::option::Option, + #[prost(int64, tag="3")] + pub total_voting_power: i64, +} +#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] +pub struct Validator { + #[prost(bytes, tag="1")] + #[serde(with = "crate::serializers::bytes::hexstring")] + pub address: std::vec::Vec, + #[prost(message, optional, tag="2")] + pub pub_key: ::std::option::Option, + #[prost(int64, tag="3")] + #[serde(alias = "power", with = "crate::serializers::from_str")] + pub voting_power: i64, + #[prost(int64, tag="4")] + #[serde(with = "crate::serializers::from_str", default)] + pub proposer_priority: i64, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SimpleValidator { + #[prost(message, optional, tag="1")] + pub pub_key: ::std::option::Option, + #[prost(int64, tag="2")] + pub voting_power: i64, +} /// PartsetHeader #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct PartSetHeader { #[prost(uint32, tag="1")] pub total: u32, #[prost(bytes, tag="2")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub hash: std::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] @@ -17,16 +51,20 @@ pub struct Part { } /// BlockID #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct BlockId { #[prost(bytes, tag="1")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub hash: std::vec::Vec, #[prost(message, optional, tag="2")] + #[serde(alias = "parts")] pub part_set_header: ::std::option::Option, } // -------------------------------- /// Header defines the structure of a Tendermint block header. #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct Header { /// basic block info #[prost(message, optional, tag="1")] @@ -34,9 +72,11 @@ pub struct Header { #[prost(string, tag="2")] pub chain_id: std::string::String, #[prost(int64, tag="3")] + #[serde(with = "crate::serializers::from_str")] pub height: i64, #[prost(message, optional, tag="4")] - pub time: ::std::option::Option<::prost_types::Timestamp>, + #[serde(with = "crate::serializers::option_timestamp")] + pub time: ::std::option::Option, /// prev block info #[prost(message, optional, tag="5")] pub last_block_id: ::std::option::Option, @@ -44,96 +84,123 @@ pub struct Header { /// /// commit from validators from the last block #[prost(bytes, tag="6")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub last_commit_hash: std::vec::Vec, /// transactions #[prost(bytes, tag="7")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub data_hash: std::vec::Vec, /// hashes from the app output from the prev block /// /// validators for the current block #[prost(bytes, tag="8")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub validators_hash: std::vec::Vec, /// validators for the next block #[prost(bytes, tag="9")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub next_validators_hash: std::vec::Vec, /// consensus params for current block #[prost(bytes, tag="10")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub consensus_hash: std::vec::Vec, /// state after txs from the previous block #[prost(bytes, tag="11")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub app_hash: std::vec::Vec, /// root hash of all results from the txs from the previous block #[prost(bytes, tag="12")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub last_results_hash: std::vec::Vec, /// consensus info /// /// evidence included in the block #[prost(bytes, tag="13")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub evidence_hash: std::vec::Vec, /// original proposer of the block #[prost(bytes, tag="14")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub proposer_address: std::vec::Vec, } /// Data contains the set of transactions included in the block #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct Data { /// Txs that will be applied by state @ block.Height+1. /// NOTE: not all txs here are valid. We're just agreeing on the order first. /// This means that block.AppHash does not include these txs. #[prost(bytes, repeated, tag="1")] + #[serde(with = "crate::serializers::txs")] pub txs: ::std::vec::Vec>, /// Volatile #[prost(bytes, tag="2")] + #[serde(default)] pub hash: std::vec::Vec, } /// Vote represents a prevote, precommit, or commit vote from validators for /// consensus. #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct Vote { #[prost(enumeration="SignedMsgType", tag="1")] pub r#type: i32, #[prost(int64, tag="2")] + #[serde(with = "crate::serializers::from_str")] pub height: i64, #[prost(int32, tag="3")] + #[serde(with = "crate::serializers::from_str")] pub round: i32, /// zero if vote is nil. #[prost(message, optional, tag="4")] pub block_id: ::std::option::Option, #[prost(message, optional, tag="5")] - pub timestamp: ::std::option::Option<::prost_types::Timestamp>, + #[serde(with = "crate::serializers::option_timestamp")] + pub timestamp: ::std::option::Option, #[prost(bytes, tag="6")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub validator_address: std::vec::Vec, #[prost(int32, tag="7")] + #[serde(with = "crate::serializers::from_str")] pub validator_index: i32, #[prost(bytes, tag="8")] + #[serde(with = "crate::serializers::bytes::base64string")] pub signature: std::vec::Vec, } /// Commit contains the evidence that a block was committed by a set of validators. #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct Commit { #[prost(int64, tag="1")] + #[serde(with = "crate::serializers::from_str")] pub height: i64, #[prost(int32, tag="2")] pub round: i32, #[prost(message, optional, tag="3")] pub block_id: ::std::option::Option, #[prost(message, repeated, tag="4")] + #[serde(with = "crate::serializers::nullable")] pub signatures: ::std::vec::Vec, #[prost(bytes, tag="5")] + #[serde(default)] pub hash: std::vec::Vec, #[prost(message, optional, tag="6")] pub bit_array: ::std::option::Option, } /// CommitSig is a part of the Vote included in a Commit. #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct CommitSig { #[prost(enumeration="BlockIdFlag", tag="1")] pub block_id_flag: i32, #[prost(bytes, tag="2")] + #[serde(with = "crate::serializers::bytes::hexstring")] pub validator_address: std::vec::Vec, #[prost(message, optional, tag="3")] - pub timestamp: ::std::option::Option<::prost_types::Timestamp>, + #[serde(with = "crate::serializers::option_timestamp")] + pub timestamp: ::std::option::Option, #[prost(bytes, tag="4")] + #[serde(with = "crate::serializers::bytes::base64string")] pub signature: std::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] @@ -149,11 +216,12 @@ pub struct Proposal { #[prost(message, optional, tag="5")] pub block_id: ::std::option::Option, #[prost(message, optional, tag="6")] - pub timestamp: ::std::option::Option<::prost_types::Timestamp>, + pub timestamp: ::std::option::Option, #[prost(bytes, tag="7")] pub signature: std::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct SignedHeader { #[prost(message, optional, tag="1")] pub header: ::std::option::Option
, @@ -161,14 +229,25 @@ pub struct SignedHeader { pub commit: ::std::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] +pub struct LightBlock { + #[prost(message, optional, tag="1")] + pub signed_header: ::std::option::Option, + #[prost(message, optional, tag="2")] + pub validator_set: ::std::option::Option, +} +#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct BlockMeta { #[prost(message, optional, tag="1")] pub block_id: ::std::option::Option, #[prost(int64, tag="2")] + #[serde(with = "crate::serializers::from_str")] pub block_size: i64, #[prost(message, optional, tag="3")] pub header: ::std::option::Option
, #[prost(int64, tag="4")] + #[serde(with = "crate::serializers::from_str")] pub num_txs: i64, } /// TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree. @@ -184,6 +263,7 @@ pub struct TxProof { /// BlockIdFlag indicates which BlcokID the signature is for #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] +#[derive(::num_derive::FromPrimitive, ::num_derive::ToPrimitive)] pub enum BlockIdFlag { Unknown = 0, Absent = 1, @@ -243,6 +323,7 @@ pub struct BlockParams { } /// EvidenceParams determine how we handle evidence of malfeasance. #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct EvidenceParams { /// Max age of evidence, in blocks. /// @@ -256,18 +337,14 @@ pub struct EvidenceParams { /// mechanism for handling [Nothing-At-Stake /// attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). #[prost(message, optional, tag="2")] - pub max_age_duration: ::std::option::Option<::prost_types::Duration>, + pub max_age_duration: ::std::option::Option, /// This sets the maximum number of evidence that can be committed in a single block. /// and should fall comfortably under the max block bytes when we consider the size of /// each evidence (See MaxEvidenceBytes). The maximum number is MaxEvidencePerBlock. /// Default is 50 #[prost(uint32, tag="3")] + #[serde(with = "crate::serializers::from_str", default)] pub max_num: u32, - /// Proof trial period dictates the time given for nodes accused of amnesia evidence, incorrectly - /// voting twice in two different rounds to respond with their respective proofs. - /// Default is half the max age in blocks: 50,000 - #[prost(int64, tag="4")] - pub proof_trial_period: i64, } /// ValidatorParams restrict the public key types validators can use. /// NOTE: uses ABCI pubkey naming, not Amino names. @@ -295,93 +372,64 @@ pub struct HashedParams { /// DuplicateVoteEvidence contains evidence a validator signed two conflicting /// votes. #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct DuplicateVoteEvidence { #[prost(message, optional, tag="1")] pub vote_a: ::std::option::Option, #[prost(message, optional, tag="2")] pub vote_b: ::std::option::Option, - #[prost(message, optional, tag="3")] - pub timestamp: ::std::option::Option<::prost_types::Timestamp>, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct PotentialAmnesiaEvidence { - #[prost(message, optional, tag="1")] - pub vote_a: ::std::option::Option, - #[prost(message, optional, tag="2")] - pub vote_b: ::std::option::Option, - #[prost(int64, tag="3")] - pub height_stamp: i64, - #[prost(message, optional, tag="4")] - pub timestamp: ::std::option::Option<::prost_types::Timestamp>, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct AmnesiaEvidence { - #[prost(message, optional, tag="1")] - pub potential_amnesia_evidence: ::std::option::Option, - #[prost(message, optional, tag="2")] - pub polc: ::std::option::Option, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ConflictingHeadersEvidence { - #[prost(message, optional, tag="1")] - pub h1: ::std::option::Option, - #[prost(message, optional, tag="2")] - pub h2: ::std::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct LunaticValidatorEvidence { +#[derive(::serde::Deserialize, ::serde::Serialize)] +pub struct LightClientAttackEvidence { #[prost(message, optional, tag="1")] - pub header: ::std::option::Option
, - #[prost(message, optional, tag="2")] - pub vote: ::std::option::Option, - #[prost(string, tag="3")] - pub invalid_header_field: std::string::String, - #[prost(message, optional, tag="4")] - pub timestamp: ::std::option::Option<::prost_types::Timestamp>, + pub conflicting_block: ::std::option::Option, + #[prost(int64, tag="2")] + pub common_height: i64, } #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] +#[serde(from = "crate::serializers::evidence::EvidenceVariant", into = "crate::serializers::evidence::EvidenceVariant")] pub struct Evidence { - #[prost(oneof="evidence::Sum", tags="1, 2, 3, 4, 5")] + #[prost(oneof="evidence::Sum", tags="1, 2")] pub sum: ::std::option::Option, } pub mod evidence { #[derive(Clone, PartialEq, ::prost::Oneof)] + #[derive(::serde::Deserialize, ::serde::Serialize)] + #[serde(tag = "type", content = "value")] + #[serde(from = "crate::serializers::evidence::EvidenceVariant", into = "crate::serializers::evidence::EvidenceVariant")] pub enum Sum { #[prost(message, tag="1")] + #[serde(rename = "tendermint/DuplicateVoteEvidence")] DuplicateVoteEvidence(super::DuplicateVoteEvidence), #[prost(message, tag="2")] - ConflictingHeadersEvidence(super::ConflictingHeadersEvidence), - #[prost(message, tag="3")] - LunaticValidatorEvidence(super::LunaticValidatorEvidence), - #[prost(message, tag="4")] - PotentialAmnesiaEvidence(super::PotentialAmnesiaEvidence), - #[prost(message, tag="5")] - AmnesiaEvidence(super::AmnesiaEvidence), + #[serde(rename = "tendermint/LightClientAttackEvidence")] + LightClientAttackEvidence(super::LightClientAttackEvidence), } } /// EvidenceData contains any evidence of malicious wrong-doing by validators #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct EvidenceData { #[prost(message, repeated, tag="1")] + #[serde(with = "crate::serializers::nullable")] pub evidence: ::std::vec::Vec, #[prost(bytes, tag="2")] + #[serde(default)] pub hash: std::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct ProofOfLockChange { - #[prost(message, repeated, tag="1")] - pub votes: ::std::vec::Vec, - #[prost(message, optional, tag="2")] - pub pub_key: ::std::option::Option, -} -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct CanonicalBlockId { #[prost(bytes, tag="1")] pub hash: std::vec::Vec, #[prost(message, optional, tag="2")] + #[serde(alias = "parts")] pub part_set_header: ::std::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct CanonicalPartSetHeader { #[prost(uint32, tag="1")] pub total: u32, @@ -404,11 +452,12 @@ pub struct CanonicalProposal { #[prost(message, optional, tag="5")] pub block_id: ::std::option::Option, #[prost(message, optional, tag="6")] - pub timestamp: ::std::option::Option<::prost_types::Timestamp>, + pub timestamp: ::std::option::Option, #[prost(string, tag="7")] pub chain_id: std::string::String, } #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct CanonicalVote { /// type alias for byte #[prost(enumeration="SignedMsgType", tag="1")] @@ -422,38 +471,12 @@ pub struct CanonicalVote { #[prost(message, optional, tag="4")] pub block_id: ::std::option::Option, #[prost(message, optional, tag="5")] - pub timestamp: ::std::option::Option<::prost_types::Timestamp>, + pub timestamp: ::std::option::Option, #[prost(string, tag="6")] pub chain_id: std::string::String, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct ValidatorSet { - #[prost(message, repeated, tag="1")] - pub validators: ::std::vec::Vec, - #[prost(message, optional, tag="2")] - pub proposer: ::std::option::Option, - #[prost(int64, tag="3")] - pub total_voting_power: i64, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct Validator { - #[prost(bytes, tag="1")] - pub address: std::vec::Vec, - #[prost(message, optional, tag="2")] - pub pub_key: ::std::option::Option, - #[prost(int64, tag="3")] - pub voting_power: i64, - #[prost(int64, tag="4")] - pub proposer_priority: i64, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct SimpleValidator { - #[prost(message, optional, tag="1")] - pub pub_key: ::std::option::Option, - #[prost(int64, tag="2")] - pub voting_power: i64, -} -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct Block { #[prost(message, optional, tag="1")] pub header: ::std::option::Option
, diff --git a/proto/src/prost/tendermint.version.rs b/proto/src/prost/tendermint.version.rs index b1a4113cb..e6537f213 100644 --- a/proto/src/prost/tendermint.version.rs +++ b/proto/src/prost/tendermint.version.rs @@ -12,9 +12,12 @@ pub struct App { /// including all blockchain data structures and the rules of the application's /// state transition machine. #[derive(Clone, PartialEq, ::prost::Message)] +#[derive(::serde::Deserialize, ::serde::Serialize)] pub struct Consensus { #[prost(uint64, tag="1")] + #[serde(with = "crate::serializers::from_str")] pub block: u64, #[prost(uint64, tag="2")] + #[serde(with = "crate::serializers::from_str", default)] pub app: u64, } diff --git a/proto/src/protobuf.rs b/proto/src/protobuf.rs new file mode 100644 index 000000000..5a5ddebe0 --- /dev/null +++ b/proto/src/protobuf.rs @@ -0,0 +1,55 @@ +// Google protobuf Timestamp and Duration types reimplemented because their comments are turned +// into invalid documentation texts and doctest chokes on them. See https://github.com/danburkert/prost/issues/374 +// Prost does not seem to have a way yet to remove documentations defined in protobuf files. +// These structs are defined in gogoproto v1.3.1 at https://github.com/gogo/protobuf/tree/v1.3.1/protobuf/google/protobuf + +/// A Timestamp represents a point in time independent of any time zone or local +/// calendar, encoded as a count of seconds and fractions of seconds at +/// nanosecond resolution. The count is relative to an epoch at UTC midnight on +/// January 1, 1970, in the proleptic Gregorian calendar which extends the +/// Gregorian calendar backwards to year one. +/// +/// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap +/// second table is needed for interpretation, using a [24-hour linear +/// smear](https://developers.google.com/time/smear). +/// +/// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By +/// restricting to that range, we ensure that we can convert to and from [RFC +/// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. +#[derive(Clone, PartialEq, ::prost::Message, ::serde::Deserialize, ::serde::Serialize)] +pub struct Timestamp { + /// Represents seconds of UTC time since Unix epoch + /// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + /// 9999-12-31T23:59:59Z inclusive. + #[prost(int64, tag = "1")] + pub seconds: i64, + /// Non-negative fractions of a second at nanosecond resolution. Negative + /// second values with fractions must still have non-negative nanos values + /// that count forward in time. Must be from 0 to 999,999,999 + /// inclusive. + #[prost(int32, tag = "2")] + pub nanos: i32, +} + +/// A Duration represents a signed, fixed-length span of time represented +/// as a count of seconds and fractions of seconds at nanosecond +/// resolution. It is independent of any calendar and concepts like "day" +/// or "month". It is related to Timestamp in that the difference between +/// two Timestamp values is a Duration and it can be added or subtracted +/// from a Timestamp. Range is approximately +-10,000 years. +#[derive(Clone, PartialEq, ::prost::Message, ::serde::Deserialize, ::serde::Serialize)] +pub struct Duration { + /// Signed seconds of the span of time. Must be from -315,576,000,000 + /// to +315,576,000,000 inclusive. Note: these bounds are computed from: + /// 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + #[prost(int64, tag = "1")] + pub seconds: i64, + /// Signed fractions of a second at nanosecond resolution of the span + /// of time. Durations less than one second are represented with a 0 + /// `seconds` field and a positive or negative `nanos` field. For durations + /// of one second or more, a non-zero value for the `nanos` field must be + /// of the same sign as the `seconds` field. Must be from -999,999,999 + /// to +999,999,999 inclusive. + #[prost(int32, tag = "2")] + pub nanos: i32, +} diff --git a/proto/src/serializers.rs b/proto/src/serializers.rs new file mode 100644 index 000000000..3107d7b35 --- /dev/null +++ b/proto/src/serializers.rs @@ -0,0 +1,54 @@ +//! Serde JSON serializers +//! +//! Serializers and deserializers for a transparent developer experience. +//! +//! CAUTION: There are no guarantees for backwards compatibility, this module should be considered +//! an internal implementation detail which can vanish without further warning. Use at your own +//! risk. +//! +//! All serializers are presented in a serializers:::: +//! format. +//! +//! This example shows how to serialize Vec into different types of strings: +//! ```ignore +//! use serde::{Serialize, Deserialize}; +//! use crate::serializers; +//! +//! #[derive(Serialize, Deserialize)] +//! struct ByteTypes { +//! +//! #[serde(with="serializers::bytes::hexstring")] +//! hexbytes: Vec, +//! +//! #[serde(with="serializers::bytes::base64string")] +//! base64bytes: Vec, +//! +//! #[serde(with="serializers::bytes::string")] +//! bytes: Vec, +//! +//! } +//! ``` +//! +//! Available serializers: +//! i64 <-> string: #[serde(with="serializers::from_str")] +//! u64 <-> string: #[serde(with="serializers::from_str")] +//! std::time::Duration <-> nanoseconds as string #[serde(with="serializers::time_duration")] +//! Vec <-> HexString: #[serde(with="serializers::bytes::hexstring")] +//! Vec <-> Base64String: #[serde(with="serializers::bytes::base64string")] +//! Vec <-> String: #[serde(with="serializers::bytes::string")] +//! +//! Notes: +//! * Any type that has the "FromStr" trait can be serialized into a string with +//! serializers::primitives::string. +//! * serializers::bytes::* deserializes a null value into an empty vec![]. + +// Todo: remove dead_code allowance as soon as more types are implemented +#![allow(dead_code)] +pub mod bytes; +pub mod evidence; +pub mod from_str; +pub mod nullable; +pub mod option_timestamp; +pub mod optional; +pub mod time_duration; +pub mod txs; diff --git a/tendermint/src/serializers/bytes.rs b/proto/src/serializers/bytes.rs similarity index 67% rename from tendermint/src/serializers/bytes.rs rename to proto/src/serializers/bytes.rs index 6bcba2075..5d534f3f0 100644 --- a/tendermint/src/serializers/bytes.rs +++ b/proto/src/serializers/bytes.rs @@ -22,7 +22,7 @@ pub mod hexstring { S: Serializer, T: AsRef<[u8]>, { - let hex_bytes = hex::encode(value.as_ref()); + let hex_bytes = hex::encode_upper(value.as_ref()); let hex_string = String::from_utf8(hex_bytes).map_err(serde::ser::Error::custom)?; serializer.serialize_str(&hex_string) } @@ -54,13 +54,39 @@ pub mod base64string { } } +/// Serialize into Option, deserialize from Option +pub mod option_base64string { + use serde::{Deserialize, Deserializer, Serializer}; + use subtle_encoding::base64; + + /// Deserialize Option into Vec or null + pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> + where + D: Deserializer<'de>, + { + let string = Option::::deserialize(deserializer)?.unwrap_or_default(); + base64::decode(&string).map_err(serde::de::Error::custom) + } + + /// Serialize from T into Option + pub fn serialize(value: &T, serializer: S) -> Result + where + S: Serializer, + T: AsRef<[u8]>, + { + let base64_bytes = base64::encode(value.as_ref()); + let base64_string = String::from_utf8(base64_bytes).map_err(serde::ser::Error::custom)?; + serializer.serialize_str(&base64_string) + } +} + /// Serialize into string, deserialize from string -pub(crate) mod string { +pub mod string { use serde::{Deserialize, Deserializer, Serializer}; /// Deserialize string into Vec #[allow(dead_code)] - pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> + pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> where D: Deserializer<'de>, { @@ -70,7 +96,7 @@ pub(crate) mod string { /// Serialize from T into string #[allow(dead_code)] - pub(crate) fn serialize(value: &T, serializer: S) -> Result + pub fn serialize(value: &T, serializer: S) -> Result where S: Serializer, T: AsRef<[u8]>, diff --git a/proto/src/serializers/evidence.rs b/proto/src/serializers/evidence.rs new file mode 100644 index 000000000..bbaa7207b --- /dev/null +++ b/proto/src/serializers/evidence.rs @@ -0,0 +1,50 @@ +use crate::tendermint::types::evidence::Sum; +use crate::tendermint::types::Evidence; + +/// EvidenceVariant helper struct for evidence serialization +/// This is a workaround until we figure a better way of JSON serializing evidence. +/// It is a modified copy of the crate::tendermint::types::evidence::Sum struct. +#[allow(clippy::large_enum_variant)] +#[derive(Clone, PartialEq, ::serde::Deserialize, ::serde::Serialize)] +#[serde(tag = "type", content = "value")] +pub enum EvidenceVariant { + #[serde(rename = "tendermint/DuplicateVoteEvidence")] + DuplicateVoteEvidence(crate::tendermint::types::DuplicateVoteEvidence), + #[serde(rename = "tendermint/LightClientAttackEvidence")] + LightClientAttackEvidence(crate::tendermint::types::LightClientAttackEvidence), +} + +impl From for Evidence { + fn from(value: EvidenceVariant) -> Self { + match value { + EvidenceVariant::DuplicateVoteEvidence(d) => Evidence { + sum: Some(Sum::DuplicateVoteEvidence(d)), + }, + EvidenceVariant::LightClientAttackEvidence(l) => Evidence { + sum: Some(Sum::LightClientAttackEvidence(l)), + }, + } + } +} + +impl From for EvidenceVariant { + fn from(value: Evidence) -> Self { + let sum = value.sum.unwrap(); // Todo: Error handling + match sum { + Sum::DuplicateVoteEvidence(d) => Self::DuplicateVoteEvidence(d), + Sum::LightClientAttackEvidence(l) => Self::LightClientAttackEvidence(l), + } + } +} + +impl From for EvidenceVariant { + fn from(_: Sum) -> Self { + unimplemented!() // Prost adds extra annotations on top of Sum that are not used. + } +} + +impl From for Sum { + fn from(_: EvidenceVariant) -> Self { + unimplemented!() // Prost adds extra annotations on top of Sum that are not used. + } +} diff --git a/tendermint/src/serializers/from_str.rs b/proto/src/serializers/from_str.rs similarity index 100% rename from tendermint/src/serializers/from_str.rs rename to proto/src/serializers/from_str.rs diff --git a/proto/src/serializers/nullable.rs b/proto/src/serializers/nullable.rs new file mode 100644 index 000000000..86b4e3491 --- /dev/null +++ b/proto/src/serializers/nullable.rs @@ -0,0 +1,23 @@ +//! Serialize/deserialize Option type. +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +/// Deserialize Option +pub fn deserialize<'de, D, T>(deserializer: D) -> Result +where + D: Deserializer<'de>, + T: Deserialize<'de> + Default, +{ + Ok(Option::::deserialize(deserializer)?.unwrap_or_default()) +} + +/// Serialize Option +pub fn serialize(value: &T, serializer: S) -> Result +where + S: Serializer, + T: Default + PartialEq + Serialize, +{ + if value == &T::default() { + return serializer.serialize_none(); + } + value.serialize(serializer) +} diff --git a/proto/src/serializers/option_timestamp.rs b/proto/src/serializers/option_timestamp.rs new file mode 100644 index 000000000..8899e3a02 --- /dev/null +++ b/proto/src/serializers/option_timestamp.rs @@ -0,0 +1,115 @@ +//! Serialize/deserialize Option type from and into string: +use serde::{de::Error as _, Deserialize, Deserializer, Serialize, Serializer}; + +use crate::google::protobuf::Timestamp; +use chrono::{DateTime, Datelike, LocalResult, TimeZone, Timelike, Utc}; +use serde::ser::Error; + +/// Deserialize string into Timestamp +pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + let value_string = String::deserialize(deserializer)?; + let value_datetime = DateTime::parse_from_rfc3339(value_string.as_str()) + .map_err(|e| D::Error::custom(format!("{}", e)))?; + Ok(Some(Timestamp { + seconds: value_datetime.timestamp(), + nanos: value_datetime.timestamp_subsec_nanos() as i32, + })) +} + +/// Serialize from Timestamp into string +pub fn serialize(value: &Option, serializer: S) -> Result +where + S: Serializer, +{ + let value = value + .as_ref() + .ok_or_else(|| S::Error::custom("no time found"))?; + if value.nanos < 0 { + return Err(S::Error::custom("invalid nanoseconds in time")); + } + match Utc.timestamp_opt(value.seconds, value.nanos as u32) { + LocalResult::None => Err(S::Error::custom("invalid time")), + LocalResult::Single(t) => Ok(to_rfc3999(t)), + LocalResult::Ambiguous(_, _) => Err(S::Error::custom("ambiguous time")), + }? + .serialize(serializer) +} + +// Due to incompatibilities between the way that `chrono` serializes timestamps +// and the way that Go does for RFC3339, we unfortunately need to define our +// own timestamp serialization mechanism. +fn to_rfc3999(t: DateTime) -> String { + let nanos = format!(".{}", t.nanosecond()); + format!( + "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}{}Z", + t.year(), + t.month(), + t.day(), + t.hour(), + t.minute(), + t.second(), + nanos.trim_end_matches('0').trim_end_matches('.'), + ) +} + +#[cfg(test)] +mod test { + use crate::google::protobuf::Timestamp; + use serde::{Deserialize, Serialize}; + + // The Go code with which the following timestamps were tested is as + // follows: + // + // ```go + // package main + // + // import ( + // "fmt" + // "time" + // ) + // + // func main() { + // timestamps := []string{ + // "2020-09-14T16:33:54.21191421Z", + // "2020-09-14T16:33:00Z", + // "2020-09-14T16:33:00.1Z", + // "2020-09-14T16:33:00.211914212Z", + // } + // for _, timestamp := range timestamps { + // ts, err := time.Parse(time.RFC3339Nano, timestamp) + // if err != nil { + // panic(err) + // } + // tss := ts.Format(time.RFC3339Nano) + // if timestamp != tss { + // panic(fmt.Sprintf("\nExpected : %s\nActual : %s", timestamp, tss)) + // } + // } + // fmt.Println("All good!") + // } + // ``` + #[test] + fn json_timestamp_precision() { + #[derive(Serialize, Deserialize)] + struct TimestampWrapper { + #[serde(with = "crate::serializers::option_timestamp")] + timestamp: Option, + } + let test_timestamps = vec![ + "2020-09-14T16:33:54.21191421Z", + "2020-09-14T16:33:00Z", + "2020-09-14T16:33:00.1Z", + "2020-09-14T16:33:00.211914212Z", + "1970-01-01T00:00:00Z", + "0001-01-01T00:00:00Z", + ]; + for timestamp in test_timestamps { + let json = "{\"timestamp\":\"".to_owned() + timestamp + "\"}"; + let wrapper = serde_json::from_str::(&json).unwrap(); + assert_eq!(json, serde_json::to_string(&wrapper).unwrap()); + } + } +} diff --git a/proto/src/serializers/optional.rs b/proto/src/serializers/optional.rs new file mode 100644 index 000000000..e005b961d --- /dev/null +++ b/proto/src/serializers/optional.rs @@ -0,0 +1,20 @@ +//! Serialize/deserialize Option type where T has a serializer/deserializer. +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +/// Deserialize Option +pub fn deserialize<'de, D, T>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, + T: Deserialize<'de> + Default + PartialEq, +{ + Ok(Some(T::deserialize(deserializer)?).filter(|t| t != &T::default())) +} + +/// Serialize Option +pub fn serialize(value: &Option, serializer: S) -> Result +where + S: Serializer, + T: Clone + Default + Serialize, +{ + value.clone().unwrap_or_default().serialize(serializer) +} diff --git a/tendermint/src/serializers/time_duration.rs b/proto/src/serializers/time_duration.rs similarity index 100% rename from tendermint/src/serializers/time_duration.rs rename to proto/src/serializers/time_duration.rs diff --git a/proto/src/serializers/txs.rs b/proto/src/serializers/txs.rs new file mode 100644 index 000000000..05b2767f1 --- /dev/null +++ b/proto/src/serializers/txs.rs @@ -0,0 +1,38 @@ +//! Serialize/deserialize Vec> type from and into transactions (Base64String array). +use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use subtle_encoding::base64; + +/// Deserialize transactions into Vec> +pub fn deserialize<'de, D>(deserializer: D) -> Result>, D::Error> +where + D: Deserializer<'de>, +{ + let value_vec_base64string = Option::>::deserialize(deserializer)?; + if value_vec_base64string.is_none() { + return Ok(Vec::new()); + } + let value_vec_base64string = value_vec_base64string.unwrap(); + if value_vec_base64string.is_empty() { + return Ok(Vec::new()); + } + value_vec_base64string + .into_iter() + .map(|s| base64::decode(&s).map_err(serde::de::Error::custom)) + .collect() +} + +/// Serialize from Vec> into transactions +pub fn serialize(value: &[Vec], serializer: S) -> Result +where + S: Serializer, +{ + if value.is_empty() { + let whatevs: Option> = None; + return whatevs.serialize(serializer); + } + let value_base64string: Result, S::Error> = value + .iter() + .map(|v| String::from_utf8(base64::encode(v)).map_err(serde::ser::Error::custom)) + .collect(); + value_base64string?.serialize(serializer) +} diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index cc1239774..3598594b2 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -35,7 +35,8 @@ websocket-client = [ "tokio/macros", "tokio/stream", "tokio/sync", - "tokio/time" + "tokio/time", + "tracing" ] [dependencies] @@ -46,8 +47,10 @@ serde = { version = "1", features = [ "derive" ] } serde_bytes = "0.11" serde_json = "1" tendermint = { version = "0.17.0-rc1", path = "../tendermint" } +tendermint-proto = { path = "../proto" } thiserror = "1" uuid = { version = "0.8", default-features = false } +subtle-encoding = { version = "0.5", features = ["bech32-preview"] } async-trait = { version = "0.1", optional = true } async-tungstenite = { version="0.8", features = ["tokio-runtime"], optional = true } @@ -55,3 +58,4 @@ futures = { version = "0.3", optional = true } http = { version = "0.2", optional = true } hyper = { version = "0.13", optional = true } tokio = { version = "0.2", optional = true } +tracing = { version = "0.1", optional = true } diff --git a/rpc/src/client/transport/mock.rs b/rpc/src/client/transport/mock.rs index 3b41fc18b..775f7d2f4 100644 --- a/rpc/src/client/transport/mock.rs +++ b/rpc/src/client/transport/mock.rs @@ -20,6 +20,8 @@ use std::collections::HashMap; /// "result": { /// "response": { /// "data": "GaiaApp", +/// "version": "0.17.0", +/// "app_version": "1", /// "last_block_height": "488120", /// "last_block_app_hash": "2LnCw0fN+Zq/gs5SOuya/GRHUmtWftAqAkTUuoxl4g4=" /// } diff --git a/rpc/src/client/transport/websocket.rs b/rpc/src/client/transport/websocket.rs index e33e1867c..a485beca2 100644 --- a/rpc/src/client/transport/websocket.rs +++ b/rpc/src/client/transport/websocket.rs @@ -25,6 +25,7 @@ use std::str::FromStr; use tendermint::net; use tokio::net::TcpStream; use tokio::time::{Duration, Instant}; +use tracing::debug; // WebSocket connection times out if we haven't heard anything at all from the // server in this long. @@ -309,7 +310,9 @@ impl WebSocketClientDriver { Ok(ev) => { self.router.publish(ev).await; } - Err(_) => { + Err(e) => { + debug!("Received incoming JSON:\n{}", msg); + debug!("error {:?}", e); if let Ok(wrapper) = serde_json::from_str::>(&msg) { diff --git a/rpc/src/endpoint/abci_info.rs b/rpc/src/endpoint/abci_info.rs index 89cdb1c47..248398d36 100644 --- a/rpc/src/endpoint/abci_info.rs +++ b/rpc/src/endpoint/abci_info.rs @@ -2,8 +2,10 @@ use serde::{Deserialize, Serialize}; +use std::convert::{TryFrom, TryInto}; use tendermint::block; -use tendermint::serializers; +use tendermint::Error; +use tendermint_proto::abci::ResponseInfo; /// Request ABCI information from a node #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -28,7 +30,7 @@ impl crate::Response for Response {} /// ABCI information #[derive(Clone, Debug, Deserialize, Serialize, Default)] -#[serde(default)] +#[serde(default, try_from = "ResponseInfo", into = "ResponseInfo")] pub struct AbciInfo { /// Name of the application pub data: String, @@ -37,13 +39,37 @@ pub struct AbciInfo { pub version: String, /// App version - #[serde(with = "serializers::from_str")] pub app_version: u64, /// Last block height pub last_block_height: block::Height, /// Last app hash for the block - #[serde(skip_serializing_if = "Vec::is_empty", with = "serde_bytes")] pub last_block_app_hash: Vec, } + +impl TryFrom for AbciInfo { + type Error = Error; + + fn try_from(value: ResponseInfo) -> Result { + Ok(AbciInfo { + data: value.data, + version: value.version, + app_version: value.app_version, + last_block_height: value.last_block_height.try_into()?, + last_block_app_hash: value.last_block_app_hash, + }) + } +} + +impl From for ResponseInfo { + fn from(value: AbciInfo) -> Self { + ResponseInfo { + data: value.data, + version: value.version, + app_version: value.app_version, + last_block_height: value.last_block_height.into(), + last_block_app_hash: value.last_block_app_hash, + } + } +} diff --git a/rpc/src/endpoint/abci_query.rs b/rpc/src/endpoint/abci_query.rs index 5ad22f5d8..5712de146 100644 --- a/rpc/src/endpoint/abci_query.rs +++ b/rpc/src/endpoint/abci_query.rs @@ -85,6 +85,7 @@ pub struct AbciQuery { pub value: Vec, /// Proof (might be explicit null) + #[serde(alias = "proofOps")] pub proof: Option, /// Block height diff --git a/rpc/src/endpoint/net_info.rs b/rpc/src/endpoint/net_info.rs index 5be6b08cd..dad3b7d56 100644 --- a/rpc/src/endpoint/net_info.rs +++ b/rpc/src/endpoint/net_info.rs @@ -92,7 +92,7 @@ pub struct Monitor { pub active: bool, /// When the monitor started - #[serde(rename = "Start")] + #[serde(rename = "Start", with = "serializers::time")] pub start: Time, /// Duration of this monitor diff --git a/rpc/src/endpoint/status.rs b/rpc/src/endpoint/status.rs index 375d1ae8a..119ee6514 100644 --- a/rpc/src/endpoint/status.rs +++ b/rpc/src/endpoint/status.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; -use tendermint::{block, node, serializers, validator, Hash, Time}; +use tendermint::{block, node, validator, AppHash, Hash, Time}; /// Node status request #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -35,17 +35,18 @@ impl crate::Response for Response {} #[derive(Clone, Debug, Deserialize, Serialize)] pub struct SyncInfo { /// Latest block hash - #[serde(deserialize_with = "serializers::parse_non_empty_hash")] - pub latest_block_hash: Option, + #[serde(with = "tendermint::serializers::hash")] + pub latest_block_hash: Hash, /// Latest app hash - #[serde(deserialize_with = "serializers::parse_non_empty_hash")] - pub latest_app_hash: Option, + #[serde(with = "tendermint::serializers::apphash")] + pub latest_app_hash: AppHash, /// Latest block height pub latest_block_height: block::Height, /// Latest block time + #[serde(with = "tendermint::serializers::time")] pub latest_block_time: Time, /// Are we catching up? diff --git a/rpc/src/lib.rs b/rpc/src/lib.rs index 7750b30f9..842b7b05d 100644 --- a/rpc/src/lib.rs +++ b/rpc/src/lib.rs @@ -10,8 +10,13 @@ //! //! | Feature | Description | //! | ------- | ----------- | -//! | `http-client` | Provides [`HttpClient`], which is a basic RPC client that interacts with remote Tendermint nodes via **JSON-RPC over HTTP**. This client does not provide [`Event`] subscription functionality. See the [Tendermint RPC] for more details. | -//! | `websocket-client` | Provides [`WebSocketClient`], which currently only provides [`Event`] subscription functionality over a WebSocket connection. See the [`/subscribe` endpoint] in the Tendermint RPC for more details. This client does not yet provide access to the RPC methods provided by the [`Client`] trait (this is planned for a future release). | +//! | `http-client` | Provides [`HttpClient`], which is a basic RPC client that interacts with +//! remote Tendermint nodes via **JSON-RPC over HTTP**. This client does not provide [`Event`] +//! subscription functionality. See the [Tendermint RPC] for more details. | | `websocket-client` | +//! Provides [`WebSocketClient`], which currently only provides [`Event`] subscription functionality +//! over a WebSocket connection. See the [`/subscribe` endpoint] in the Tendermint RPC for more +//! details. This client does not yet provide access to the RPC methods provided by the [`Client`] +//! trait (this is planned for a future release). | //! //! ### Mock Clients //! diff --git a/rpc/tests/parse_response.rs b/rpc/tests/parse_response.rs index 3b06e7111..6a4780c97 100644 --- a/rpc/tests/parse_response.rs +++ b/rpc/tests/parse_response.rs @@ -29,25 +29,32 @@ fn abci_query() { .response; assert_eq!(response.height.value(), 1); + assert!(response.proof.is_some()); + let proof = response.proof.unwrap(); + assert_eq!(proof.ops.len(), 2); + assert_eq!(proof.ops[0].field_type, "iavl:v"); + assert_eq!(proof.ops[1].field_type, "multistore"); } #[test] fn block() { let response = endpoint::block::Response::from_string(&read_json_fixture("block")).unwrap(); - let tendermint::Block { - header, - data, - evidence, - last_commit, - } = response.block; - - assert_eq!(header.version.block, 10); - assert_eq!(header.chain_id.as_str(), EXAMPLE_CHAIN); - assert_eq!(header.height.value(), 10); - assert_eq!(data.iter().len(), 0); - assert_eq!(evidence.iter().len(), 0); - assert_eq!(last_commit.unwrap().signatures.len(), 1); + assert_eq!(response.block.header.version.block, 10); + assert_eq!(response.block.header.chain_id.as_str(), EXAMPLE_CHAIN); + assert_eq!(response.block.header.height.value(), 10); + assert_eq!(response.block.data.iter().len(), 0); + assert_eq!(response.block.evidence.iter().len(), 0); + assert_eq!( + response + .block + .last_commit + .as_ref() + .unwrap() + .signatures + .len(), + 1 + ); } #[test] @@ -55,8 +62,7 @@ fn block_with_evidences() { let response = endpoint::block::Response::from_string(&read_json_fixture("block_with_evidences")).unwrap(); - let tendermint::Block { evidence, .. } = response.block; - let evidence = evidence.iter().next().unwrap(); + let evidence = response.block.evidence.iter().next().unwrap(); match evidence { tendermint::evidence::Evidence::DuplicateVote(_) => (), @@ -86,21 +92,14 @@ fn first_block() { let response = endpoint::block::Response::from_string(&read_json_fixture("first_block")).unwrap(); - let tendermint::Block { - header, - data, - evidence, - last_commit, - } = response.block; - - assert_eq!(header.version.block, 10); - assert_eq!(header.chain_id.as_str(), EXAMPLE_CHAIN); - assert_eq!(header.height.value(), 1); - assert!(header.last_block_id.is_none()); - - assert_eq!(data.iter().len(), 0); - assert_eq!(evidence.iter().len(), 0); - assert!(last_commit.is_none()); + assert_eq!(response.block.header.version.block, 10); + assert_eq!(response.block.header.chain_id.as_str(), EXAMPLE_CHAIN); + assert_eq!(response.block.header.height.value(), 1); + assert!(response.block.header.last_block_id.is_none()); + + assert_eq!(response.block.data.iter().len(), 0); + assert_eq!(response.block.evidence.iter().len(), 0); + assert!(response.block.last_commit.is_none()); } #[test] fn block_results() { @@ -214,7 +213,7 @@ fn commit() { // header etc: let commit = response.signed_header.commit; let block_id = commit.block_id; - let _signatures = commit.signatures; + let _signatures = &commit.signatures; assert_eq!(header.hash(), block_id.hash); } diff --git a/rpc/tests/support/abci_info.json b/rpc/tests/support/abci_info.json index 39cb11305..5b4ea0d74 100644 --- a/rpc/tests/support/abci_info.json +++ b/rpc/tests/support/abci_info.json @@ -1,11 +1,13 @@ { "jsonrpc": "2.0", - "id": "", + "id": -1, "result": { "response": { "data": "GaiaApp", + "version": "0.17.0", + "app_version": "1", "last_block_height": "488120", - "last_block_app_hash": "2LnCw0fN+Zq/gs5SOuya/GRHUmtWftAqAkTUuoxl4g4=" + "last_block_app_hash": "UAAAAAAAAAA=" } } -} +} \ No newline at end of file diff --git a/rpc/tests/support/abci_query.json b/rpc/tests/support/abci_query.json index 658e08218..933608a6c 100644 --- a/rpc/tests/support/abci_query.json +++ b/rpc/tests/support/abci_query.json @@ -5,7 +5,7 @@ "response": { "log": "exists", "height": "1", - "proof": { + "proofOps": { "ops": [ { "type": "iavl:v", diff --git a/rpc/tests/support/block.json b/rpc/tests/support/block.json index bbc83ca42..2a8bd2e7a 100644 --- a/rpc/tests/support/block.json +++ b/rpc/tests/support/block.json @@ -31,7 +31,7 @@ "next_validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "app_hash": "0000000000000000", - "last_results_hash": "", + "last_results_hash": "A48091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "evidence_hash": "", "proposer_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3" }, diff --git a/rpc/tests/support/blockchain.json b/rpc/tests/support/blockchain.json index 08823a3ea..e78c47e88 100644 --- a/rpc/tests/support/blockchain.json +++ b/rpc/tests/support/blockchain.json @@ -12,6 +12,7 @@ "hash": "5E97E2B494BF58C02BE385AE80F08A7DDBFAE922ED0363C892D17DB549DAF4AA" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -38,7 +39,8 @@ "last_results_hash": "", "evidence_hash": "", "proposer_address": "E800740C68C81B30345C3AE2BA638FA56FF67EEF" - } + }, + "num_txs": "0" }, { "block_id": { @@ -48,6 +50,7 @@ "hash": "99043B16957F2BFF5C1A24B290AD44CBCD95B0DC164E18063FA566240B7B3AFC" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -74,7 +77,8 @@ "last_results_hash": "", "evidence_hash": "", "proposer_address": "C2356622B495725961B5B201A382DD57CD3305EC" - } + }, + "num_txs": "0" }, { "block_id": { @@ -84,6 +88,7 @@ "hash": "C5FAA5B7738D7010CA712FBC2B2355605D388990DE0FDE731A854FE279325C1A" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -110,7 +115,8 @@ "last_results_hash": "6E340B9CFFB37A989CA544E6BB780A2C78901D3FB33738768511A30617AFA01D", "evidence_hash": "", "proposer_address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855" - } + }, + "num_txs": "0" }, { "block_id": { @@ -120,6 +126,7 @@ "hash": "842ADFA93717FDBE551BDAB96BED2E50D67FCA216421C97DE1A47BC61FF50E58" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -146,7 +153,8 @@ "last_results_hash": "", "evidence_hash": "", "proposer_address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855" - } + }, + "num_txs": "0" }, { "block_id": { @@ -156,6 +164,7 @@ "hash": "3E5A9C4ACC1C217DAEBD68E29B99B013603D2902BF974F9695FCA08E1E4E8867" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -182,7 +191,8 @@ "last_results_hash": "", "evidence_hash": "", "proposer_address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855" - } + }, + "num_txs": "0" }, { "block_id": { @@ -192,6 +202,7 @@ "hash": "21ED492846DFF04D65E445A56C38AAAE6151F0099B09C9FC9498EF154C46A8AD" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -218,7 +229,8 @@ "last_results_hash": "", "evidence_hash": "", "proposer_address": "2B19594437F1920B5AF6461FAB81AEC99790FEB1" - } + }, + "num_txs": "0" }, { "block_id": { @@ -228,6 +240,7 @@ "hash": "2B51E708767543A566AA1FDBC279E06FB59C3F7658D2389DCAF389A95242E623" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -254,7 +267,8 @@ "last_results_hash": "", "evidence_hash": "", "proposer_address": "2199EAE894CA391FA82F01C2C614BFEB103D056C" - } + }, + "num_txs": "0" }, { "block_id": { @@ -264,6 +278,7 @@ "hash": "529D1FFB543793F8B999AC4E801C8A14CA2DC6E873DC7759945C4B960CAC77DC" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -290,7 +305,8 @@ "last_results_hash": "", "evidence_hash": "", "proposer_address": "064CF05857B556FED63AC32821FF904312D0F2C8" - } + }, + "num_txs": "0" }, { "block_id": { @@ -300,6 +316,7 @@ "hash": "3D4BB2D494CF343011AF2ADE01D6CC88BE6FE26CE5756840931507554BF64F0B" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -326,7 +343,8 @@ "last_results_hash": "", "evidence_hash": "", "proposer_address": "02A248C86C78ED6A824D510A8B7AA4C1D290D2DC" - } + }, + "num_txs": "0" }, { "block_id": { @@ -336,6 +354,7 @@ "hash": "E110DA5AEC7F6D8285F2F8A5CE732D8995E6B35C7B685BA819D3CBD903CB2330" } }, + "block_size": "573", "header": { "version": { "block": "10", @@ -362,7 +381,8 @@ "last_results_hash": "", "evidence_hash": "", "proposer_address": "064CF05857B556FED63AC32821FF904312D0F2C8" - } + }, + "num_txs": "0" } ] } diff --git a/rpc/tests/support/genesis.json b/rpc/tests/support/genesis.json index 01c6d1c32..cea9ac3f4 100644 --- a/rpc/tests/support/genesis.json +++ b/rpc/tests/support/genesis.json @@ -13,13 +13,15 @@ }, "evidence": { "max_age_num_blocks": "100000", - "max_age_duration": "172800000000000" + "max_age_duration": "172800000000000", + "max_num": 0 }, "validator": { "pub_key_types": [ "ed25519" ] - } + }, + "version": "1" }, "validators": [ { diff --git a/tendermint/Cargo.toml b/tendermint/Cargo.toml index 60844ac66..67ab7404e 100644 --- a/tendermint/Cargo.toml +++ b/tendermint/Cargo.toml @@ -40,7 +40,7 @@ chrono = { version = "0.4", features = ["serde"] } ed25519 = "1" ed25519-dalek = { version = "1", features = ["serde"] } futures = "0.3" -k256 = { version = "0.5", optional = true, features = ["ecdsa"] } +num-traits = "0.2" once_cell = "1.3" prost = "0.6" prost-types = "0.6" @@ -56,6 +56,8 @@ thiserror = "1" tendermint-proto = { version = "0.17.0-rc1", path = "../proto" } toml = { version = "0.5" } zeroize = { version = "1.1", features = ["zeroize_derive"] } + +k256 = { version = "0.5", optional = true, features = ["ecdsa"] } ripemd160 = { version = "0.9", optional = true } [dev-dependencies] diff --git a/tendermint/src/abci/responses.rs b/tendermint/src/abci/responses.rs index 24fc79d1a..4fe7f23f1 100644 --- a/tendermint/src/abci/responses.rs +++ b/tendermint/src/abci/responses.rs @@ -50,7 +50,7 @@ pub struct DeliverTx { pub code: Code, /// ABCI application data - #[serde(deserialize_with = "serializers::null_as_default")] + #[serde(with = "serializers::nullable")] pub data: Data, /// ABCI log data (nondeterministic) diff --git a/tendermint/src/abci/transaction.rs b/tendermint/src/abci/transaction.rs index b5d50d89b..e5cd8c1cf 100644 --- a/tendermint/src/abci/transaction.rs +++ b/tendermint/src/abci/transaction.rs @@ -6,26 +6,26 @@ pub use self::hash::Hash; use serde::{de::Error as _, Deserialize, Deserializer, Serialize, Serializer}; use std::{fmt, slice}; use subtle_encoding::base64; +use tendermint_proto::types::Data as RawData; /// Transactions are arbitrary byte arrays whose contents are validated by the /// underlying Tendermint application. -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq)] // Custom serde serialization used by RPC /broadcast_tx_async endpoint pub struct Transaction(Vec); -impl Transaction { - /// Create a new raw transaction from a byte vector - pub fn new(into_vec: V) -> Transaction - where - V: Into>, - { - Transaction(into_vec.into()) +impl From> for Transaction { + fn from(value: Vec) -> Self { + Transaction(value) } +} - /// Convert this transaction into a byte vector - pub fn into_vec(self) -> Vec { - self.0 +impl From for Vec { + fn from(value: Transaction) -> Self { + value.0 } +} +impl Transaction { /// Borrow the contents of this transaction as a byte slice pub fn as_bytes(&self) -> &[u8] { self.0.as_slice() @@ -53,7 +53,7 @@ impl<'de> Deserialize<'de> for Transaction { let bytes = base64::decode(String::deserialize(deserializer)?.as_bytes()) .map_err(|e| D::Error::custom(format!("{}", e)))?; - Ok(Self::new(bytes)) + Ok(Self::from(bytes)) } } @@ -69,27 +69,50 @@ impl Serialize for Transaction { /// transactions are arbitrary byte arrays. /// /// -#[derive(Deserialize, Serialize, Clone, Debug, Default, PartialEq)] +#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)] +#[serde(try_from = "RawData", into = "RawData")] pub struct Data { txs: Option>, } -impl Data { - /// Create a new transaction data collection - pub fn new(into_transactions: I) -> Data - where - I: Into>, - { +impl From for Data { + fn from(value: RawData) -> Self { + if value.txs.is_empty() { + return Data::default(); + } Data { - txs: Some(into_transactions.into()), + txs: Some( + value + .txs + .iter() + .map(|tx| Transaction::from(tx.clone())) + .collect(), + ), } } +} - /// Convert this collection into a vector - pub fn into_vec(self) -> Vec { - self.txs.unwrap_or_default() +impl From for RawData { + fn from(value: Data) -> Self { + if value.txs.is_none() { + return RawData { + txs: vec![], + hash: vec![], + }; + } + RawData { + txs: value + .txs + .unwrap_or_default() + .iter() + .map(|tx| tx.clone().into()) + .collect(), + hash: vec![], + } } +} +impl Data { /// Iterate over the transactions in the collection pub fn iter(&self) -> slice::Iter<'_, Transaction> { self.as_ref().iter() @@ -108,7 +131,7 @@ mod tests { #[test] fn upper_hex_serialization() { - let tx = Transaction::new(vec![0xFF, 0x01, 0xFE, 0x02]); + let tx = Transaction::from(vec![0xFF, 0x01, 0xFE, 0x02]); let tx_hex = format!("{:X}", &tx); assert_eq!(&tx_hex, "FF01FE02"); } diff --git a/tendermint/src/abci/transaction/hash.rs b/tendermint/src/abci/transaction/hash.rs index fa414512c..e1232b05a 100644 --- a/tendermint/src/abci/transaction/hash.rs +++ b/tendermint/src/abci/transaction/hash.rs @@ -64,10 +64,10 @@ impl FromStr for Hash { // Accept either upper or lower case hex let bytes = hex::decode_upper(s) .or_else(|_| hex::decode(s)) - .map_err(|_| Kind::Parse)?; + .map_err(|_| Kind::Parse.context("hash decode"))?; if bytes.len() != LENGTH { - return Err(Kind::Parse.into()); + return Err(Kind::Parse.context("hash length").into()); } let mut result_bytes = [0u8; LENGTH]; diff --git a/tendermint/src/account.rs b/tendermint/src/account.rs index 99fd707c5..36694df51 100644 --- a/tendermint/src/account.rs +++ b/tendermint/src/account.rs @@ -27,7 +27,7 @@ pub const LENGTH: usize = 20; /// Account IDs #[derive(Copy, Clone, Eq, Hash, PartialEq, PartialOrd, Ord)] -pub struct Id([u8; LENGTH]); +pub struct Id([u8; LENGTH]); // JSON custom serialization for priv_validator_key.json impl DomainType> for Id {} @@ -118,18 +118,13 @@ impl FromStr for Id { // Accept either upper or lower case hex let bytes = hex::decode_upper(s) .or_else(|_| hex::decode(s)) - .map_err(|_| Kind::Parse)?; + .map_err(|_| Kind::Parse.context("account id decode"))?; - if bytes.len() != LENGTH { - return Err(Kind::Parse.into()); - } - - let mut result_bytes = [0u8; LENGTH]; - result_bytes.copy_from_slice(&bytes); - Ok(Id(result_bytes)) + Ok(bytes.try_into()?) } } +// Todo: Can I remove custom serialization? impl<'de> Deserialize<'de> for Id { fn deserialize(deserializer: D) -> Result where @@ -148,7 +143,10 @@ impl<'de> Deserialize<'de> for Id { impl Serialize for Id { fn serialize(&self, serializer: S) -> Result { - self.to_string().serialize(serializer) + serializer.serialize_str( + &String::from_utf8(hex::encode_upper(Vec::::from(*self))) + .map_err(serde::ser::Error::custom)?, + ) } } diff --git a/tendermint/src/block.rs b/tendermint/src/block.rs index 96aa8847e..5e68b0bf4 100644 --- a/tendermint/src/block.rs +++ b/tendermint/src/block.rs @@ -21,14 +21,19 @@ pub use self::{ round::*, size::Size, }; -use crate::{abci::transaction, evidence, serializers}; -use serde::{Deserialize, Deserializer, Serialize}; +use crate::{abci::transaction, evidence, Error, Kind}; +use serde::{Deserialize, Serialize}; +use std::convert::{TryFrom, TryInto}; +use tendermint_proto::types::Block as RawBlock; +use tendermint_proto::DomainType; /// Blocks consist of a header, transactions, votes (the commit), and a list of /// evidence of malfeasance (i.e. signing conflicting votes). /// /// +// Default serialization - all fields serialize; used by /block endpoint #[derive(Deserialize, Serialize, Clone, Debug, PartialEq)] +#[non_exhaustive] pub struct Block { /// Block header pub header: Header, @@ -40,35 +45,96 @@ pub struct Block { pub evidence: evidence::Data, /// Last commit - #[serde(deserialize_with = "parse_non_empty_commit")] + #[serde(with = "crate::serializers::optional")] pub last_commit: Option, } -pub(crate) fn parse_non_empty_commit<'de, D>(deserializer: D) -> Result, D::Error> -where - D: Deserializer<'de>, -{ - #[derive(Deserialize)] - struct TmpCommit { - pub height: Height, - pub round: u32, - #[serde(deserialize_with = "serializers::parse_non_empty_block_id")] - pub block_id: Option, - pub signatures: Option, +impl DomainType for Block {} + +impl TryFrom for Block { + type Error = Error; + + fn try_from(value: RawBlock) -> Result { + let header: Header = value.header.ok_or(Kind::MissingHeader)?.try_into()?; + // if last_commit is Commit::Default, it is considered nil by Go. + let last_commit = value + .last_commit + .map(TryInto::try_into) + .transpose()? + .filter(|c| c != &Commit::default()); + if last_commit.is_none() && header.height.value() != 1 { + return Err(Kind::InvalidBlock + .context("last_commit is empty on non-first block") + .into()); + } + // Todo: Figure out requirements. + //if last_commit.is_some() && header.height.value() == 1 { + // return Err(Kind::InvalidFirstBlock.context("last_commit is not null on first + // height").into()); + //} + Ok(Block { + header, + data: value.data.ok_or(Kind::MissingData)?.try_into()?, + evidence: value.evidence.ok_or(Kind::MissingEvidence)?.try_into()?, + last_commit, + }) } +} - if let Some(commit) = >::deserialize(deserializer)? { - if let Some(block_id) = commit.block_id { - Ok(Some(Commit { - height: commit.height, - round: commit.round, - block_id, - signatures: commit.signatures.unwrap_or_else(|| CommitSigs::new(vec![])), - })) - } else { - Ok(None) +impl From for RawBlock { + fn from(value: Block) -> Self { + RawBlock { + header: Some(value.header.into()), + data: Some(value.data.into()), + evidence: Some(value.evidence.into()), + last_commit: value.last_commit.map(Into::into), + } + } +} + +impl Block { + /// constructor + pub fn new( + header: Header, + data: transaction::Data, + evidence: evidence::Data, + last_commit: Option, + ) -> Result { + if last_commit.is_none() && header.height.value() != 1 { + return Err(Kind::InvalidBlock + .context("last_commit is empty on non-first block") + .into()); + } + if last_commit.is_some() && header.height.value() == 1 { + return Err(Kind::InvalidBlock + .context("last_commit is filled on first block") + .into()); } - } else { - Ok(None) + Ok(Block { + header, + data, + evidence, + last_commit, + }) + } + + /// Get header + pub fn header(&self) -> &Header { + &self.header + } + + /// Get data + pub fn data(&self) -> &transaction::Data { + &self.data + } + + /// Get evidence + pub fn evidence(&self) -> &evidence::Data { + &self.evidence + } + + /// Get last commit + pub fn last_commit(&self) -> &Option { + &self.last_commit } } diff --git a/tendermint/src/block/commit.rs b/tendermint/src/block/commit.rs index 3ba08a09d..acb3a51b1 100644 --- a/tendermint/src/block/commit.rs +++ b/tendermint/src/block/commit.rs @@ -1,71 +1,72 @@ //! Commits to a Tendermint blockchain use crate::block::commit_sig::CommitSig; -use crate::block::{Height, Id}; +use crate::block::{Height, Id, Round}; +use crate::{Error, Kind}; use serde::{Deserialize, Serialize}; -use std::{ops::Deref, slice}; +use std::convert::{TryFrom, TryInto}; +use tendermint_proto::types::Commit as RawCommit; /// Commit contains the justification (ie. a set of signatures) that a block was committed by a set /// of validators. /// TODO: Update links below! /// /// -#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)] +#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] +#[serde(try_from = "RawCommit", into = "RawCommit")] // Used by testgen Generator trait pub struct Commit { /// Block height pub height: Height, /// Round - pub round: u32, + pub round: Round, /// Block ID pub block_id: Id, /// Signatures - pub signatures: CommitSigs, + pub signatures: Vec, } -/// CommitSigs which certify that a block is valid -#[derive(Serialize, Deserialize, Clone, Debug, Default)] -pub struct CommitSigs(Vec); +impl TryFrom for Commit { + type Error = Error; -impl CommitSigs { - /// Create a new CommitSig collection - pub fn new(into_commit_sigs: I) -> Self - where - I: Into>, - { - Self(into_commit_sigs.into()) - } - - /// Convert this collection of CommitSigs into a vector - pub fn into_vec(self) -> Vec { - self.0 - } - - /// Iterate over the CommitSigs in the collection - pub fn iter(&self) -> slice::Iter<'_, CommitSig> { - self.0.iter() + fn try_from(value: RawCommit) -> Result { + let signatures: Result, Error> = value + .signatures + .into_iter() + .map(TryFrom::try_from) + .collect(); + Ok(Self { + height: value.height.try_into()?, + round: value.round.try_into()?, + block_id: value.block_id.ok_or(Kind::InvalidBlock)?.try_into()?, /* gogoproto.nullable = false */ + signatures: signatures?, + }) } } -impl AsRef<[CommitSig]> for CommitSigs { - fn as_ref(&self) -> &[CommitSig] { - self.0.as_slice() - } -} - -impl Deref for CommitSigs { - type Target = [CommitSig]; - - fn deref(&self) -> &[CommitSig] { - self.as_ref() +impl From for RawCommit { + fn from(value: Commit) -> Self { + RawCommit { + height: value.height.into(), + round: value.round.into(), + block_id: Some(value.block_id.into()), + signatures: value.signatures.into_iter().map(Into::into).collect(), + hash: vec![], + bit_array: None, + } } } -impl PartialEq for CommitSigs { - fn eq(&self, other: &Self) -> bool { - // Note: this is used for asserts in tests: - self.0.clone().into_iter().eq(other.0.clone().into_iter()) +impl Default for Commit { + fn default() -> Self { + Commit { + // The default Height is 1, but the default commit is an empty commit with height = 0. + height: Height::from(0_u32), + round: Default::default(), + block_id: Default::default(), + signatures: vec![], + } } } diff --git a/tendermint/src/block/commit_sig.rs b/tendermint/src/block/commit_sig.rs index d7a04fb22..7475d2f6a 100644 --- a/tendermint/src/block/commit_sig.rs +++ b/tendermint/src/block/commit_sig.rs @@ -1,17 +1,16 @@ //! CommitSig within Commit -use crate::serializers::BlockIDFlag; -use crate::serializers::RawCommitSig; use crate::{account, Signature, Time}; -use serde::{Deserialize, Serialize}; -use std::convert::TryFrom; +use crate::{Error, Kind}; +use num_traits::ToPrimitive; +use std::convert::{TryFrom, TryInto}; +use tendermint_proto::types::BlockIdFlag; +use tendermint_proto::types::CommitSig as RawCommitSig; /// CommitSig represents a signature of a validator. /// It's a part of the Commit and can be used to reconstruct the vote set given the validator set. -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] -#[serde(try_from = "RawCommitSig", into = "RawCommitSig")] +#[derive(Clone, Debug, PartialEq)] pub enum CommitSig { - // TODO: https://github.com/informalsystems/tendermint-rs/issues/260 - CommitSig validator address missing in Absent vote /// no vote was received from a validator. BlockIDFlagAbsent, /// voted for the Commit.BlockID. @@ -67,53 +66,55 @@ impl CommitSig { // Todo: https://github.com/informalsystems/tendermint-rs/issues/259 - CommitSig Timestamp can be zero time // Todo: https://github.com/informalsystems/tendermint-rs/issues/260 - CommitSig validator address missing in Absent vote impl TryFrom for CommitSig { - type Error = &'static str; + type Error = Error; fn try_from(value: RawCommitSig) -> Result { - match value.block_id_flag { - BlockIDFlag::Absent => { - if value.timestamp.is_some() - && value.timestamp.unwrap() - != Time::parse_from_rfc3339("0001-01-01T00:00:00Z").unwrap() - { - return Err("timestamp is present for BlockIDFlagAbsent CommitSig"); + if value.block_id_flag == BlockIdFlag::Absent.to_i32().unwrap() { + if value.timestamp.is_some() { + let timestamp = value.timestamp.unwrap(); + // 0001-01-01T00:00:00.000Z translates to EPOCH-62135596800 seconds + if timestamp.nanos != 0 || timestamp.seconds != -62135596800 { + return Err(Kind::InvalidTimestamp + .context("absent commitsig has non-zero timestamp") + .into()); } - if value.signature.is_some() { - return Err("signature is present for BlockIDFlagAbsent CommitSig"); - } - Ok(CommitSig::BlockIDFlagAbsent) } - BlockIDFlag::Commit => { - if value.timestamp.is_none() { - Err("timestamp is missing for BlockIDFlagCommit CommitSig") - } else if value.signature.is_none() { - Err("signature is missing for BlockIDFlagCommit CommitSig") - } else if value.validator_address.is_none() { - Err("validator_address is missing for BlockIDFlagCommit CommitSig") - } else { - Ok(CommitSig::BlockIDFlagCommit { - validator_address: value.validator_address.unwrap(), - timestamp: value.timestamp.unwrap(), - signature: value.signature.unwrap(), - }) - } + if !value.signature.is_empty() { + return Err(Kind::InvalidSignature.into()); } - BlockIDFlag::Nil => { - if value.timestamp.is_none() { - Err("timestamp is missing for BlockIDFlagNil CommitSig") - } else if value.signature.is_none() { - Err("signature is missing for BlockIDFlagNil CommitSig") - } else if value.validator_address.is_none() { - Err("validator_address is missing for BlockIDFlagNil CommitSig") - } else { - Ok(CommitSig::BlockIDFlagNil { - validator_address: value.validator_address.unwrap(), - timestamp: value.timestamp.unwrap(), - signature: value.signature.unwrap(), - }) - } + return Ok(CommitSig::BlockIDFlagAbsent); + } + if value.block_id_flag == BlockIdFlag::Commit.to_i32().unwrap() { + if value.signature.is_empty() { + return Err(Kind::InvalidSignature + .context("regular commitsig has no signature") + .into()); + } + if value.validator_address.is_empty() { + return Err(Kind::InvalidValidatorAddress.into()); + } + return Ok(CommitSig::BlockIDFlagCommit { + validator_address: value.validator_address.try_into()?, + timestamp: value.timestamp.ok_or(Kind::NoTimestamp)?.try_into()?, + signature: value.signature.try_into()?, + }); + } + if value.block_id_flag == BlockIdFlag::Nil.to_i32().unwrap() { + if value.signature.is_empty() { + return Err(Kind::InvalidSignature + .context("nil commitsig has no signature") + .into()); + } + if value.validator_address.is_empty() { + return Err(Kind::InvalidValidatorAddress.into()); } + return Ok(CommitSig::BlockIDFlagNil { + validator_address: value.validator_address.try_into()?, + timestamp: value.timestamp.ok_or(Kind::NoTimestamp)?.try_into()?, + signature: value.signature.try_into()?, + }); } + Err(Kind::BlockIdFlag.into()) } } @@ -121,30 +122,30 @@ impl From for RawCommitSig { fn from(commit: CommitSig) -> RawCommitSig { match commit { CommitSig::BlockIDFlagAbsent => RawCommitSig { - block_id_flag: BlockIDFlag::Absent, - validator_address: None, + block_id_flag: BlockIdFlag::Absent.to_i32().unwrap(), + validator_address: Vec::new(), timestamp: None, - signature: None, + signature: Vec::new(), }, CommitSig::BlockIDFlagNil { validator_address, timestamp, signature, } => RawCommitSig { - block_id_flag: BlockIDFlag::Nil, - validator_address: Some(validator_address), - timestamp: Some(timestamp), - signature: Some(signature), + block_id_flag: BlockIdFlag::Nil.to_i32().unwrap(), + validator_address: validator_address.into(), + timestamp: Some(timestamp.into()), + signature: signature.into(), }, CommitSig::BlockIDFlagCommit { validator_address, timestamp, signature, } => RawCommitSig { - block_id_flag: BlockIDFlag::Commit, - validator_address: Some(validator_address), - timestamp: Some(timestamp), - signature: Some(signature), + block_id_flag: BlockIdFlag::Commit.to_i32().unwrap(), + validator_address: validator_address.into(), + timestamp: Some(timestamp.into()), + signature: signature.into(), }, } } diff --git a/tendermint/src/block/header.rs b/tendermint/src/block/header.rs index 7b9431cbf..9bc4449bd 100644 --- a/tendermint/src/block/header.rs +++ b/tendermint/src/block/header.rs @@ -1,10 +1,10 @@ //! Block headers use crate::merkle::simple_hash_from_byte_vectors; -use crate::serializers; -use crate::{account, block, chain, AppHash, Hash, Time}; +use crate::{account, block, chain, AppHash, Error, Hash, Kind, Time}; use serde::{Deserialize, Serialize}; -use std::convert::TryFrom; +use std::convert::{TryFrom, TryInto}; +use tendermint_proto::types::Header as RawHeader; use tendermint_proto::version::Consensus as RawConsensusVersion; use tendermint_proto::DomainType; @@ -14,6 +14,7 @@ use tendermint_proto::DomainType; /// /// #[derive(Serialize, Deserialize, Clone, PartialEq, Debug)] +#[serde(try_from = "RawHeader", into = "RawHeader")] pub struct Header { /// Header version pub version: Version, @@ -28,15 +29,12 @@ pub struct Header { pub time: Time, /// Previous block info - #[serde(deserialize_with = "serializers::parse_non_empty_block_id")] pub last_block_id: Option, /// Commit from validators from the last block - #[serde(deserialize_with = "serializers::parse_non_empty_hash")] pub last_commit_hash: Option, /// Merkle root of transaction hashes - #[serde(deserialize_with = "serializers::parse_non_empty_hash")] pub data_hash: Option, /// Validators for the current block @@ -52,17 +50,114 @@ pub struct Header { pub app_hash: AppHash, /// Root hash of all results from the txs from the previous block - #[serde(deserialize_with = "serializers::parse_non_empty_hash")] pub last_results_hash: Option, /// Hash of evidence included in the block - #[serde(deserialize_with = "serializers::parse_non_empty_hash")] pub evidence_hash: Option, /// Original proposer of the block pub proposer_address: account::Id, } +impl DomainType for Header {} + +impl TryFrom for Header { + type Error = Error; + + fn try_from(value: RawHeader) -> Result { + // If last block id is unfilled, it is considered nil by Go. + let last_block_id = value + .last_block_id + .map(TryInto::try_into) + .transpose()? + .filter(|l| l != &block::Id::default()); + let last_commit_hash = if value.last_commit_hash.is_empty() { + None + } else { + Some(value.last_commit_hash.try_into()?) + }; + let last_results_hash = if value.last_results_hash.is_empty() { + None + } else { + Some(value.last_results_hash.try_into()?) + }; + let height: block::Height = value.height.try_into()?; + + // Todo: fix domain logic + //if last_block_id.is_none() && height.value() != 1 { + // return Err(Kind::InvalidHeader.context("last_block_id is null on non-first + // height").into()); + //} + if last_block_id.is_some() && height.value() == 1 { + return Err(Kind::InvalidFirstHeader + .context("last_block_id is not null on first height") + .into()); + } + //if last_commit_hash.is_none() && height.value() != 1 { + // return Err(Kind::InvalidHeader.context("last_commit_hash is null on non-first + // height").into()); + //} + //if height.value() == 1 && last_commit_hash.is_some() && + // last_commit_hash.as_ref().unwrap() != simple_hash_from_byte_vectors(Vec::new()) { + // return Err(Kind::InvalidFirstHeader.context("last_commit_hash is not empty Merkle tree + // on first height").into()); + //} + //if last_results_hash.is_none() && height.value() != 1 { + // return Err(Kind::InvalidHeader.context("last_results_hash is null on non-first + // height").into()); + //} + //if last_results_hash.is_some() && height.value() == 1 { + // return Err(Kind::InvalidFirstHeader.context("last_results_hash is not ull on first + // height").into()); + //} + Ok(Header { + version: value.version.ok_or(Kind::MissingVersion)?.try_into()?, + chain_id: value.chain_id.try_into()?, + height, + time: value.time.ok_or(Kind::NoTimestamp)?.try_into()?, + last_block_id, + last_commit_hash, + data_hash: if value.data_hash.is_empty() { + None + } else { + Some(value.data_hash.try_into()?) + }, + validators_hash: value.validators_hash.try_into()?, + next_validators_hash: value.next_validators_hash.try_into()?, + consensus_hash: value.consensus_hash.try_into()?, + app_hash: value.app_hash.try_into()?, + last_results_hash, + evidence_hash: if value.evidence_hash.is_empty() { + None + } else { + Some(value.evidence_hash.try_into()?) + }, // Todo: Is it illegal to have evidence of wrongdoing in the first block? + proposer_address: value.proposer_address.try_into()?, + }) + } +} + +impl From
for RawHeader { + fn from(value: Header) -> Self { + RawHeader { + version: Some(value.version.into()), + chain_id: value.chain_id.into(), + height: value.height.into(), + time: Some(value.time.into()), + last_block_id: value.last_block_id.map(Into::into), + last_commit_hash: value.last_commit_hash.unwrap_or_default().into(), + data_hash: value.data_hash.unwrap_or_default().into(), + validators_hash: value.validators_hash.into(), + next_validators_hash: value.next_validators_hash.into(), + consensus_hash: value.consensus_hash.into(), + app_hash: value.app_hash.into(), + last_results_hash: value.last_results_hash.unwrap_or_default().into(), + evidence_hash: value.evidence_hash.unwrap_or_default().into(), + proposer_address: value.proposer_address.into(), + } + } +} + impl Header { /// Hash this header pub fn hash(&self) -> Hash { @@ -105,17 +200,12 @@ impl Header { /// application. /// /// -#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct Version { /// Block version - #[serde(with = "serializers::from_str")] pub block: u64, /// App version - /// - /// If this field is not supplied when deserializing from JSON, it is set - /// to `Default::default()` for `u64` (i.e. 0). - #[serde(with = "serializers::from_str", default)] pub app: u64, } @@ -143,7 +233,7 @@ impl From for RawConsensusVersion { #[cfg(test)] mod tests { - use super::{Header, Version}; + use super::Header; use crate::hash::Algorithm; use crate::test::test_serialization_roundtrip; use crate::Hash; @@ -167,12 +257,4 @@ mod tests { .unwrap(); assert_eq!(expected_hash, header.hash()); } - - #[test] - fn empty_header_version_app_field() { - let json_data = r#"{"block": "11"}"#; - let version: Version = serde_json::from_str(json_data).unwrap(); - assert_eq!(11, version.block); - assert_eq!(0, version.app); - } } diff --git a/tendermint/src/block/height.rs b/tendermint/src/block/height.rs index 63a79c104..f943c1e26 100644 --- a/tendermint/src/block/height.rs +++ b/tendermint/src/block/height.rs @@ -100,7 +100,10 @@ impl FromStr for Height { type Err = Error; fn from_str(s: &str) -> Result { - Height::try_from(s.parse::().map_err(|_| Kind::Parse)?) + Height::try_from( + s.parse::() + .map_err(|_| Kind::Parse.context("height decode"))?, + ) } } @@ -113,7 +116,7 @@ impl<'de> Deserialize<'de> for Height { impl Serialize for Height { fn serialize(&self, serializer: S) -> Result { - self.to_string().serialize(serializer) + i64::from(*self).to_string().serialize(serializer) } } diff --git a/tendermint/src/block/id.rs b/tendermint/src/block/id.rs index d9a1ee1a1..3dafad001 100644 --- a/tendermint/src/block/id.rs +++ b/tendermint/src/block/id.rs @@ -28,6 +28,7 @@ pub const PREFIX_LENGTH: usize = 10; #[derive( Serialize, Deserialize, Copy, Clone, Debug, Default, Hash, Eq, PartialEq, PartialOrd, Ord, )] +#[serde(try_from = "RawBlockId", into = "RawBlockId")] pub struct Id { /// The block's main hash is the Merkle root of all the fields in the /// block header. @@ -59,7 +60,9 @@ impl TryFrom for Id { fn try_from(value: RawBlockId) -> Result { if value.part_set_header.is_none() { - return Err(Kind::InvalidPartSetHeader.into()); + return Err(Kind::InvalidPartSetHeader + .context("part_set_header is None") + .into()); } Ok(Self { hash: value.hash.try_into()?, @@ -96,7 +99,9 @@ impl TryFrom for Id { fn try_from(value: RawCanonicalBlockId) -> Result { if value.part_set_header.is_none() { - return Err(Kind::InvalidPartSetHeader.into()); + return Err(Kind::InvalidPartSetHeader + .context("part_set_header is None") + .into()); } Ok(Self { hash: value.hash.try_into()?, diff --git a/tendermint/src/block/meta.rs b/tendermint/src/block/meta.rs index b325fe8cd..f12532ec2 100644 --- a/tendermint/src/block/meta.rs +++ b/tendermint/src/block/meta.rs @@ -1,14 +1,54 @@ //! Block metadata use super::{Header, Id}; +use crate::{Error, Kind}; use serde::{Deserialize, Serialize}; +use std::convert::{TryFrom, TryInto}; +use tendermint_proto::types::BlockMeta as RawMeta; -/// Block metadata +/// Block metadata - Todo: implement constructor and getters #[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(try_from = "RawMeta", into = "RawMeta")] pub struct Meta { /// ID of the block pub block_id: Id, + /// block size - Todo: make this robust (u63) + pub block_size: i64, + /// Header of the block pub header: Header, + + /// Number of transactions - Todo: make this robust (u63) + pub num_txs: i64, +} + +impl TryFrom for Meta { + type Error = Error; + + fn try_from(value: RawMeta) -> Result { + Ok(Meta { + block_id: value + .block_id + .ok_or_else(|| Error::from(Kind::InvalidBlock.context("no block_id")))? + .try_into()?, + block_size: value.block_size, + header: value + .header + .ok_or_else(|| Error::from(Kind::InvalidBlock.context("no header")))? + .try_into()?, + num_txs: value.num_txs, + }) + } +} + +impl From for RawMeta { + fn from(value: Meta) -> Self { + RawMeta { + block_id: Some(value.block_id.into()), + block_size: value.block_size, + header: Some(value.header.into()), + num_txs: value.num_txs, + } + } } diff --git a/tendermint/src/block/parts.rs b/tendermint/src/block/parts.rs index f108380ab..83f6ed0c4 100644 --- a/tendermint/src/block/parts.rs +++ b/tendermint/src/block/parts.rs @@ -4,7 +4,6 @@ use crate::hash::Algorithm; use crate::hash::SHA256_HASH_SIZE; use crate::Hash; use crate::{Error, Kind}; -use serde::{Deserialize, Serialize}; use std::convert::TryFrom; use tendermint_proto::types::{ CanonicalPartSetHeader as RawCanonicalPartSetHeader, PartSetHeader as RawPartSetHeader, @@ -12,9 +11,8 @@ use tendermint_proto::types::{ use tendermint_proto::DomainType; /// Block parts header -#[derive( - Serialize, Deserialize, Clone, Copy, Debug, Default, Hash, Eq, PartialEq, PartialOrd, Ord, -)] +#[derive(Clone, Copy, Debug, Default, Hash, Eq, PartialEq, PartialOrd, Ord)] +#[non_exhaustive] pub struct Header { /// Number of parts in this block pub total: u32, @@ -24,7 +22,6 @@ pub struct Header { } impl DomainType for Header {} -impl DomainType for Header {} impl TryFrom for Header { type Error = Error; @@ -73,8 +70,18 @@ impl From
for RawCanonicalPartSetHeader { } impl Header { - /// Create a new parts header - pub fn new(total: u32, hash: Hash) -> Self { - Header { total, hash } + /// constructor + pub fn new(total: u32, hash: Hash) -> Result { + if total == 0 && hash != Hash::None { + return Err(Kind::InvalidPartSetHeader + .context("zero total with existing hash") + .into()); + } + if total != 0 && hash == Hash::None { + return Err(Kind::InvalidPartSetHeader + .context("non-zero total with empty hash") + .into()); + } + Ok(Header { total, hash }) } } diff --git a/tendermint/src/block/round.rs b/tendermint/src/block/round.rs index e07391c1b..42dfc8117 100644 --- a/tendermint/src/block/round.rs +++ b/tendermint/src/block/round.rs @@ -1,5 +1,4 @@ use crate::error::{Error, Kind}; -use serde::{de::Error as _, Deserialize, Deserializer, Serialize, Serializer}; use std::convert::TryInto; use std::{ convert::TryFrom, @@ -88,20 +87,10 @@ impl FromStr for Round { type Err = Error; fn from_str(s: &str) -> Result { - Round::try_from(s.parse::().map_err(|_| Kind::Parse)?) - } -} - -impl<'de> Deserialize<'de> for Round { - fn deserialize>(deserializer: D) -> Result { - Ok(Self::from_str(&String::deserialize(deserializer)?) - .map_err(|e| D::Error::custom(format!("{}", e)))?) - } -} - -impl Serialize for Round { - fn serialize(&self, serializer: S) -> Result { - self.to_string().serialize(serializer) + Round::try_from( + s.parse::() + .map_err(|_| Kind::Parse.context("round decode"))?, + ) } } diff --git a/tendermint/src/block/signed_header.rs b/tendermint/src/block/signed_header.rs index 5d4813d89..c89f00dec 100644 --- a/tendermint/src/block/signed_header.rs +++ b/tendermint/src/block/signed_header.rs @@ -1,15 +1,57 @@ //! SignedHeader contains commit and and block header. //! It is what the rpc endpoint /commit returns and hence can be used by a //! light client. +use crate::{block, Error, Kind}; use serde::{Deserialize, Serialize}; - -use crate::block; +use std::convert::{TryFrom, TryInto}; +use tendermint_proto::types::SignedHeader as RawSignedHeader; /// Signed block headers -#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(try_from = "RawSignedHeader", into = "RawSignedHeader")] // used by RPC /commit endpoint +#[non_exhaustive] pub struct SignedHeader { /// Block header pub header: block::Header, /// Commit containing signatures for the header pub commit: block::Commit, } + +impl TryFrom for SignedHeader { + type Error = Error; + + fn try_from(value: RawSignedHeader) -> Result { + let header = value.header.ok_or(Kind::InvalidSignedHeader)?.try_into()?; + let commit = value.commit.ok_or(Kind::InvalidSignedHeader)?.try_into()?; + Self::new(header, commit) // Additional checks + } +} + +impl From for RawSignedHeader { + fn from(value: SignedHeader) -> Self { + RawSignedHeader { + header: Some(value.header.into()), + commit: Some(value.commit.into()), + } + } +} + +impl SignedHeader { + /// Constructor. + pub fn new(header: block::Header, commit: block::Commit) -> Result { + if header.height != commit.height { + return Err(Kind::InvalidSignedHeader.into()); + } + Ok(Self { header, commit }) + } + + /// Get header + pub fn header(&self) -> &block::Header { + &self.header + } + + /// Get commit + pub fn commit(&self) -> &block::Commit { + &self.commit + } +} diff --git a/tendermint/src/block/size.rs b/tendermint/src/block/size.rs index a1d5e8685..e4bd02182 100644 --- a/tendermint/src/block/size.rs +++ b/tendermint/src/block/size.rs @@ -1,8 +1,12 @@ //! Block size parameters +use crate::{Error, Kind}; +use std::convert::{TryFrom, TryInto}; +use tendermint_proto::DomainType; use { crate::serializers, serde::{Deserialize, Serialize}, + tendermint_proto::abci::BlockParams as RawSize, }; /// Block size parameters @@ -16,3 +20,29 @@ pub struct Size { #[serde(with = "serializers::from_str")] pub max_gas: i64, } + +impl DomainType for Size {} + +impl TryFrom for Size { + type Error = Error; + + fn try_from(value: RawSize) -> Result { + Ok(Self { + max_bytes: value + .max_bytes + .try_into() + .map_err(|_| Self::Error::from(Kind::IntegerOverflow))?, + max_gas: value.max_gas, + }) + } +} + +impl From for RawSize { + fn from(value: Size) -> Self { + // Todo: make the struct more robust so this can become infallible. + RawSize { + max_bytes: value.max_bytes as i64, + max_gas: value.max_gas, + } + } +} diff --git a/tendermint/src/chain/id.rs b/tendermint/src/chain/id.rs index 20b5f1227..badd616c4 100644 --- a/tendermint/src/chain/id.rs +++ b/tendermint/src/chain/id.rs @@ -33,7 +33,7 @@ impl TryFrom for Id { for byte in value.as_bytes() { match byte { b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9' | b'-' | b'_' | b'.' => (), - _ => return Err(Kind::Parse.into()), + _ => return Err(Kind::Parse.context("chain id charset").into()), } } @@ -121,7 +121,7 @@ impl Eq for Id {} impl Serialize for Id { fn serialize(&self, serializer: S) -> Result { - self.0.as_str().serialize(serializer) + self.to_string().serialize(serializer) } } diff --git a/tendermint/src/config/priv_validator_key.rs b/tendermint/src/config/priv_validator_key.rs index 2cdb8ac3b..784db0039 100644 --- a/tendermint/src/config/priv_validator_key.rs +++ b/tendermint/src/config/priv_validator_key.rs @@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize}; use std::{fs, path::Path}; /// Validator private key -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize)] // JSON custom serialization for priv_validator_key.json pub struct PrivValidatorKey { /// Address pub address: account::Id, diff --git a/tendermint/src/consensus/params.rs b/tendermint/src/consensus/params.rs index cbe051297..c98535587 100644 --- a/tendermint/src/consensus/params.rs +++ b/tendermint/src/consensus/params.rs @@ -1,7 +1,13 @@ //! Tendermint consensus parameters use crate::{block, evidence, public_key}; +use crate::{Error, Kind}; use serde::{Deserialize, Serialize}; +use std::convert::{TryFrom, TryInto}; +use tendermint_proto::abci::ConsensusParams as RawParams; +use tendermint_proto::types::ValidatorParams as RawValidatorParams; +use tendermint_proto::types::VersionParams as RawVersionParams; +use tendermint_proto::DomainType; /// Tendermint consensus parameters #[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)] @@ -14,6 +20,43 @@ pub struct Params { /// Validator parameters pub validator: ValidatorParams, + + /// Version parameters + #[serde(skip)] // Todo: FIXME kvstore /genesis returns '{}' instead of '{app_version: "0"}' + pub version: Option, +} + +impl DomainType for Params {} + +impl TryFrom for Params { + type Error = Error; + + fn try_from(value: RawParams) -> Result { + Ok(Self { + block: value.block.ok_or(Kind::InvalidBlock)?.try_into()?, + evidence: value.evidence.ok_or(Kind::InvalidEvidence)?.try_into()?, + validator: value + .validator + .ok_or(Kind::InvalidValidatorParams)? + .try_into()?, + version: value + .version + .map(TryFrom::try_from) + .transpose() + .map_err(|_| Kind::InvalidVersionParams)?, + }) + } +} + +impl From for RawParams { + fn from(value: Params) -> Self { + RawParams { + block: Some(value.block.into()), + evidence: Some(value.evidence.into()), + validator: Some(value.validator.into()), + version: value.version.map(From::from), + } + } } /// Validator consensus parameters @@ -22,3 +65,68 @@ pub struct ValidatorParams { /// Allowed algorithms for validator signing pub pub_key_types: Vec, } + +impl DomainType for ValidatorParams {} + +impl TryFrom for ValidatorParams { + type Error = Error; + + fn try_from(value: RawValidatorParams) -> Result { + Ok(Self { + pub_key_types: value.pub_key_types.iter().map(|f| key_type(f)).collect(), + }) + } +} + +// Todo: How are these key types created? +fn key_type(s: &str) -> public_key::Algorithm { + if s == "Ed25519" || s == "ed25519" { + return public_key::Algorithm::Ed25519; + } + if s == "Secp256k1" || s == "secp256k1" { + return public_key::Algorithm::Secp256k1; + } + public_key::Algorithm::Ed25519 // Todo: Shall we error out for invalid key types? +} + +impl From for RawValidatorParams { + fn from(value: ValidatorParams) -> Self { + RawValidatorParams { + pub_key_types: value + .pub_key_types + .into_iter() + .map(|k| match k { + public_key::Algorithm::Ed25519 => "ed25519".to_string(), + public_key::Algorithm::Secp256k1 => "secp256k1".to_string(), + }) + .collect(), + } + } +} + +/// Version Parameters +#[derive(Clone, Serialize, Deserialize, Debug, Eq, PartialEq, Default)] +pub struct VersionParams { + #[serde(with = "crate::serializers::from_str")] + app_version: u64, +} + +impl DomainType for VersionParams {} + +impl TryFrom for VersionParams { + type Error = Error; + + fn try_from(value: RawVersionParams) -> Result { + Ok(Self { + app_version: value.app_version, + }) + } +} + +impl From for RawVersionParams { + fn from(value: VersionParams) -> Self { + RawVersionParams { + app_version: value.app_version, + } + } +} diff --git a/tendermint/src/consensus/state.rs b/tendermint/src/consensus/state.rs index 1dc7741d0..a0d5f6e9e 100644 --- a/tendermint/src/consensus/state.rs +++ b/tendermint/src/consensus/state.rs @@ -1,7 +1,6 @@ //! Tendermint consensus state pub use crate::block; -use serde::{Deserialize, Serialize}; pub use std::{cmp::Ordering, fmt}; /// Placeholder string to show when block ID is absent. Syntax from: @@ -9,7 +8,7 @@ pub use std::{cmp::Ordering, fmt}; pub const NIL_PLACEHOLDER: &str = ""; /// Tendermint consensus state -#[derive(Serialize, Deserialize, Clone, Debug, Default, Eq, PartialEq)] +#[derive(Clone, Debug, Default, Eq, PartialEq)] pub struct State { /// Current block height pub height: block::Height, diff --git a/tendermint/src/error.rs b/tendermint/src/error.rs index 68a5323ab..0dab4701f 100644 --- a/tendermint/src/error.rs +++ b/tendermint/src/error.rs @@ -65,10 +65,14 @@ pub enum Kind { #[error("invalid hash: expected hash size to be 32 bytes")] InvalidHashSize, - /// No timestamp in vote + /// No timestamp in vote or block header #[error("no timestamp")] NoTimestamp, + /// Invalid timestamp + #[error("invalid timestamp")] + InvalidTimestamp, + /// Invalid account ID length #[error("invalid account ID length")] InvalidAccountIdLength, @@ -96,6 +100,82 @@ pub enum Kind { /// Invalid PartSetHeader #[error("invalid part set header")] InvalidPartSetHeader, + + /// Missing Header in Block + #[error("missing header field")] + MissingHeader, + + /// Missing Data in Block + #[error("missing data field")] + MissingData, + + /// Missing Evidence in Block + #[error("missing evidence field")] + MissingEvidence, + + /// Invalid Block + #[error("invalid block")] + InvalidBlock, + + /// Invalid first Block + #[error("invalid first block")] + InvalidFirstBlock, + + /// Missing Version field + #[error("missing version")] + MissingVersion, + + /// Invalid Header + #[error("invalid header")] + InvalidHeader, + + /// Invalid first Header + #[error("invalid first header")] + InvalidFirstHeader, + + /// Invalid signature in CommitSig + #[error("invalid signature")] + InvalidSignature, + + /// Invalid validator address in CommitSig + #[error("invalid validator address")] + InvalidValidatorAddress, + + /// Invalid Signed Header + #[error("invalid signed header")] + InvalidSignedHeader, + + /// Invalid Evidence + #[error("invalid evidence")] + InvalidEvidence, + + /// Invalid BlockIdFlag + #[error("invalid block id flag")] + BlockIdFlag, + + /// Negative voting power + #[error("negative power")] + NegativePower, + + /// Missing Public Key + #[error("missing public key")] + MissingPublicKey, + + /// Invalid validator parameters + #[error("invalid validator parameters")] + InvalidValidatorParams, + + /// Invalid version parameters + #[error("invalid version parameters")] + InvalidVersionParams, + + /// Negative max_age_num_blocks in Evidence parameters + #[error("negative max_age_num_blocks")] + NegativeMaxAgeNum, + + /// Missing max_age_duration in evidence parameters + #[error("missing max_age_duration")] + MissingMaxAgeDuration, } impl Kind { diff --git a/tendermint/src/evidence.rs b/tendermint/src/evidence.rs index 553fbcb3a..8c88820b3 100644 --- a/tendermint/src/evidence.rs +++ b/tendermint/src/evidence.rs @@ -1,41 +1,111 @@ //! Evidence of malfeasance by validators (i.e. signing conflicting votes). +use crate::{block::signed_header::SignedHeader, serializers, Error, Kind, Vote}; +use serde::{Deserialize, Serialize}; +use std::convert::{TryFrom, TryInto}; use std::slice; -use { - crate::{block::signed_header::SignedHeader, serializers, Vote}, - serde::{Deserialize, Serialize}, -}; +use tendermint_proto::google::protobuf::Duration as RawDuration; +use tendermint_proto::types::evidence::Sum as RawSum; +use tendermint_proto::types::evidence::Sum; +use tendermint_proto::types::DuplicateVoteEvidence as RawDuplicateVoteEvidence; +use tendermint_proto::types::Evidence as RawEvidence; +use tendermint_proto::types::EvidenceData as RawEvidenceData; +use tendermint_proto::types::EvidenceParams as RawEvidenceParams; +use tendermint_proto::DomainType; /// Evidence of malfeasance by validators (i.e. signing conflicting votes). /// encoded using an Amino prefix. There is currently only a single type of /// evidence: `DuplicateVoteEvidence`. /// /// -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] -#[serde(tag = "type", content = "value")] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +//#[serde(tag = "type", content = "value")] +#[serde(try_from = "RawEvidence", into = "RawEvidence")] // Used by RPC /broadcast_evidence endpoint pub enum Evidence { /// Duplicate vote evidence - #[serde(rename = "tendermint/DuplicateVoteEvidence")] + //#[serde(rename = "tendermint/DuplicateVoteEvidence")] DuplicateVote(DuplicateVoteEvidence), - /// Conflicting headers evidence - #[serde(rename = "tendermint/ConflictingHeadersEvidence")] + /// Conflicting headers evidence - Todo: this is not implemented in protobuf, it's ignored now + //#[serde(rename = "tendermint/ConflictingHeadersEvidence")] ConflictingHeaders(Box), + + /// LightClient attack evidence - Todo: Implement details + LightClientAttackEvidence, +} + +impl TryFrom for Evidence { + type Error = Error; + + fn try_from(value: RawEvidence) -> Result { + match value.sum.ok_or(Kind::InvalidEvidence)? { + Sum::DuplicateVoteEvidence(ev) => Ok(Evidence::DuplicateVote(ev.try_into()?)), + Sum::LightClientAttackEvidence(_ev) => Ok(Evidence::LightClientAttackEvidence), + } + } +} + +impl From for RawEvidence { + fn from(value: Evidence) -> Self { + match value { + Evidence::DuplicateVote(ev) => RawEvidence { + sum: Some(RawSum::DuplicateVoteEvidence(ev.into())), + }, + Evidence::ConflictingHeaders(_ev) => RawEvidence { sum: None }, // Todo: implement + Evidence::LightClientAttackEvidence => RawEvidence { sum: None }, // Todo: implement + } + } } /// Duplicate vote evidence -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +#[derive(Clone, Debug, PartialEq)] pub struct DuplicateVoteEvidence { vote_a: Vote, vote_b: Vote, } +impl TryFrom for DuplicateVoteEvidence { + type Error = Error; + + fn try_from(value: RawDuplicateVoteEvidence) -> Result { + Ok(Self { + vote_a: value.vote_a.ok_or(Kind::MissingEvidence)?.try_into()?, + vote_b: value.vote_b.ok_or(Kind::MissingEvidence)?.try_into()?, + }) + } +} + +impl From for RawDuplicateVoteEvidence { + fn from(value: DuplicateVoteEvidence) -> Self { + RawDuplicateVoteEvidence { + vote_a: Some(value.vote_a.into()), + vote_b: Some(value.vote_b.into()), + } + } +} + +impl DuplicateVoteEvidence { + /// constructor + pub fn new(vote_a: Vote, vote_b: Vote) -> Result { + if vote_a.height != vote_b.height { + return Err(Kind::InvalidEvidence.into()); + } + // Todo: make more assumptions about what is considered a valid evidence for duplicate vote + Ok(Self { vote_a, vote_b }) + } + /// Get votes + pub fn votes(&self) -> (&Vote, &Vote) { + (&self.vote_a, &self.vote_b) + } +} + /// Conflicting headers evidence. -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +// Todo: This struct doesn't seem to have a protobuf definition. +#[derive(Clone, Debug, PartialEq)] pub struct ConflictingHeadersEvidence { - #[serde(rename = "H1")] + //#[serde(rename = "H1")] h1: SignedHeader, - #[serde(rename = "H2")] + //#[serde(rename = "H2")] h2: SignedHeader, } @@ -49,11 +119,40 @@ impl ConflictingHeadersEvidence { /// Evidence data is a wrapper for a list of `Evidence`. /// /// -#[derive(Deserialize, Serialize, Clone, Debug, Default, PartialEq)] +#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)] +#[serde(try_from = "RawEvidenceData", into = "RawEvidenceData")] pub struct Data { evidence: Option>, } +impl TryFrom for Data { + type Error = Error; + fn try_from(value: RawEvidenceData) -> Result { + if value.evidence.is_empty() { + return Ok(Self { evidence: None }); + } + let evidence: Result, Error> = + value.evidence.into_iter().map(TryInto::try_into).collect(); + Ok(Self { + evidence: Some(evidence?), + }) + } +} + +impl From for RawEvidenceData { + fn from(value: Data) -> Self { + RawEvidenceData { + evidence: value + .evidence + .unwrap_or_default() + .into_iter() + .map(Into::into) + .collect(), + hash: vec![], + } + } +} + impl Data { /// Create a new evidence data collection pub fn new(into_evidence: I) -> Data @@ -91,11 +190,47 @@ pub struct Params { /// Max age duration pub max_age_duration: Duration, + + /// Max bytes + #[serde(default)] + pub max_num: i64, +} + +impl DomainType for Params {} + +impl TryFrom for Params { + type Error = Error; + + fn try_from(value: RawEvidenceParams) -> Result { + Ok(Self { + max_age_num_blocks: value + .max_age_num_blocks + .try_into() + .map_err(|_| Self::Error::from(Kind::NegativeMaxAgeNum))?, + max_age_duration: value + .max_age_duration + .ok_or(Kind::MissingMaxAgeDuration)? + .try_into()?, + max_num: value.max_num as i64, + }) + } +} + +impl From for RawEvidenceParams { + fn from(value: Params) -> Self { + Self { + // Todo: Implement proper domain types so this becomes infallible + max_age_num_blocks: value.max_age_num_blocks.try_into().unwrap(), + max_age_duration: Some(value.max_age_duration.into()), + max_num: value.max_num as u32, + } + } } /// Duration is a wrapper around std::time::Duration /// essentially, to keep the usages look cleaner /// i.e. you can avoid using serde annotations everywhere +/// Todo: harmonize google::protobuf::Duration, std::time::Duration and this. Too many structs. #[derive(Copy, Clone, Debug, Eq, PartialEq, Deserialize, Serialize)] pub struct Duration(#[serde(with = "serializers::time_duration")] pub std::time::Duration); @@ -104,3 +239,32 @@ impl From for std::time::Duration { d.0 } } + +impl DomainType for Duration {} + +impl TryFrom for Duration { + type Error = Error; + + fn try_from(value: RawDuration) -> Result { + Ok(Self(std::time::Duration::new( + value + .seconds + .try_into() + .map_err(|_| Self::Error::from(Kind::IntegerOverflow))?, + value + .nanos + .try_into() + .map_err(|_| Self::Error::from(Kind::IntegerOverflow))?, + ))) + } +} + +impl From for RawDuration { + fn from(value: Duration) -> Self { + // Todo: make the struct into a proper domaintype so this becomes infallible. + Self { + seconds: value.0.as_secs() as i64, + nanos: value.0.subsec_nanos() as i32, + } + } +} diff --git a/tendermint/src/genesis.rs b/tendermint/src/genesis.rs index 761713f18..f9ba90cb3 100644 --- a/tendermint/src/genesis.rs +++ b/tendermint/src/genesis.rs @@ -1,12 +1,17 @@ //! Genesis data use crate::{chain, consensus, validator, Time}; -use serde::{Deserialize, Serialize}; +use chrono::DateTime; +use serde::de::Error; +use serde::{Deserialize, Deserializer, Serialize}; +use std::convert::TryFrom; +use tendermint_proto::google::protobuf::Timestamp; /// Genesis data #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Genesis { /// Time of genesis + #[serde(with = "crate::serializers::time")] pub genesis_time: Time, /// Chain ID @@ -16,6 +21,7 @@ pub struct Genesis { pub consensus_params: consensus::Params, /// Validators + #[serde(default)] pub validators: Vec, /// App hash @@ -26,3 +32,18 @@ pub struct Genesis { #[serde(default)] pub app_state: AppState, } + +/// Deserialize string into Time through Timestamp +pub fn deserialize_time<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let value_string = String::deserialize(deserializer)?; + let value_datetime = DateTime::parse_from_rfc3339(value_string.as_str()) + .map_err(|e| D::Error::custom(format!("{}", e)))?; + Ok(Time::try_from(Timestamp { + seconds: value_datetime.timestamp(), + nanos: value_datetime.timestamp_subsec_nanos() as i32, + }) + .map_err(|e| D::Error::custom(format!("{}", e)))?) +} diff --git a/tendermint/src/hash.rs b/tendermint/src/hash.rs index 0b5d5e67d..6d29671c0 100644 --- a/tendermint/src/hash.rs +++ b/tendermint/src/hash.rs @@ -1,7 +1,8 @@ //! Hash functions and their outputs use crate::error::{Error, Kind}; -use serde::{de::Error as _, Deserialize, Deserializer, Serialize, Serializer}; +use serde::de::Error as _; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; use std::convert::TryFrom; use std::{ fmt::{self, Debug, Display}, @@ -25,26 +26,29 @@ pub enum Algorithm { pub enum Hash { /// SHA-256 hashes Sha256([u8; SHA256_HASH_SIZE]), + /// Empty hash + None, } impl DomainType> for Hash {} -/// Default conversion from Vec is SHA256 Hash +/// Default conversion from Vec is SHA256 Hash or None impl TryFrom> for Hash { type Error = Error; fn try_from(value: Vec) -> Result { + if value.is_empty() { + return Ok(Hash::None); + } Hash::from_bytes(Algorithm::Sha256, &value) } } impl From for Vec { fn from(value: Hash) -> Self { - if value == Hash::default() { - return vec![]; - } match value { Hash::Sha256(s) => s.to_vec(), + Hash::None => vec![], } } } @@ -52,6 +56,9 @@ impl From for Vec { impl Hash { /// Create a new `Hash` with the given algorithm type pub fn from_bytes(alg: Algorithm, bytes: &[u8]) -> Result { + if bytes.is_empty() { + return Ok(Hash::None); + } match alg { Algorithm::Sha256 => { if bytes.len() == SHA256_HASH_SIZE { @@ -59,7 +66,9 @@ impl Hash { h.copy_from_slice(bytes); Ok(Hash::Sha256(h)) } else { - Err(Kind::Parse.into()) + Err(Kind::Parse + .context(format!("hash invalid length: {}", bytes.len())) + .into()) } } } @@ -67,6 +76,9 @@ impl Hash { /// Decode a `Hash` from upper-case hexadecimal pub fn from_hex_upper(alg: Algorithm, s: &str) -> Result { + if s.is_empty() { + return Ok(Hash::None); + } match alg { Algorithm::Sha256 => { let mut h = [0u8; SHA256_HASH_SIZE]; @@ -80,6 +92,7 @@ impl Hash { pub fn algorithm(self) -> Algorithm { match self { Hash::Sha256(_) => Algorithm::Sha256, + Hash::None => Algorithm::Sha256, } } @@ -87,21 +100,28 @@ impl Hash { pub fn as_bytes(&self) -> &[u8] { match self { Hash::Sha256(ref h) => h.as_ref(), + Hash::None => &[], } } + + /// Convenience function to check for Hash::None + pub fn is_empty(&self) -> bool { + self == &Hash::None + } } impl Debug for Hash { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Hash::Sha256(_) => write!(f, "Hash::Sha256({})", self), + Hash::None => write!(f, "Hash::None"), } } } impl Default for Hash { fn default() -> Self { - Hash::from_bytes(Algorithm::Sha256, &[0; SHA256_HASH_SIZE]).unwrap() + Hash::None } } @@ -109,6 +129,7 @@ impl Display for Hash { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let hex = match self { Hash::Sha256(ref h) => Hex::upper_case().encode_to_string(h).unwrap(), + Hash::None => String::new(), }; write!(f, "{}", hex) @@ -123,6 +144,7 @@ impl FromStr for Hash { } } +// Serialization is used in light-client config impl<'de> Deserialize<'de> for Hash { fn deserialize>(deserializer: D) -> Result { let hex = String::deserialize(deserializer)?; @@ -212,16 +234,3 @@ impl FromStr for AppHash { Self::from_hex_upper(s) } } - -impl<'de> Deserialize<'de> for AppHash { - fn deserialize>(deserializer: D) -> Result { - let hex = String::deserialize(deserializer)?; - Ok(Self::from_str(&hex).map_err(|e| D::Error::custom(format!("{}", e)))?) - } -} - -impl Serialize for AppHash { - fn serialize(&self, serializer: S) -> Result { - self.to_string().serialize(serializer) - } -} diff --git a/tendermint/src/merkle/proof.rs b/tendermint/src/merkle/proof.rs index 55c461bdc..a770cb540 100644 --- a/tendermint/src/merkle/proof.rs +++ b/tendermint/src/merkle/proof.rs @@ -1,7 +1,13 @@ //! Merkle proofs +use serde::{Deserialize, Serialize}; +use std::convert::TryFrom; + +use tendermint_proto::crypto::ProofOp as RawProofOp; +use tendermint_proto::crypto::ProofOps as RawProofOps; +use tendermint_proto::DomainType; use crate::serializers; -use serde::{Deserialize, Serialize}; +use crate::Error; /// Proof is Merkle proof defined by the list of ProofOps /// @@ -28,6 +34,50 @@ pub struct ProofOp { pub data: Vec, } +impl DomainType for ProofOp {} + +impl TryFrom for ProofOp { + type Error = Error; + + fn try_from(value: RawProofOp) -> Result { + Ok(Self { + field_type: value.r#type, + key: value.key, + data: value.data, + }) + } +} + +impl From for RawProofOp { + fn from(value: ProofOp) -> Self { + RawProofOp { + r#type: value.field_type, + key: value.key, + data: value.data, + } + } +} + +impl DomainType for Proof {} + +impl TryFrom for Proof { + type Error = Error; + + fn try_from(value: RawProofOps) -> Result { + let ops: Result, _> = value.ops.into_iter().map(ProofOp::try_from).collect(); + + Ok(Self { ops: ops? }) + } +} + +impl From for RawProofOps { + fn from(value: Proof) -> Self { + let ops: Vec = value.ops.into_iter().map(RawProofOp::from).collect(); + + RawProofOps { ops } + } +} + #[cfg(test)] mod test { use super::Proof; diff --git a/tendermint/src/net.rs b/tendermint/src/net.rs index 45a5b550e..684f30938 100644 --- a/tendermint/src/net.rs +++ b/tendermint/src/net.rs @@ -62,10 +62,10 @@ impl FromStr for Address { fn from_str(addr: &str) -> Result { if addr.starts_with(TCP_PREFIX) { - Self::parse_tcp_addr(&addr[TCP_PREFIX.len()..]) + Self::parse_tcp_addr(&addr.strip_prefix(TCP_PREFIX).unwrap()) } else if addr.starts_with(UNIX_PREFIX) { Ok(Address::Unix { - path: PathBuf::from(&addr[UNIX_PREFIX.len()..]), + path: PathBuf::from(&addr.strip_prefix(UNIX_PREFIX).unwrap()), }) } else if addr.contains("://") { // The only supported URI prefixes are `tcp://` and `unix://` diff --git a/tendermint/src/private_key.rs b/tendermint/src/private_key.rs index 08baa722f..dfd6369c7 100644 --- a/tendermint/src/private_key.rs +++ b/tendermint/src/private_key.rs @@ -10,7 +10,7 @@ use zeroize::Zeroizing; /// Private keys as parsed from configuration files #[derive(Serialize, Deserialize)] #[non_exhaustive] -#[serde(tag = "type", content = "value")] +#[serde(tag = "type", content = "value")] // JSON custom serialization for priv_validator_key.json pub enum PrivateKey { /// Ed25519 keys #[serde( diff --git a/tendermint/src/proposal.rs b/tendermint/src/proposal.rs index bc62e457d..e51371ed5 100644 --- a/tendermint/src/proposal.rs +++ b/tendermint/src/proposal.rs @@ -139,14 +139,15 @@ mod tests { "DEADBEEFDEADBEEFBAFBAFBAFBAFBAFADEADBEEFDEADBEEFBAFBAFBAFBAFBAFA", ) .unwrap(), - part_set_header: Header { - total: 65535, - hash: Hash::from_hex_upper( + part_set_header: Header::new( + 65535, + Hash::from_hex_upper( Algorithm::Sha256, "0022446688AACCEE1133557799BBDDFF0022446688AACCEE1133557799BBDDFF", ) .unwrap(), - }, + ) + .unwrap(), }), timestamp: Some(dt.into()), signature: Signature::Ed25519(Ed25519Signature::new([0; ED25519_SIGNATURE_SIZE])), @@ -225,14 +226,15 @@ mod tests { "DEADBEEFDEADBEEFBAFBAFBAFBAFBAFADEADBEEFDEADBEEFBAFBAFBAFBAFBAFA", ) .unwrap(), - part_set_header: Header { - total: 65535, - hash: Hash::from_hex_upper( + part_set_header: Header::new( + 65535, + Hash::from_hex_upper( Algorithm::Sha256, "0022446688AACCEE1133557799BBDDFF0022446688AACCEE1133557799BBDDFF", ) .unwrap(), - }, + ) + .unwrap(), }), signature: Signature::Ed25519(Ed25519Signature::new([0; ED25519_SIGNATURE_SIZE])), }; diff --git a/tendermint/src/public_key.rs b/tendermint/src/public_key.rs index bd1b8e433..40754cf0c 100644 --- a/tendermint/src/public_key.rs +++ b/tendermint/src/public_key.rs @@ -5,7 +5,9 @@ pub use ed25519_dalek::PublicKey as Ed25519; pub use k256::EncodedPoint as Secp256k1; mod pub_key_request; +mod pub_key_response; pub use pub_key_request::PubKeyRequest; +pub use pub_key_response::PubKeyResponse; use crate::{ error::{self, Error}, @@ -18,19 +20,23 @@ use std::convert::TryFrom; use std::{cmp::Ordering, fmt, ops::Deref, str::FromStr}; use subtle_encoding::{base64, bech32, hex}; use tendermint_proto::crypto::public_key::Sum; -use tendermint_proto::privval::PubKeyResponse as RawPubKeyResponse; +use tendermint_proto::crypto::PublicKey as RawPublicKey; use tendermint_proto::DomainType; // Note:On the golang side this is generic in the sense that it could everything that implements // github.com/tendermint/tendermint/crypto.PubKey // While this is meant to be used with different key-types, it currently only uses a PubKeyEd25519 // version. -// TODO(ismail): make this more generic (by modifying prost and adding a trait for PubKey) +// TODO: make this more generic +// Warning: the custom serialization implemented here does not use TryFrom. +// it should only be used to read/write the priva_validator_key.json. +// All changes to the serialization should check both the JSON and protobuf conversions. +// Todo: Merge JSON serialization with #[serde(try_from = "RawPublicKey", into = "RawPublicKey)] /// Public keys allowed in Tendermint protocols #[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[non_exhaustive] -#[serde(tag = "type", content = "value")] +#[serde(tag = "type", content = "value")] // JSON custom serialization for priv_validator_key.json pub enum PublicKey { /// Ed25519 keys #[serde( @@ -51,36 +57,32 @@ pub enum PublicKey { Secp256k1(Secp256k1), } -impl DomainType for PublicKey {} +impl DomainType for PublicKey {} -impl TryFrom for PublicKey { +impl TryFrom for PublicKey { type Error = Error; - fn try_from(value: RawPubKeyResponse) -> Result { - let Sum::Ed25519(b) = &value - .pub_key - .ok_or_else(|| format_err!(error::Kind::InvalidKey, "empty pubkey"))? + fn try_from(value: RawPublicKey) -> Result { + let sum = &value .sum .ok_or_else(|| format_err!(error::Kind::InvalidKey, "empty sum"))?; - Ed25519::from_bytes(b) - .map(Into::into) - .map_err(|_| format_err!(error::Kind::InvalidKey, "malformed key").into()) + match sum { + Sum::Ed25519(b) => Self::from_raw_ed25519(b) + .ok_or_else(|| format_err!(error::Kind::InvalidKey, "malformed key").into()), + } } } -impl From for RawPubKeyResponse { +impl From for RawPublicKey { fn from(value: PublicKey) -> Self { match value { - PublicKey::Ed25519(ref pk) => RawPubKeyResponse { - pub_key: Some(tendermint_proto::crypto::PublicKey { - sum: Some(tendermint_proto::crypto::public_key::Sum::Ed25519( - pk.as_bytes().to_vec(), - )), - }), - error: None, + PublicKey::Ed25519(ref pk) => RawPublicKey { + sum: Some(tendermint_proto::crypto::public_key::Sum::Ed25519( + pk.as_bytes().to_vec(), + )), }, #[cfg(feature = "secp256k1")] - PublicKey::Secp256k1(_) => panic!("secp256k1 PubKeyResponse unimplemented"), + PublicKey::Secp256k1(_) => panic!("secp256k1 PublicKey unimplemented"), } } } @@ -150,7 +152,7 @@ impl PublicKey { } /// Get a vector containing the byte serialization of this key - pub fn to_bytes(self) -> Vec { + pub fn to_vec(self) -> Vec { self.as_bytes().to_vec() } @@ -349,8 +351,7 @@ where #[cfg(test)] mod tests { use super::{PublicKey, TendermintKey}; - use crate::public_key::PublicKey::Ed25519; - pub use ed25519_dalek::PublicKey as Ed25519PublicKey; + use crate::public_key::PubKeyResponse; use subtle_encoding::hex; use tendermint_proto::DomainType; @@ -457,16 +458,19 @@ mod tests { 0x1a, 0x68, 0xf7, 0x7, 0x51, 0x1a, ]; - let msg = Ed25519( - Ed25519PublicKey::from_bytes(&[ - 215, 90, 152, 1, 130, 177, 10, 183, 213, 75, 254, 211, 201, 100, 7, 58, 14, 225, - 114, 243, 218, 166, 35, 37, 175, 2, 26, 104, 247, 7, 81, 26, - ]) - .unwrap(), - ); + let msg = PubKeyResponse { + pub_key: Some( + PublicKey::from_raw_ed25519(&[ + 215, 90, 152, 1, 130, 177, 10, 183, 213, 75, 254, 211, 201, 100, 7, 58, 14, + 225, 114, 243, 218, 166, 35, 37, 175, 2, 26, 104, 247, 7, 81, 26, + ]) + .unwrap(), + ), + error: None, + }; let got = msg.encode_vec().unwrap(); assert_eq!(got, encoded); - assert_eq!(PublicKey::decode_vec(&encoded).unwrap(), msg); + assert_eq!(PubKeyResponse::decode_vec(&encoded).unwrap(), msg); } } diff --git a/tendermint/src/public_key/pub_key_response.rs b/tendermint/src/public_key/pub_key_response.rs new file mode 100644 index 000000000..4ee24c393 --- /dev/null +++ b/tendermint/src/public_key/pub_key_response.rs @@ -0,0 +1,39 @@ +use crate::{Error, PublicKey}; +use std::convert::{TryFrom, TryInto}; +use tendermint_proto::privval::{PubKeyResponse as RawPubKeyResponse, RemoteSignerError}; +use tendermint_proto::DomainType; + +/// PubKeyResponse +#[derive(Clone, PartialEq, Debug)] +// Todo: either pub_key OR error is present +pub struct PubKeyResponse { + /// Public key + pub pub_key: Option, + + /// Error + pub error: Option, +} + +impl DomainType for PubKeyResponse {} + +impl TryFrom for PubKeyResponse { + type Error = Error; + + fn try_from(value: RawPubKeyResponse) -> Result { + Ok(PubKeyResponse { + pub_key: value.pub_key.map(TryInto::try_into).transpose()?, + error: value.error, + }) + } +} + +impl From for RawPubKeyResponse { + fn from(value: PubKeyResponse) -> Self { + RawPubKeyResponse { + pub_key: value.pub_key.map(Into::into), + error: value.error, + } + } +} + +// Todo: write unit test diff --git a/tendermint/src/serializers.rs b/tendermint/src/serializers.rs index 6ad3e36a0..8a0efc8b9 100644 --- a/tendermint/src/serializers.rs +++ b/tendermint/src/serializers.rs @@ -5,55 +5,9 @@ //! CAUTION: There are no guarantees for backwards compatibility, this module should be considered //! an internal implementation detail which can vanish without further warning. Use at your own //! risk. -//! -//! All serializers are presented in a serializers:::: -//! format. -//! -//! This example shows how to serialize Vec into different types of strings: -//! ```ignore -//! use serde::{Serialize, Deserialize}; -//! use tendermint::serializers; -//! -//! #[derive(Serialize, Deserialize)] -//! struct ByteTypes { -//! -//! #[serde(with="serializers::bytes::hexstring")] -//! hexbytes: Vec, -//! -//! #[serde(with="serializers::bytes::base64string")] -//! base64bytes: Vec, -//! -//! #[serde(with="serializers::bytes::string")] -//! bytes: Vec, -//! -//! } -//! ``` -//! -//! Available serializers: -//! i64 <-> string: #[serde(with="serializers::from_str")] -//! u64 <-> string: #[serde(with="serializers::from_str")] -//! std::time::Duration <-> nanoseconds as string #[serde(with="serializers::time_duration")] -//! Vec <-> HexString: #[serde(with="serializers::bytes::hexstring")] -//! Vec <-> Base64String: #[serde(with="serializers::bytes::base64string")] -//! Vec <-> String: #[serde(with="serializers::bytes::string")] -//! -//! Notes: -//! * Any type that has the "FromStr" trait can be serialized into a string with -//! serializers::primitives::string. -//! * serializers::bytes::* deserializes a null value into an empty vec![]. - -pub mod bytes; -pub mod from_str; -pub mod time_duration; - -mod raw_commit_sig; -pub(crate) use raw_commit_sig::BlockIDFlag; -pub(crate) use raw_commit_sig::RawCommitSig; - -#[cfg(test)] -mod tests; +pub use tendermint_proto::serializers::*; -mod custom; -pub use custom::null_as_default; -pub use custom::parse_non_empty_block_id; -pub use custom::parse_non_empty_hash; +pub mod apphash; +pub mod hash; +pub mod option_hash; +pub mod time; diff --git a/tendermint/src/serializers/apphash.rs b/tendermint/src/serializers/apphash.rs new file mode 100644 index 000000000..7fca8b261 --- /dev/null +++ b/tendermint/src/serializers/apphash.rs @@ -0,0 +1,24 @@ +//! AppHash serialization with validation + +use crate::AppHash; +use serde::{Deserialize, Deserializer, Serializer}; +use subtle_encoding::hex; + +/// Deserialize hexstring into AppHash +pub fn deserialize<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let hexstring: String = Option::::deserialize(deserializer)?.unwrap_or_default(); + AppHash::from_hex_upper(hexstring.as_str()).map_err(serde::de::Error::custom) +} + +/// Serialize from AppHash into hexstring +pub fn serialize(value: &AppHash, serializer: S) -> Result +where + S: Serializer, +{ + let hex_bytes = hex::encode_upper(value.as_ref()); + let hex_string = String::from_utf8(hex_bytes).map_err(serde::ser::Error::custom)?; + serializer.serialize_str(&hex_string) +} diff --git a/tendermint/src/serializers/custom.rs b/tendermint/src/serializers/custom.rs deleted file mode 100644 index e9341d29c..000000000 --- a/tendermint/src/serializers/custom.rs +++ /dev/null @@ -1,66 +0,0 @@ -//! Custom, legacy serializers - -use crate::{block, Hash}; -use serde::{de::Error as _, Deserialize, Deserializer}; -use std::str::FromStr; - -// Todo: Refactor the "Option"-based serializers below. -// Most of them are not needed if the structs are defined well (with enums). - -/// Option deserialization -pub fn parse_non_empty_hash<'de, D>(deserializer: D) -> Result, D::Error> -where - D: Deserializer<'de>, -{ - let o: Option = Option::deserialize(deserializer)?; - match o.filter(|s| !s.is_empty()) { - None => Ok(None), - Some(s) => Ok(Some( - Hash::from_str(&s).map_err(|err| D::Error::custom(format!("{}", err)))?, - )), - } -} - -/// Parse empty block id as None. -pub fn parse_non_empty_block_id<'de, D>(deserializer: D) -> Result, D::Error> -where - D: Deserializer<'de>, -{ - #[derive(Deserialize)] - struct PartSetHeader { - total: u32, - hash: String, - } - #[derive(Deserialize)] - struct BlockId { - hash: String, - part_set_header: PartSetHeader, - } - if let Some(tmp_id) = >::deserialize(deserializer)? { - if tmp_id.hash.is_empty() { - Ok(None) - } else { - Ok(Some(block::Id { - hash: Hash::from_str(&tmp_id.hash) - .map_err(|err| D::Error::custom(format!("{}", err)))?, - part_set_header: block::parts::Header { - total: tmp_id.part_set_header.total, - hash: Hash::from_str(&tmp_id.part_set_header.hash) - .map_err(|err| D::Error::custom(format!("{}", err)))?, - }, - })) - } - } else { - Ok(None) - } -} - -/// Parse null as default -pub fn null_as_default<'de, D, T: Default + Deserialize<'de>>( - deserializer: D, -) -> Result -where - D: Deserializer<'de>, -{ - Ok(>::deserialize(deserializer)?.unwrap_or_default()) -} diff --git a/tendermint/src/serializers/hash.rs b/tendermint/src/serializers/hash.rs new file mode 100644 index 000000000..abc349da8 --- /dev/null +++ b/tendermint/src/serializers/hash.rs @@ -0,0 +1,24 @@ +//! Hash serialization with validation + +use crate::{hash::Algorithm, Hash}; +use serde::{Deserialize, Deserializer, Serializer}; +use subtle_encoding::hex; + +/// Deserialize hexstring into Hash +pub fn deserialize<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let hexstring: String = Option::::deserialize(deserializer)?.unwrap_or_default(); + Hash::from_hex_upper(Algorithm::Sha256, hexstring.as_str()).map_err(serde::de::Error::custom) +} + +/// Serialize from Hash into hexstring +pub fn serialize(value: &Hash, serializer: S) -> Result +where + S: Serializer, +{ + let hex_bytes = hex::encode_upper(value.as_bytes()); + let hex_string = String::from_utf8(hex_bytes).map_err(serde::ser::Error::custom)?; + serializer.serialize_str(&hex_string) +} diff --git a/tendermint/src/serializers/option_hash.rs b/tendermint/src/serializers/option_hash.rs new file mode 100644 index 000000000..5bebb4c3d --- /dev/null +++ b/tendermint/src/serializers/option_hash.rs @@ -0,0 +1,25 @@ +//! Option serialization with validation + +use super::hash; +use crate::Hash; +use serde::{Deserializer, Serializer}; + +/// Deserialize hexstring into Option +pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + hash::deserialize(deserializer).map(Some) +} + +/// Serialize from Option into hexstring +pub fn serialize(value: &Option, serializer: S) -> Result +where + S: Serializer, +{ + if value.is_none() { + serializer.serialize_none() + } else { + hash::serialize(&value.unwrap(), serializer) + } +} diff --git a/tendermint/src/serializers/raw_commit_sig.rs b/tendermint/src/serializers/raw_commit_sig.rs deleted file mode 100644 index 52241c8a0..000000000 --- a/tendermint/src/serializers/raw_commit_sig.rs +++ /dev/null @@ -1,62 +0,0 @@ -//! RawCommitSig type for deserialization -use crate::{account, Signature, Time}; -use serde::de::Error; -use serde::{Deserialize, Deserializer, Serialize}; -use serde_repr::{Deserialize_repr, Serialize_repr}; -use std::str::FromStr; - -// Implements decision: https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-025-commit.md#decision - -/// indicate which BlockID the signature is for -#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug)] -#[repr(u8)] -pub enum BlockIDFlag { - /// vote is not included in the Commit.Precommits - Absent = 1, - /// voted for the Commit.BlockID - Commit = 2, - /// voted for nil - Nil = 3, -} - -/// RawCommitSig struct for interim deserialization of JSON object -#[derive(Deserialize, Serialize)] -pub struct RawCommitSig { - /// indicate which BlockID the signature is for - pub block_id_flag: BlockIDFlag, - /// Validator Address - // Todo: https://github.com/informalsystems/tendermint-rs/issues/260 - CommitSig validator address missing in Absent vote - #[serde(default, deserialize_with = "emptystring_or_accountid")] - pub validator_address: Option, - /// Timestamp - #[serde(default)] - pub timestamp: Option