From df231ed6bfcf4a2c37f4d1ab9f7756e9803c6621 Mon Sep 17 00:00:00 2001 From: Mikhail Zabaluev Date: Fri, 26 Nov 2021 19:12:03 +0200 Subject: [PATCH 01/58] Update to deprecations in ed25519 1.3 (#1024) --- .../improvements/1023-ed25519-deprecations.md | 3 +++ tendermint/Cargo.toml | 2 +- tendermint/src/proposal.rs | 16 +++++----------- tendermint/src/signature.rs | 5 ++++- tendermint/src/test.rs | 7 +++++++ tendermint/src/vote.rs | 12 +++++++----- tendermint/src/vote/sign_vote.rs | 4 ++-- testgen/src/vote.rs | 4 ++-- 8 files changed, 31 insertions(+), 22 deletions(-) create mode 100644 .changelog/unreleased/improvements/1023-ed25519-deprecations.md diff --git a/.changelog/unreleased/improvements/1023-ed25519-deprecations.md b/.changelog/unreleased/improvements/1023-ed25519-deprecations.md new file mode 100644 index 000000000..375daa0e4 --- /dev/null +++ b/.changelog/unreleased/improvements/1023-ed25519-deprecations.md @@ -0,0 +1,3 @@ +- `[tendermint]` Deprecated `signature::ED25519_SIGNATURE_SIZE` + in favor of `Ed25519Signature::BYTE_SIZE` + ([#1023](https://github.com/informalsystems/tendermint-rs/issues/1023)) \ No newline at end of file diff --git a/tendermint/Cargo.toml b/tendermint/Cargo.toml index d29e95fdf..1ac31a315 100644 --- a/tendermint/Cargo.toml +++ b/tendermint/Cargo.toml @@ -36,7 +36,7 @@ crate-type = ["cdylib", "rlib"] async-trait = { version = "0.1", default-features = false } bytes = { version = "1.0", default-features = false } chrono = { version = "0.4.19", default-features = false, features = ["serde"] } -ed25519 = { version = "1", default-features = false } +ed25519 = { version = "1.3", default-features = false } ed25519-dalek = { version = "1", default-features = false, features = ["u64_backend"] } futures = { version = "0.3", default-features = false } num-traits = { version = "0.2", default-features = false } diff --git a/tendermint/src/proposal.rs b/tendermint/src/proposal.rs index 3140f3248..4f266a9b9 100644 --- a/tendermint/src/proposal.rs +++ b/tendermint/src/proposal.rs @@ -121,8 +121,8 @@ mod tests { use crate::hash::{Algorithm, Hash}; use crate::prelude::*; use crate::proposal::SignProposalRequest; - use crate::signature::{Ed25519Signature, ED25519_SIGNATURE_SIZE}; - use crate::{proposal::Type, Proposal, Signature}; + use crate::test::dummy_signature; + use crate::{proposal::Type, Proposal}; use chrono::{DateTime, Utc}; use core::str::FromStr; use tendermint_proto::Protobuf; @@ -152,9 +152,7 @@ mod tests { .unwrap(), }), timestamp: Some(dt.into()), - signature: Some(Signature::from(Ed25519Signature::new( - [0; ED25519_SIGNATURE_SIZE], - ))), + signature: Some(dummy_signature()), }; let mut got = vec![]; @@ -236,9 +234,7 @@ mod tests { .unwrap(), }), timestamp: Some(dt.into()), - signature: Some(Signature::from(Ed25519Signature::new( - [0; ED25519_SIGNATURE_SIZE], - ))), + signature: Some(dummy_signature()), }; let mut got = vec![]; @@ -322,9 +318,7 @@ mod tests { ) .unwrap(), }), - signature: Some(Signature::from(Ed25519Signature::new( - [0; ED25519_SIGNATURE_SIZE], - ))), + signature: Some(dummy_signature()), }; let want = SignProposalRequest { proposal, diff --git a/tendermint/src/signature.rs b/tendermint/src/signature.rs index 63b5e1327..d4cfb8162 100644 --- a/tendermint/src/signature.rs +++ b/tendermint/src/signature.rs @@ -1,6 +1,6 @@ //! Cryptographic (a.k.a. digital) signatures -pub use ed25519::{Signature as Ed25519Signature, SIGNATURE_LENGTH as ED25519_SIGNATURE_SIZE}; +pub use ed25519::Signature as Ed25519Signature; pub use signature::{Signer, Verifier}; #[cfg(feature = "secp256k1")] @@ -12,6 +12,9 @@ use tendermint_proto::Protobuf; use crate::error::Error; +#[deprecated(since = "0.23.1", note = "use Ed25519Signature::BYTE_SIZE instead")] +pub const ED25519_SIGNATURE_SIZE: usize = Ed25519Signature::BYTE_SIZE; + /// The expected length of all currently supported signatures, in bytes. pub const SIGNATURE_LENGTH: usize = 64; diff --git a/tendermint/src/test.rs b/tendermint/src/test.rs index fc8c868bb..ef6a6eac8 100644 --- a/tendermint/src/test.rs +++ b/tendermint/src/test.rs @@ -1,6 +1,8 @@ use core::fmt::Debug; use serde::{de::DeserializeOwned, Serialize}; +use crate::signature::{Ed25519Signature, Signature}; + /// Test that a struct `T` can be: /// /// - parsed out of the provided JSON data @@ -25,3 +27,8 @@ where assert_eq!(parsed0, parsed1); } + +/// Produces a dummy signature value for use as a placeholder in tests. +pub fn dummy_signature() -> Signature { + Signature::from(Ed25519Signature::from_bytes(&[0; Ed25519Signature::BYTE_SIZE]).unwrap()) +} diff --git a/tendermint/src/vote.rs b/tendermint/src/vote.rs index a888b0b37..1c364df07 100644 --- a/tendermint/src/vote.rs +++ b/tendermint/src/vote.rs @@ -15,8 +15,6 @@ use core::fmt; use core::str::FromStr; use bytes::BufMut; -use ed25519::Signature as Ed25519Signature; -use ed25519::SIGNATURE_LENGTH as ED25519_SIGNATURE_LENGTH; use serde::{Deserialize, Serialize}; use tendermint_proto::types::Vote as RawVote; @@ -27,6 +25,7 @@ use crate::consensus::State; use crate::error::Error; use crate::hash; use crate::prelude::*; +use crate::signature::Ed25519Signature; use crate::{account, block, Signature, Time}; /// Votes are signed messages from validators for a particular block which @@ -159,6 +158,7 @@ impl Vote { } /// Default trait. Used in tests. +// FIXME: Does it need to be in public crate API? If not, replace with a helper fn in crate::test? impl Default for Vote { fn default() -> Self { Vote { @@ -169,9 +169,11 @@ impl Default for Vote { timestamp: Some(Time::unix_epoch()), validator_address: account::Id::new([0; account::LENGTH]), validator_index: ValidatorIndex::try_from(0_i32).unwrap(), - signature: Some(Signature::from(Ed25519Signature::new( - [0; ED25519_SIGNATURE_LENGTH], - ))), + // Could have reused crate::test::dummy_signature, except that + // this Default impl is defined outside of #[cfg(test)]. + signature: Some(Signature::from( + Ed25519Signature::from_bytes(&[0; Ed25519Signature::BYTE_SIZE]).unwrap(), + )), } } } diff --git a/tendermint/src/vote/sign_vote.rs b/tendermint/src/vote/sign_vote.rs index 28347a2b7..a048c8b92 100644 --- a/tendermint/src/vote/sign_vote.rs +++ b/tendermint/src/vote/sign_vote.rs @@ -98,7 +98,7 @@ mod tests { use crate::chain::Id as ChainId; use crate::hash::Algorithm; use crate::prelude::*; - use crate::signature::{Signature, ED25519_SIGNATURE_SIZE}; + use crate::signature::{Ed25519Signature, Signature}; use crate::vote::{CanonicalVote, ValidatorIndex}; use crate::vote::{SignVoteRequest, Type}; use crate::Hash; @@ -429,7 +429,7 @@ mod tests { ) .unwrap(), }), - signature: Signature::new(vec![1; ED25519_SIGNATURE_SIZE]).unwrap(), + signature: Signature::new(vec![1; Ed25519Signature::BYTE_SIZE]).unwrap(), }; let want = SignVoteRequest { vote, diff --git a/testgen/src/vote.rs b/testgen/src/vote.rs index ed46ce0fe..4b5ad8d03 100644 --- a/testgen/src/vote.rs +++ b/testgen/src/vote.rs @@ -5,7 +5,7 @@ use simple_error::*; use std::convert::TryFrom; use tendermint::{ block::{self, parts::Header as PartSetHeader}, - signature::{Signature, Signer, ED25519_SIGNATURE_SIZE}, + signature::{Ed25519Signature, Signature, Signer}, vote, vote::ValidatorIndex, }; @@ -130,7 +130,7 @@ impl Generator for Vote { timestamp: Some(timestamp), validator_address: block_validator.address, validator_index: ValidatorIndex::try_from(validator_index as u32).unwrap(), - signature: Signature::new(vec![0_u8; ED25519_SIGNATURE_SIZE]) + signature: Signature::new(vec![0_u8; Ed25519Signature::BYTE_SIZE]) .map_err(|e| SimpleError::new(e.to_string()))?, }; From 9cd12b08615a55bcb26a104613a05354a6bac1d5 Mon Sep 17 00:00:00 2001 From: Mikhail Zabaluev Date: Fri, 26 Nov 2021 22:39:11 +0200 Subject: [PATCH 02/58] Fix up deprecation for ED25519_SIGNATURE_SIZE (#1032) 0.23.1 was released before #1023 or its backport to v0.23.x were merged. --- tendermint/src/signature.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tendermint/src/signature.rs b/tendermint/src/signature.rs index d4cfb8162..603745237 100644 --- a/tendermint/src/signature.rs +++ b/tendermint/src/signature.rs @@ -12,7 +12,7 @@ use tendermint_proto::Protobuf; use crate::error::Error; -#[deprecated(since = "0.23.1", note = "use Ed25519Signature::BYTE_SIZE instead")] +#[deprecated(since = "0.23.2", note = "use Ed25519Signature::BYTE_SIZE instead")] pub const ED25519_SIGNATURE_SIZE: usize = Ed25519Signature::BYTE_SIZE; /// The expected length of all currently supported signatures, in bytes. From 711ea34c22cfbe1ce1bcf36ccd0b62e9d5811ec0 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 26 Nov 2021 17:14:22 -0500 Subject: [PATCH 03/58] Update docs and repo config for new versioning approach (#1020) * Reformat readme Signed-off-by: Thane Thomson * Expand README to better reflect current repo state/goals Signed-off-by: Thane Thomson * Reformat contributing guidelines Signed-off-by: Thane Thomson * Add note about assigning oneself to an issue Signed-off-by: Thane Thomson * Clarify version/branch correlations Signed-off-by: Thane Thomson * Fix readme formatting Signed-off-by: Thane Thomson * Reorganize and deduplicate contributing guidelines Signed-off-by: Thane Thomson * Format ADR documentation Signed-off-by: Thane Thomson * Update GitHub issue/PR templates to accommodate new versioning Signed-off-by: Thane Thomson * Fix spelling of GitHub Signed-off-by: Thane Thomson * Add note on Tendermint Core version support Signed-off-by: Thane Thomson * Simplify GitHub templates Signed-off-by: Thane Thomson * Add version support matrix table to readme Signed-off-by: Thane Thomson * Remove mention of `dev` branch for now Signed-off-by: Thane Thomson * Fix versioning section and add note on pinning to patch version for v0.23.x Signed-off-by: Thane Thomson * Fix typo in ADR readme Signed-off-by: Thane Thomson --- .github/ISSUE_TEMPLATE/bug-report.md | 11 +- .github/ISSUE_TEMPLATE/enhancement.md | 10 +- .github/PULL_REQUEST_TEMPLATE.md | 11 +- CONTRIBUTING.md | 198 +++++++++++++------------- README.md | 83 +++++++---- docs/architecture/README.md | 32 ++--- docs/architecture/adr-template.md | 30 ++-- 7 files changed, 216 insertions(+), 159 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index d4e0c19b5..9d5d9db0c 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -3,13 +3,18 @@ name: Bug report about: Create a report to help us squash bugs! labels: bug --- + +Version(s) of tendermint-rs: + +### What went wrong? + -**Steps to reproduce** +### Steps to reproduce -**What's the definition of "done" for this issue?** +### Definition of "done" diff --git a/.github/ISSUE_TEMPLATE/enhancement.md b/.github/ISSUE_TEMPLATE/enhancement.md index b1ae83b08..d7f2238e4 100644 --- a/.github/ISSUE_TEMPLATE/enhancement.md +++ b/.github/ISSUE_TEMPLATE/enhancement.md @@ -3,6 +3,11 @@ name: Enhancement about: A request for a new feature, or to enhance existing functionality labels: enhancement --- + +Version(s) of tendermint-rs: + +### Description + -**What's the definition of "done" for this issue?** +### Definition of "done" diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c3c0debff..94b07728c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,8 +1,13 @@ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b0ae26611..963d88f2c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,75 +1,68 @@ # Contributing -Thank you for your interest in contributing to tendermint-rs. The goal -of tendermint-rs is to provide a high quality, formally verified implementation of -Tendermint. +Thank you for your interest in contributing to tendermint-rs! The goal of +tendermint-rs is to provide a high quality, formally verified interface to +[Tendermint]. -All work on the code base should be motivated by a Github -Issue. Search is a good place start when looking for places to contribute. If you -would like to work on an issue which already exists, please indicate so -by leaving a comment. If you'd like to work on something else, open an Issue to -start the discussion. +This document outlines the best practices for contributing to this repository: -The rest of this document outlines the best practices for contributing to this -repository: - -- [Decision Making](#decision-making) - process for agreeing to changes +- [Proposing Changes](#proposing-changes) - process for agreeing to changes - [Forking](#forking) - fork the repo to make pull requests - [Changelog](#changelog) - changes must be recorded in the changelog - [Pull Requests](#pull-requests) - what makes a good pull request - [Releases](#releases) - how our release process looks -## Decision Making +## Proposing Changes -When contributing to the project, the following process leads to the best chance of -landing the changes in master. +When contributing to the project, adhering to the following guidelines will +dramatically increase the likelihood of changes being accepted quickly. -All new contributions should start with a Github -Issue. The issue helps capture the problem you're trying to solve and allows for -early feedback. Once the issue is created, maintainers may request more detailed -documentation be written in the form of a Request for Comment (RFC) or -Architectural Decision Record -([ADR](https://github.com/informalsystems/tendermint-rs/blob/master/docs/architecture/README.md)). +### Create/locate and assign yourself to an issue -Discussion at the RFC stage will build collective understanding of the dimensions -of the problems and help structure conversations around trade-offs. +1. A good place to start is to search through the [existing + issues](https://github.com/informalsystems/tendermint-rs/issues) for the + problem you're encountering. +2. If no relevant issues exist, submit one describing the *problem* you're + facing, as well as a *definition of done*. A definition of done, which tells + us how to know when the issue can be closed, helps us to scope the problem + and give it definite boundaries. Without a definition of done, issues can + become vague, amorphous changesets that never really come to a satisfactory + conclusion. +3. Once the issue exists, *assign yourself to it*. If there's already someone + assigned to the issue, comment on the issue to ask if you can take it over, + or reach out directly to the current assignee. -When the problem is well understood but the solution leads to large -structural changes to the code base, these changes should be proposed in -the form of an [Architectural Decision Record -(ADR)](./docs/architecture/). The ADR will help build consensus on an -overall strategy to ensure the code base maintains coherence -in the larger context. If you are not comfortable with writing an ADR, -you can open a less-formal issue and the maintainers will help you -turn it into an ADR. +### Small PRs -TODO: ADR registration (eg. in an ADR registration issue) +We consider a PR to be "small" if it's under 100 lines' worth of meaningful code +changes, but we will accommodate PRs of up to about 300 lines. Only in +exceptional circumstances will we review larger PRs. -When the problem as well as proposed solution are well understood, -changes should start with a [draft -pull request](https://github.blog/2019-02-14-introducing-draft-pull-requests/) -against master. The draft signals that work is underway. When the work -is ready for feedback, hitting "Ready for Review" will signal to the -maintainers to take a look. +Keeping PRs small helps reduce maintainers' workloads, increases speed of +getting feedback, and prevents PRs from standing open for long periods of time. +If you need to make bigger changes, it's recommended that you plan out your +changes in smaller, more manageable chunks (e.g. one issue may take several PRs +to address). -Implementation trajectories should aim to proceed where possible as a series -of smaller incremental changes, in the form of small PRs that can be merged -quickly. This helps manage the load for reviewers and reduces the likelihood -that PRs will sit open for longer. +### ADRs -![Contributing -flow](https://github.com/tendermint/tendermint/blob/v0.33.6/docs/imgs/contributing.png) +If your proposed changes are large, complex, or involve substantial changes to +the architecture of one or more components, a maintainer may ask that you first +submit an [ADR](./docs/architecture/README.md) (architecture decision record) +before you start coding your solution. -Each stage of the process is aimed at creating feedback cycles which align contributors and maintainers to make sure: +ADRs are a way for us to keep track of *why* we've made specific architectural +changes over time. This is intended to help newcomers to the codebase understand +our current architecture and how it has evolved, as well as to help us not +repeat past mistakes. -- Contributors don’t waste their time implementing/proposing features which won’t land in `master`. -- Maintainers have the necessary context in order to support and review contributions. +If you need help with developing an ADR, feel free to ask us. ## Forking -If you do not have write access to the repository, your contribution should be -made through a fork on Github. Fork the repository, contribute to your fork, -and make a pull request back upstream. +If you do not have write access to the repository, your contribution should be +made through a fork on GitHub. Fork the repository, contribute to your fork, and +make a pull request back upstream. When forking, add your fork's URL as a new git remote in your local copy of the repo. For instance, to create a fork and work on a branch of it: @@ -77,10 +70,12 @@ repo. For instance, to create a fork and work on a branch of it: - Create the fork on GitHub, using the fork button. - `cd` to the original clone of the repo on your machine - `git remote rename origin upstream` -- `git remote add origin git@github.com: +- `git remote add origin git@github.com:` Now `origin` refers to your fork and `upstream` refers to this version. -Now `git push -u origin master` to update the fork, and make pull requests against this repo. + +`git push -u origin master` to update the fork, and make pull requests against +this repo. To pull in updates from the origin repo, run @@ -91,48 +86,43 @@ To pull in updates from the origin repo, run Every non-trivial PR must update the [CHANGELOG.md]. This is accomplished indirectly by adding entries to the `.changelog` folder in [unclog][unclog] -format. `CHANGELOG.md` will be built by whomever is responsible for performing -a release just prior to release - this is to avoid changelog conflicts prior to +format. `CHANGELOG.md` will be built by whomever is responsible for performing a +release just prior to release - this is to avoid changelog conflicts prior to releases. -The Changelog is *not* a record of what Pull Requests were merged; -the commit history already shows that. The Changelog is a notice to the user -about how their expectations of the software should be modified. -It is part of the UX of a release and is a *critical* user facing integration point. -The Changelog must be clean, inviting, and readable, with concise, meaningful entries. -Entries must be semantically meaningful to users. If a change takes multiple -Pull Requests to complete, it should likely have only a single entry in the -Changelog describing the net effect to the user. +The Changelog is *not* a record of which pull requests were merged; the commit +history already shows that. The Changelog is a notice to the user about how +their expectations of the software should be modified. It is part of the UX of +a release and is a *critical* user facing integration point. The Changelog must +be clean, inviting, and readable, with concise, meaningful entries. Entries +must be semantically meaningful to users. If a change takes multiple Pull +Requests to complete, it should likely have only a single entry in the Changelog +describing the net effect to the user. When writing Changelog entries, ensure they are targeting users of the software, not fellow developers. Developers have much more context and care about more -things than users do. Changelogs are for users. +things than users do. Changelogs are for users. -Changelog structure is modeled after -[Tendermint -Core](https://github.com/tendermint/tendermint/blob/master/CHANGELOG.md) -and +Changelog structure is modeled after [Tendermint +Core](https://github.com/tendermint/tendermint/blob/master/CHANGELOG.md) and [Hashicorp Consul](http://github.com/hashicorp/consul/tree/master/CHANGELOG.md). See those changelogs for examples. -Changes for a given release should be split between the five sections: Security, Breaking -Changes, Features, Improvements, Bug Fixes. +Changes for a given release should be split between the five sections: Security, +Breaking Changes, Features, Improvements, Bug Fixes. Changelog entries should be formatted as follows: + ``` -- [pkg] \#xxx Some description about the change (@contributor) +- `[pkg]` A description of the change with *users* in mind + ([#xxx](https://github.com/informalsystems/tendermint-rs/issues/xxx)) ``` -Here, `pkg` is the part of the code that changed (typically a -top-level crate, but could be /), `xxx` is the pull-request number, and `contributor` -is the author/s of the change. -It's also acceptable for `xxx` to refer to the relevent issue number, but pull-request -numbers are preferred. -Note this means pull-requests should be opened first so the changelog can then -be updated with the pull-request's number. +Here, `pkg` is the part of the code that changed, and `xxx` is the issue or +pull request number. -Changelog entries should be ordered alphabetically according to the -`pkg`, and numerically according to the pull-request number. +Changelog entries should be ordered alphabetically according to the `pkg`, and +numerically according to the issue/pull-request number. Changes with multiple classifications should be doubly included (eg. a bug fix that is also a breaking change should be recorded under both). @@ -140,16 +130,24 @@ that is also a breaking change should be recorded under both). Breaking changes are further subdivided according to the APIs/users they impact. Any change that effects multiple APIs/users should be recorded multiply - for instance, a change to some core protocol data structure might need to be -reflected both as breaking the core protocol but also breaking any APIs where core data structures are -exposed. +reflected both as breaking the core protocol but also breaking any APIs where +core data structures are exposed. ## Pull Requests -The master development branch is `master`. -Branch names should be prefixed with the author, eg. `name/feature-x`. +Pull requests are squash-merged into one of the following primary development +branches: + +- `master` - targeting compatibility with the [latest official release of + Tendermint](https://github.com/tendermint/tendermint/releases). +- tendermint-rs version-specific branches, e.g. `v0.23.x` - targeting patches to + older versions of tendermint-rs. -Pull requests are made against `master` -and are squash merged into master. +Indicate in your pull request which version of Tendermint/tendermint-rs you are +targeting with your changes. Changes to multiple versions will require separate +PRs. See the [README](./README.md#versioning) for the version support matrix. + +Branch names should be prefixed with the author, eg. `name/feature-x`. PRs must: @@ -157,10 +155,17 @@ PRs must: - update any relevant documentation and include tests. - update the [changelog](#changelog) with a description of the change -Pull requests should aim to be small and self contained to facilitate quick -review and merging. Larger change sets should be broken up across multiple PRs. -Commits should be concise but informative, and moderately clean. Commits will be squashed into a -single commit for the PR with all the commit messages. +Commits should be concise but informative, and moderately clean. Commits will be +squashed into a single commit for the PR with all the commit messages. + +### Draft PRs + +When the problem as well as proposed solution are well understood, changes +should start with a [draft pull +request](https://github.blog/2019-02-14-introducing-draft-pull-requests/) +against master. The draft signals that work is underway. When the work is ready +for feedback, hitting "Ready for Review" will signal to the maintainers to take +a look. Maintainers will not review draft PRs. ## Releases @@ -172,8 +177,8 @@ Our release process is as follows: in this release. 2. Running `unclog build > CHANGELOG.md` to update the changelog. 3. Committing this updated `CHANGELOG.md` file to the repo. -2. Push this to a branch `release/vX.Y.Z` according to the version number of - the anticipated release (e.g. `release/v0.17.0`) and open a **draft PR**. +2. Push this to a branch `release/vX.Y.Z` according to the version number of the + anticipated release (e.g. `release/v0.17.0`) and open a **draft PR**. 3. Bump all relevant versions in the codebase to the new version and push these changes to the release PR. This includes: 1. All `Cargo.toml` files (making sure dependencies' versions are updated @@ -184,13 +189,14 @@ Our release process is as follows: documentation compiles and seems up-to-date and coherent. Fix any potential issues here and push them to the release PR. 5. Mark the PR as **Ready for Review** and incorporate feedback on the release. -6. Once approved, run the [`release.sh`] script. Fix any problems that may - arise during this process and push the changes to the release PR. - This step requires the appropriate privileges to push crates to [crates.io]. -7. Once all crates have been successfully released, merge the PR to `master` - and tag the repo at the new version (e.g. `v0.17.0`). +6. Once approved, run the [`release.sh`] script. Fix any problems that may arise + during this process and push the changes to the release PR. This step + requires the appropriate privileges to push crates to [crates.io]. +7. Once all crates have been successfully released, merge the PR to `master` and + tag the repo at the new version (e.g. `v0.17.0`). [CHANGELOG.md]: https://github.com/informalsystems/tendermint-rs/blob/master/CHANGELOG.md [`release.sh`]: https://github.com/informalsystems/tendermint-rs/blob/master/release.sh [crates.io]: https://crates.io [unclog]: https://github.com/informalsystems/unclog +[Tendermint]: https://tendermint.com diff --git a/README.md b/README.md index 98f052ec5..c89e61c23 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# tendermint.rs +# tendermint-rs [![Crate][crate-image]][crate-link] [![Docs][docs-image]][docs-link] @@ -9,14 +9,39 @@ [Tendermint] in Rust with [TLA+ specifications](/docs/spec). -Tendermint is a high-performance blockchain consensus engine -for Byzantine fault tolerant applications written in any programming language. +Tendermint is a high-performance blockchain consensus engine for Byzantine fault +tolerant applications written in any programming language. ## Requirements Tested against the latest stable version of Rust. May work with older versions. -Compatible with the v0.34 series of [Tendermint Core][Tendermint]. +## Versioning + +Each of the following branches targets a specific version of [Tendermint +Core][Tendermint]: + +| tendermint-rs branch | tendermint-rs version | Tendermint version | +| -------------------- | --------------------- | ------------------ | +| `master` | v0.24.x | v0.35.x | +| `v0.23.x` | v0.23.x | v0.34.x | + +We will do our best to support one version behind the latest official release of +Tendermint Core (e.g. if v0.35.x is the latest release, we will aim to support +v0.34.x as well). + +### Semantic Versioning + +We do our best to follow [Semantic Versioning](https://semver.org/). However, as +we are pre-v1.0.0, we use the MINOR version to refer to breaking changes and the +PATCH version for features, improvements, and fixes. + +We use the same version for all crates and release them collectively. + +If you are using the v0.23.x series of tendermint-rs, however, **please pin your +dependencies to a specific patch version**. We may need to introduce breaking +changes to this series in patches (e.g. if critical security updates require +it), but we will do our best to avoid doing so. ## Documentation @@ -24,43 +49,38 @@ See each component for the relevant documentation. Libraries: -- [tendermint](./tendermint) - Tendermint data structures and - serialization -- [tendermint-rpc](./rpc) - Tendermint RPC client and - response types -- [light-client](./light-client) - Tendermint light client library for verifying - signed headers, tracking validator set changes, and detecting forks +- [tendermint](./tendermint) - Tendermint data structures and serialization +- [tendermint-abci](./abci) - A lightweight, low-level framework for building + Tendermint ABCI applications in Rust +- [tendermint-light-client](./light-client) - Tendermint light client library + for verifying signed headers, tracking validator set changes, and detecting + forks +- [tendermint-light-client-js](./light-client-js) - Low-level WASM interface for + interacting with the Tendermint light client verification functionality +- [tendermint-p2p](./p2p) - At present this primarily provides the ability to + connect to Tendermint nodes via Tendermint's [secret + connection](tendermint-secret-conn). +- [tendermint-proto](./proto) - Protobuf data structures (generated using Prost) + for wire-level interaction with Tendermint +- [tendermint-rpc](./rpc) - Tendermint RPC client and response types ## Releases -Release tags can be found on [Github](https://github.com/informalsystems/tendermint-rs/releases). +Release tags can be found on +[GitHub](https://github.com/informalsystems/tendermint-rs/releases). -Crates are released on crates.io. +Crates are released on [crates.io](https://crates.io). ## Contributing -The Tendermint protocols are specified in English in the -[tendermint/spec repo](https://github.com/tendermint/spec). -Any protocol changes or clarifications should be contributed there. +The Tendermint protocols are specified in English in the [tendermint/spec +repo](https://github.com/tendermint/spec). Any protocol changes or +clarifications should be contributed there. -This repo contains the TLA+ specifications and Rust implementations for -various components of Tendermint. See the [CONTRIBUTING.md][contributing] to start +This repo contains the TLA+ specifications and Rust implementations for various +components of Tendermint. See the [CONTRIBUTING.md][contributing] to start contributing. -## Versioning - -We follow [Semantic Versioning](https://semver.org/). However, as we are -pre-v1.0.0, we use the MINOR version to refer to breaking changes and the PATCH -version for features, improvements, and fixes. - -Only the following crates are covered by SemVer guarantees: - -- tendermint -- tendermint-rpc - -Other crates may change arbitrarily with every release for now. - -We use the same version for all crates and release them collectively. ## Resources @@ -111,4 +131,5 @@ limitations under the License. [tendermint-rpc-docs-link]: https://docs.rs/tendermint-rpc/ [Tendermint]: https://github.com/tendermint/tendermint [tendermint-light-client-docs-link]: https://docs.rs/tendermint-light-client/ +[tendermint-secret-conn]: https://docs.tendermint.com/master/spec/p2p/peer.html#authenticated-encryption-handshake [contributing]: ./CONTRIBUTING.md diff --git a/docs/architecture/README.md b/docs/architecture/README.md index 9d4e4dd0f..e7a894577 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -1,30 +1,30 @@ # Architecture Decision Records (ADR) -This is a location to record all high-level architecture decisions in the Tendermint-RS project. +This is a location to record all high-level architecture decisions in the +tendermint-rs project. -You can read more about the ADR concept in this [blog post](https://product.reverb.com/documenting-architecture-decisions-the-reverb-way-a3563bb24bd0#.78xhdix6t). +You can read more about the ADR concept in this [blog +post](https://product.reverb.com/documenting-architecture-decisions-the-reverb-way-a3563bb24bd0#.78xhdix6t). An ADR should provide: -- Context on the relevant goals and the current state -- Proposed changes to achieve the goals -- Summary of pros and cons +- Context on the relevant goals and the current state to explain why a decision + must be made now +- The decision that will allow us to achieve the goals +- Summary of pros and cons if we make the decision - References - Changelog -Note the distinction between an ADR and a spec. The ADR provides the context, intuition, reasoning, and -justification for a change in architecture, or for the architecture of something -new. The spec is much more compressed and streamlined summary of everything as -it is or should be. +Note the distinction between an ADR and a spec. The ADR provides the context, +intuition, reasoning, and justification for a change in architecture, or for the +architecture of something new. The spec is a much more compressed and +streamlined summary of everything as it is or should be. -If recorded decisions turned out to be lacking, convene a discussion, record the new decisions here, and then modify the code to match. +If recorded decisions turned out to be lacking, convene a discussion, record the +new decisions here, and then modify the code to match. Note the context/background should be written in the present tense. -To suggest an ADR, please make use of the [ADR template](./adr-template.md) provided. +To suggest an ADR, please make use of the [ADR template](./adr-template.md) +provided. -## Table of Contents - -| ADR \# | Description | Status | -| ------ | ----------- | ------ | -| [001](./adr-001-repo.md) | Repository structure for `tendermint-rs` | Proposed | diff --git a/docs/architecture/adr-template.md b/docs/architecture/adr-template.md index 28a5ecfbb..a048a7034 100644 --- a/docs/architecture/adr-template.md +++ b/docs/architecture/adr-template.md @@ -1,27 +1,40 @@ # ADR {ADR-NUMBER}: {TITLE} ## Changelog + * {date}: {changelog} ## Context -> This section contains all the context one needs to understand the current state, and why there is a problem. It should be as succinct as possible and introduce the high level idea behind the solution. +> This section contains all the context one needs to understand the current +> state, why there is a problem, and why a decision needs to be made now. It +> should be as succinct as possible and introduce the high level idea behind the +> solution. + ## Decision -> This section explains all of the details of the proposed solution, including implementation details. -It should also describe affects / corollary items that may need to be changed as a part of this. -If the proposed change will be large, please also indicate a way to do the change to maximize ease of review. -(e.g. the optimal split of things to do between separate PR's) +> This section explains all of the details of the proposed solution, including +> implementation details. It should also describe affects / corollary items that +> may need to be changed as a part of this. If the proposed change will be +> large, please also indicate a way to do the change to maximize ease of review. +> (e.g. the optimal split of things to do between separate PRs) +> +> Hint: focus primarily on desired changes to the **user experience** that you +> want to make (e.g. how the developers will need to change the way they use a +> particular API or interface). ## Status -> A decision may be "proposed" if it hasn't been agreed upon yet, or "accepted" once it is agreed upon. If a later ADR changes or reverses a decision, it may be marked as "deprecated" or "superseded" with a reference to its replacement. +> A decision may be "proposed" if it hasn't been agreed upon yet, or "accepted" +> once it is agreed upon. If a later ADR changes or reverses a decision, it may +> be marked as "deprecated" or "superseded" with a reference to its replacement. {Deprecated|Proposed|Accepted} ## Consequences -> This section describes the consequences, after applying the decision. All consequences should be summarized here, not just the "positive" ones. +> This section describes the consequences, after applying the decision. All +> consequences should be summarized here, not just the "positive" ones. ### Positive @@ -31,6 +44,7 @@ If the proposed change will be large, please also indicate a way to do the chang ## References -> Are there any relevant PR comments, issues that led up to this, or articles referrenced for why we made the given design choice? If so link them here! +> Are there any relevant PR comments, issues that led up to this, or articles +> referenced for why we made the given design choice? If so link them here! * {reference link} From 0b52addc2b10951053cc4e33ab163168c923c3cc Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Sat, 27 Nov 2021 13:59:36 -0500 Subject: [PATCH 04/58] Add domain types (updated) and fix integration tests for Tendermint v0.35.0 (#1022) * tendermint: add From for Error * Use hex for AppHash Debug formatting * Regenerate protobuf types using tools/proto-compiler. * Regenerate protos against tendermint v0.35.0-rc3. * Remove SetOption-related code in tendermint-abci. * Update imports to reflect protobuf movements. The BlockParams and ConsensusParams structs moved out of the ABCI protos. * Update tendermint-abci to reflect upstream proto changes. * p2p: treat all non-Ed25519 keys as unsupported This fixes a compile error introduced by upstream proto changes that add an Sr25519 variant. * Improve ABCI response code modeling with NonZeroU32 The previous data modeling allowed a user to construct an `Err(0)` value that would be serialized and deserialized as `Ok`. * Use the Bytes type in ABCI protos. * Add conversions between protobuf and chrono types. * tendermint: define Serde for Block in terms of RawBlock This changes the Serialize/Deserialize implementations for Block to convert to/from the proto-generated `RawBlock`, and use the derived serialization for that type. This is much cleaner and more maintainable than keeping Serde annotations for each sub-member of the data structure, because all of the serialization code is kept in one place, and there's only one validation path (the TryFrom conversion from RawBlock to Block) that applies to both kinds of serialization. * tendermint: simpler transaction modeling in Block This changes the Block type to hold the transactions as a plain `Vec>`, rather than as a custom `abci::transaction::Data` type (which is itself a wrapper for an `Option>`, the `Transaction` type being a wrapper for a `Vec`). This also updates the `Block` getter functions; it's not clear (to me) why they're there, since they access the public fields and aren't used anywhere else. * rpc: take over tendermint::abci The existing contents of the `tendermint::abci` module note that they're only for the purpose of implementing the RPC endpoints, not a general ABCI implementation. Moving that code from the `tendermint` crate to the `tendermint-rpc` crate decouples the RPC interface from improvements to the ABCI domain modeling. Eventually, it would be good to eliminate this code and align it with the new ABCI domain types. * tendermint: add ABCI domain types. These types mirror the generated types in tendermint_proto, but have better naming. The documentation for each request type is adapted from the ABCI Methods and Types spec document. However, the same logical request may appear three times, as a struct with the request data, as a Request variant, and as a CategoryRequest variant. To avoid duplication, this PR uses the `#[doc = include_str!(...)]` functionality stabilized in Rust 1.54 to keep common definitions of the documentation. * tendermint: eliminate &'static str errors in ABCI domain types. * Merge `abci::params::ConsensusParams` with `consensus::Params`. The code in the `abci` module had more complete documentation from the ABCI docs, so I copied it onto the existing structure. * Add hex encoding Serde attribute to Sr25519 keys. * Replace integers with `block::Height`, `vote::Power` * Replace integer with block::Round * Fix tools build by using correct imports Signed-off-by: Thane Thomson * Fix clippy complaints in tools Signed-off-by: Thane Thomson * Fix clippy warning Signed-off-by: Thane Thomson * Fix clippy lints Signed-off-by: Thane Thomson * Fix more clippy lints Signed-off-by: Thane Thomson * Fix deprecation notices from ed25519 crate Signed-off-by: Thane Thomson * Regenerate protos for Tendermint v0.35.0 Signed-off-by: Thane Thomson * Fix raw bytes conversion in tests/docs Signed-off-by: Thane Thomson * Add Tendermint v0.35.0 Docker config Signed-off-by: Thane Thomson * Add Tendermint v0.35.0 Docker image for ABCI integration testing Signed-off-by: Thane Thomson * Remove RPC deserialization tests The support files for these tests were manually generated some time ago. We should rather favour testing with the `kvstore_fixtures` tests, whose fixtures are automatically generated by our rpc-probe tool. Signed-off-by: Thane Thomson * Reformat Docker folder readme Signed-off-by: Thane Thomson * Bump version of Tendermint used in ABCI integration test Signed-off-by: Thane Thomson * Bump version of Tendermint used in rpc probe Signed-off-by: Thane Thomson * Bump version of Tendermint used in kvstore integration test Signed-off-by: Thane Thomson * Bump version of Tendermint used in proto-compiler Signed-off-by: Thane Thomson * Regenerate kvstore fixtures with rpc-probe for Tendermint v0.35.0 Signed-off-by: Thane Thomson * Update kvstore integration test to accommodate newly generated fixtures Signed-off-by: Thane Thomson * Update RPC tests and data structures to accommodate Tendermint v0.35.0 changes Signed-off-by: Thane Thomson * Update ABCI encoding scheme to accommodate breaking change in https://github.com/tendermint/tendermint/issues/5783 Signed-off-by: Thane Thomson * Bump Tendermint version in GitHub Actions kvstore integration test Signed-off-by: Thane Thomson * Add changelog entries to capture breaking changes Signed-off-by: Thane Thomson * Change tx hash encoding from base64 to hex and update tests Signed-off-by: Thane Thomson * Add changelog entry for /tx endpoint change Signed-off-by: Thane Thomson Co-authored-by: Henry de Valence Co-authored-by: Henry de Valence --- .../breaking-changes/862-035-tendermint.md | 2 + .../breaking-changes/862-abci-domain-types.md | 2 + .../862-abci-wire-protocol.md | 3 + .../breaking-changes/862-rpc-event-events.md | 5 + .../breaking-changes/862-rpc-tx-hash-hex.md | 3 + .github/workflows/test.yml | 2 +- abci/src/application.rs | 11 +- abci/src/application/kvstore.rs | 43 +- abci/src/client.rs | 12 +- abci/src/codec.rs | 17 +- abci/tests/kvstore_app.rs | 6 +- light-client/src/evidence.rs | 2 +- light-client/src/tests.rs | 2 +- p2p/src/secret_connection.rs | 2 +- proto/Cargo.toml | 2 +- proto/src/chrono.rs | 53 + proto/src/lib.rs | 1 + proto/src/prost/tendermint.abci.rs | 193 +- ....blockchain.rs => tendermint.blocksync.rs} | 0 proto/src/prost/tendermint.crypto.rs | 5 +- proto/src/prost/tendermint.p2p.rs | 85 +- proto/src/prost/tendermint.privval.rs | 10 + proto/src/prost/tendermint.statesync.rs | 32 +- proto/src/prost/tendermint.store.rs | 7 - proto/src/prost/tendermint.types.rs | 136 +- proto/src/prost/tendermint.version.rs | 10 - proto/src/tendermint.rs | 10 +- rpc/Cargo.toml | 1 + rpc/src/abci.rs | 34 + {tendermint => rpc}/src/abci/code.rs | 12 +- {tendermint => rpc}/src/abci/data.rs | 2 +- {tendermint => rpc}/src/abci/gas.rs | 2 +- {tendermint => rpc}/src/abci/info.rs | 0 {tendermint => rpc}/src/abci/log.rs | 0 {tendermint => rpc}/src/abci/path.rs | 2 +- {tendermint => rpc}/src/abci/responses.rs | 2 +- {tendermint => rpc}/src/abci/tag.rs | 32 +- {tendermint => rpc}/src/abci/transaction.rs | 0 .../src/abci/transaction/hash.rs | 2 +- rpc/src/client.rs | 2 +- rpc/src/client/bin/main.rs | 3 +- rpc/src/client/transport/mock.rs | 24 +- rpc/src/client/transport/router.rs | 10 +- rpc/src/client/transport/websocket.rs | 14 +- rpc/src/endpoint/abci_info.rs | 7 +- rpc/src/endpoint/abci_query.rs | 2 +- rpc/src/endpoint/block_results.rs | 3 +- rpc/src/endpoint/broadcast/tx_async.rs | 2 +- rpc/src/endpoint/broadcast/tx_commit.rs | 8 +- rpc/src/endpoint/broadcast/tx_sync.rs | 2 +- rpc/src/endpoint/evidence.rs | 3 +- rpc/src/endpoint/net_info.rs | 2 +- rpc/src/endpoint/tx.rs | 8 +- rpc/src/event.rs | 9 +- rpc/src/lib.rs | 1 + rpc/tests/kvstore_fixtures.rs | 266 +- .../kvstore_fixtures/incoming/abci_info.json | 4 +- .../abci_query_with_existing_key.json | 4 +- .../abci_query_with_non_existent_key.json | 4 +- .../incoming/block_at_height_0.json | 8 +- .../incoming/block_at_height_1.json | 14 +- .../incoming/block_at_height_10.json | 30 +- .../incoming/block_results_at_height_10.json | 3 +- .../incoming/block_search.json | 546 +- .../incoming/blockchain_from_1_to_10.json | 188 +- .../incoming/broadcast_tx_async.json | 5 +- .../incoming/broadcast_tx_commit.json | 25 +- .../incoming/broadcast_tx_sync.json | 5 +- .../incoming/commit_at_height_10.json | 28 +- .../incoming/consensus_params.json | 9 +- .../incoming/consensus_state.json | 8 +- .../kvstore_fixtures/incoming/genesis.json | 12 +- .../kvstore_fixtures/incoming/net_info.json | 4 +- .../kvstore_fixtures/incoming/status.json | 34 +- .../incoming/subscribe_malformed.json | 2 +- .../incoming/subscribe_newblock_0.json | 59 +- .../incoming/subscribe_newblock_1.json | 57 +- .../incoming/subscribe_newblock_2.json | 57 +- .../incoming/subscribe_newblock_3.json | 57 +- .../incoming/subscribe_newblock_4.json | 57 +- .../incoming/subscribe_txs.json | 2 +- .../incoming/subscribe_txs_0.json | 103 +- .../incoming/subscribe_txs_1.json | 103 +- .../incoming/subscribe_txs_2.json | 103 +- .../incoming/subscribe_txs_3.json | 103 +- .../incoming/subscribe_txs_4.json | 103 +- .../subscribe_txs_broadcast_tx_0.json | 5 +- .../subscribe_txs_broadcast_tx_1.json | 5 +- .../subscribe_txs_broadcast_tx_2.json | 5 +- .../subscribe_txs_broadcast_tx_3.json | 5 +- .../subscribe_txs_broadcast_tx_4.json | 5 +- .../subscribe_txs_broadcast_tx_5.json | 5 +- .../incoming/{tx.json => tx_no_prove.json} | 26 +- .../kvstore_fixtures/incoming/tx_prove.json | 58 + .../incoming/tx_search_no_prove.json | 146 +- .../incoming/tx_search_with_prove.json | 146 +- .../kvstore_fixtures/outgoing/abci_info.json | 2 +- .../abci_query_with_existing_key.json | 2 +- .../abci_query_with_non_existent_key.json | 2 +- .../outgoing/block_at_height_0.json | 2 +- .../outgoing/block_at_height_1.json | 2 +- .../outgoing/block_at_height_10.json | 2 +- .../outgoing/block_results_at_height_10.json | 2 +- .../outgoing/block_search.json | 2 +- .../outgoing/blockchain_from_1_to_10.json | 2 +- .../outgoing/broadcast_tx_async.json | 2 +- .../outgoing/broadcast_tx_commit.json | 2 +- .../outgoing/broadcast_tx_sync.json | 2 +- .../outgoing/commit_at_height_10.json | 2 +- .../outgoing/consensus_params.json | 2 +- .../outgoing/consensus_state.json | 2 +- .../kvstore_fixtures/outgoing/genesis.json | 2 +- .../kvstore_fixtures/outgoing/net_info.json | 2 +- .../kvstore_fixtures/outgoing/status.json | 2 +- .../outgoing/subscribe_malformed.json | 2 +- .../outgoing/subscribe_newblock.json | 2 +- .../outgoing/subscribe_txs.json | 2 +- .../subscribe_txs_broadcast_tx_0.json | 2 +- .../subscribe_txs_broadcast_tx_1.json | 2 +- .../subscribe_txs_broadcast_tx_2.json | 2 +- .../subscribe_txs_broadcast_tx_3.json | 2 +- .../subscribe_txs_broadcast_tx_4.json | 2 +- .../subscribe_txs_broadcast_tx_5.json | 2 +- rpc/tests/kvstore_fixtures/outgoing/tx.json | 9 - .../outgoing/tx_no_prove.json | 9 + .../kvstore_fixtures/outgoing/tx_prove.json | 9 + .../outgoing/tx_search_no_prove.json | 2 +- .../outgoing/tx_search_with_prove.json | 2 +- rpc/tests/parse_response.rs | 512 - rpc/tests/support/abci_info.json | 13 - rpc/tests/support/abci_query.json | 28 - rpc/tests/support/block.json | 65 - rpc/tests/support/block_empty_block_id.json | 120 - rpc/tests/support/block_results.json | 118 - rpc/tests/support/block_with_evidences.json | 112 - rpc/tests/support/blockchain.json | 389 - rpc/tests/support/broadcast_tx_async.json | 10 - rpc/tests/support/broadcast_tx_commit.json | 104 - .../broadcast_tx_commit_null_data.json | 18 - rpc/tests/support/broadcast_tx_sync.json | 10 - rpc/tests/support/broadcast_tx_sync_int.json | 10 - rpc/tests/support/commit.json | 53 - rpc/tests/support/commit_1.json | 53 - rpc/tests/support/consensus_state.json | 32 - rpc/tests/support/error.json | 9 - rpc/tests/support/event_new_block_1.json | 73 - rpc/tests/support/event_new_block_2.json | 73 - rpc/tests/support/event_new_block_3.json | 73 - rpc/tests/support/first_block.json | 58 - rpc/tests/support/genesis.json | 19185 ---------------- rpc/tests/support/health.json | 5 - rpc/tests/support/net_info.json | 238 - rpc/tests/support/status.json | 38 - rpc/tests/support/tx_no_prove.json | 101 - rpc/tests/support/tx_search_no_prove.json | 345 - rpc/tests/support/tx_search_with_prove.json | 437 - rpc/tests/support/tx_with_prove.json | 111 - rpc/tests/support/validators.json | 595 - tendermint/Cargo.toml | 2 +- tendermint/src/abci.rs | 68 +- .../abci/doc/request-applysnapshotchunk.md | 21 + tendermint/src/abci/doc/request-beginblock.md | 6 + tendermint/src/abci/doc/request-checktx.md | 11 + tendermint/src/abci/doc/request-commit.md | 4 + tendermint/src/abci/doc/request-delivertx.md | 3 + tendermint/src/abci/doc/request-echo.md | 3 + tendermint/src/abci/doc/request-endblock.md | 5 + tendermint/src/abci/doc/request-flush.md | 3 + tendermint/src/abci/doc/request-info.md | 3 + tendermint/src/abci/doc/request-initchain.md | 3 + .../src/abci/doc/request-listsnapshots.md | 3 + .../src/abci/doc/request-loadsnapshotchunk.md | 3 + .../src/abci/doc/request-offersnapshot.md | 20 + tendermint/src/abci/doc/request-query.md | 3 + .../abci/doc/response-applysnapshotchunk.md | 7 + .../src/abci/doc/response-beginblock.md | 3 + tendermint/src/abci/doc/response-checktx.md | 3 + tendermint/src/abci/doc/response-commit.md | 3 + tendermint/src/abci/doc/response-delivertx.md | 4 + tendermint/src/abci/doc/response-echo.md | 3 + tendermint/src/abci/doc/response-endblock.md | 3 + tendermint/src/abci/doc/response-exception.md | 1 + tendermint/src/abci/doc/response-flush.md | 3 + tendermint/src/abci/doc/response-info.md | 3 + tendermint/src/abci/doc/response-initchain.md | 3 + .../src/abci/doc/response-listsnapshots.md | 3 + .../abci/doc/response-loadsnapshotchunk.md | 3 + .../src/abci/doc/response-offersnapshot.md | 7 + tendermint/src/abci/doc/response-query.md | 3 + tendermint/src/abci/event.rs | 183 + tendermint/src/abci/kind.rs | 23 + tendermint/src/abci/request.rs | 306 + .../src/abci/request/apply_snapshot_chunk.rs | 70 + tendermint/src/abci/request/begin_block.rs | 78 + tendermint/src/abci/request/check_tx.rs | 71 + tendermint/src/abci/request/deliver_tx.rs | 34 + tendermint/src/abci/request/echo.rs | 36 + tendermint/src/abci/request/end_block.rs | 36 + tendermint/src/abci/request/info.rs | 48 + tendermint/src/abci/request/init_chain.rs | 74 + .../src/abci/request/load_snapshot_chunk.rs | 44 + tendermint/src/abci/request/offer_snapshot.rs | 52 + tendermint/src/abci/request/query.rs | 63 + tendermint/src/abci/response.rs | 289 + .../src/abci/response/apply_snapshot_chunk.rs | 88 + tendermint/src/abci/response/begin_block.rs | 42 + tendermint/src/abci/response/check_tx.rs | 92 + tendermint/src/abci/response/commit.rs | 45 + tendermint/src/abci/response/deliver_tx.rs | 80 + tendermint/src/abci/response/echo.rs | 36 + tendermint/src/abci/response/end_block.rs | 63 + tendermint/src/abci/response/exception.rs | 36 + tendermint/src/abci/response/info.rs | 55 + tendermint/src/abci/response/init_chain.rs | 62 + .../src/abci/response/list_snapshots.rs | 46 + .../src/abci/response/load_snapshot_chunk.rs | 41 + .../src/abci/response/offer_snapshot.rs | 63 + tendermint/src/abci/response/query.rs | 81 + tendermint/src/abci/types.rs | 310 + tendermint/src/block.rs | 15 +- tendermint/src/block/size.rs | 2 +- tendermint/src/consensus/params.rs | 27 +- tendermint/src/error.rs | 63 +- tendermint/src/evidence.rs | 17 +- tendermint/src/hash.rs | 6 +- tendermint/src/prelude.rs | 3 + tendermint/src/serializers.rs | 1 - tendermint/src/serializers/hash_base64.rs | 33 - tools/abci-test/Makefile.toml | 15 +- tools/abci-test/src/main.rs | 2 +- tools/docker/README.md | 64 +- tools/docker/abci-harness-0.35.0/.gitignore | 1 + tools/docker/abci-harness-0.35.0/Dockerfile | 44 + tools/docker/abci-harness-0.35.0/entrypoint | 39 + tools/docker/tendermint-0.35.0/.gitignore | 1 + tools/docker/tendermint-0.35.0/Dockerfile | 33 + tools/docker/tendermint-0.35.0/entrypoint | 22 + tools/kvstore-test/Makefile.toml | 2 +- tools/kvstore-test/tests/light-client.rs | 7 +- tools/kvstore-test/tests/tendermint.rs | 13 +- tools/proto-compiler/src/constants.rs | 9 +- tools/proto-compiler/src/functions.rs | 16 +- tools/proto-compiler/src/main.rs | 6 +- tools/rpc-probe/Makefile.toml | 4 +- tools/rpc-probe/src/client.rs | 17 +- tools/rpc-probe/src/error.rs | 18 +- tools/rpc-probe/src/kvstore.rs | 11 + tools/rpc-probe/src/plan.rs | 8 +- tools/rpc-probe/src/quick.rs | 10 + 249 files changed, 5206 insertions(+), 24390 deletions(-) create mode 100644 .changelog/unreleased/breaking-changes/862-035-tendermint.md create mode 100644 .changelog/unreleased/breaking-changes/862-abci-domain-types.md create mode 100644 .changelog/unreleased/breaking-changes/862-abci-wire-protocol.md create mode 100644 .changelog/unreleased/breaking-changes/862-rpc-event-events.md create mode 100644 .changelog/unreleased/breaking-changes/862-rpc-tx-hash-hex.md create mode 100644 proto/src/chrono.rs rename proto/src/prost/{tendermint.blockchain.rs => tendermint.blocksync.rs} (100%) delete mode 100644 proto/src/prost/tendermint.store.rs create mode 100644 rpc/src/abci.rs rename {tendermint => rpc}/src/abci/code.rs (91%) rename {tendermint => rpc}/src/abci/data.rs (94%) rename {tendermint => rpc}/src/abci/gas.rs (98%) rename {tendermint => rpc}/src/abci/info.rs (100%) rename {tendermint => rpc}/src/abci/log.rs (100%) rename {tendermint => rpc}/src/abci/path.rs (94%) rename {tendermint => rpc}/src/abci/responses.rs (98%) rename {tendermint => rpc}/src/abci/tag.rs (60%) rename {tendermint => rpc}/src/abci/transaction.rs (100%) rename {tendermint => rpc}/src/abci/transaction/hash.rs (98%) rename rpc/tests/kvstore_fixtures/incoming/{tx.json => tx_no_prove.json} (50%) create mode 100644 rpc/tests/kvstore_fixtures/incoming/tx_prove.json delete mode 100644 rpc/tests/kvstore_fixtures/outgoing/tx.json create mode 100644 rpc/tests/kvstore_fixtures/outgoing/tx_no_prove.json create mode 100644 rpc/tests/kvstore_fixtures/outgoing/tx_prove.json delete mode 100644 rpc/tests/parse_response.rs delete mode 100644 rpc/tests/support/abci_info.json delete mode 100644 rpc/tests/support/abci_query.json delete mode 100644 rpc/tests/support/block.json delete mode 100644 rpc/tests/support/block_empty_block_id.json delete mode 100644 rpc/tests/support/block_results.json delete mode 100644 rpc/tests/support/block_with_evidences.json delete mode 100644 rpc/tests/support/blockchain.json delete mode 100644 rpc/tests/support/broadcast_tx_async.json delete mode 100644 rpc/tests/support/broadcast_tx_commit.json delete mode 100644 rpc/tests/support/broadcast_tx_commit_null_data.json delete mode 100644 rpc/tests/support/broadcast_tx_sync.json delete mode 100644 rpc/tests/support/broadcast_tx_sync_int.json delete mode 100644 rpc/tests/support/commit.json delete mode 100644 rpc/tests/support/commit_1.json delete mode 100644 rpc/tests/support/consensus_state.json delete mode 100644 rpc/tests/support/error.json delete mode 100644 rpc/tests/support/event_new_block_1.json delete mode 100644 rpc/tests/support/event_new_block_2.json delete mode 100644 rpc/tests/support/event_new_block_3.json delete mode 100644 rpc/tests/support/first_block.json delete mode 100644 rpc/tests/support/genesis.json delete mode 100644 rpc/tests/support/health.json delete mode 100644 rpc/tests/support/net_info.json delete mode 100644 rpc/tests/support/status.json delete mode 100644 rpc/tests/support/tx_no_prove.json delete mode 100644 rpc/tests/support/tx_search_no_prove.json delete mode 100644 rpc/tests/support/tx_search_with_prove.json delete mode 100644 rpc/tests/support/tx_with_prove.json delete mode 100644 rpc/tests/support/validators.json create mode 100644 tendermint/src/abci/doc/request-applysnapshotchunk.md create mode 100644 tendermint/src/abci/doc/request-beginblock.md create mode 100644 tendermint/src/abci/doc/request-checktx.md create mode 100644 tendermint/src/abci/doc/request-commit.md create mode 100644 tendermint/src/abci/doc/request-delivertx.md create mode 100644 tendermint/src/abci/doc/request-echo.md create mode 100644 tendermint/src/abci/doc/request-endblock.md create mode 100644 tendermint/src/abci/doc/request-flush.md create mode 100644 tendermint/src/abci/doc/request-info.md create mode 100644 tendermint/src/abci/doc/request-initchain.md create mode 100644 tendermint/src/abci/doc/request-listsnapshots.md create mode 100644 tendermint/src/abci/doc/request-loadsnapshotchunk.md create mode 100644 tendermint/src/abci/doc/request-offersnapshot.md create mode 100644 tendermint/src/abci/doc/request-query.md create mode 100644 tendermint/src/abci/doc/response-applysnapshotchunk.md create mode 100644 tendermint/src/abci/doc/response-beginblock.md create mode 100644 tendermint/src/abci/doc/response-checktx.md create mode 100644 tendermint/src/abci/doc/response-commit.md create mode 100644 tendermint/src/abci/doc/response-delivertx.md create mode 100644 tendermint/src/abci/doc/response-echo.md create mode 100644 tendermint/src/abci/doc/response-endblock.md create mode 100644 tendermint/src/abci/doc/response-exception.md create mode 100644 tendermint/src/abci/doc/response-flush.md create mode 100644 tendermint/src/abci/doc/response-info.md create mode 100644 tendermint/src/abci/doc/response-initchain.md create mode 100644 tendermint/src/abci/doc/response-listsnapshots.md create mode 100644 tendermint/src/abci/doc/response-loadsnapshotchunk.md create mode 100644 tendermint/src/abci/doc/response-offersnapshot.md create mode 100644 tendermint/src/abci/doc/response-query.md create mode 100644 tendermint/src/abci/event.rs create mode 100644 tendermint/src/abci/kind.rs create mode 100644 tendermint/src/abci/request.rs create mode 100644 tendermint/src/abci/request/apply_snapshot_chunk.rs create mode 100644 tendermint/src/abci/request/begin_block.rs create mode 100644 tendermint/src/abci/request/check_tx.rs create mode 100644 tendermint/src/abci/request/deliver_tx.rs create mode 100644 tendermint/src/abci/request/echo.rs create mode 100644 tendermint/src/abci/request/end_block.rs create mode 100644 tendermint/src/abci/request/info.rs create mode 100644 tendermint/src/abci/request/init_chain.rs create mode 100644 tendermint/src/abci/request/load_snapshot_chunk.rs create mode 100644 tendermint/src/abci/request/offer_snapshot.rs create mode 100644 tendermint/src/abci/request/query.rs create mode 100644 tendermint/src/abci/response.rs create mode 100644 tendermint/src/abci/response/apply_snapshot_chunk.rs create mode 100644 tendermint/src/abci/response/begin_block.rs create mode 100644 tendermint/src/abci/response/check_tx.rs create mode 100644 tendermint/src/abci/response/commit.rs create mode 100644 tendermint/src/abci/response/deliver_tx.rs create mode 100644 tendermint/src/abci/response/echo.rs create mode 100644 tendermint/src/abci/response/end_block.rs create mode 100644 tendermint/src/abci/response/exception.rs create mode 100644 tendermint/src/abci/response/info.rs create mode 100644 tendermint/src/abci/response/init_chain.rs create mode 100644 tendermint/src/abci/response/list_snapshots.rs create mode 100644 tendermint/src/abci/response/load_snapshot_chunk.rs create mode 100644 tendermint/src/abci/response/offer_snapshot.rs create mode 100644 tendermint/src/abci/response/query.rs create mode 100644 tendermint/src/abci/types.rs delete mode 100644 tendermint/src/serializers/hash_base64.rs create mode 100644 tools/docker/abci-harness-0.35.0/.gitignore create mode 100644 tools/docker/abci-harness-0.35.0/Dockerfile create mode 100755 tools/docker/abci-harness-0.35.0/entrypoint create mode 100644 tools/docker/tendermint-0.35.0/.gitignore create mode 100644 tools/docker/tendermint-0.35.0/Dockerfile create mode 100755 tools/docker/tendermint-0.35.0/entrypoint diff --git a/.changelog/unreleased/breaking-changes/862-035-tendermint.md b/.changelog/unreleased/breaking-changes/862-035-tendermint.md new file mode 100644 index 000000000..2aca57362 --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-035-tendermint.md @@ -0,0 +1,2 @@ +- Updated integration testing to test against Tendermint v0.35.0 + ([#862](https://github.com/informalsystems/tendermint-rs/issues/862)) \ No newline at end of file diff --git a/.changelog/unreleased/breaking-changes/862-abci-domain-types.md b/.changelog/unreleased/breaking-changes/862-abci-domain-types.md new file mode 100644 index 000000000..220b52dc6 --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-abci-domain-types.md @@ -0,0 +1,2 @@ +- `[tendermint]` Added domain types for ABCI + ([#862](https://github.com/informalsystems/tendermint-rs/issues/862)) \ No newline at end of file diff --git a/.changelog/unreleased/breaking-changes/862-abci-wire-protocol.md b/.changelog/unreleased/breaking-changes/862-abci-wire-protocol.md new file mode 100644 index 000000000..48248614a --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-abci-wire-protocol.md @@ -0,0 +1,3 @@ +- `[tendermint-abci]` Changed low-level wire encoding protocol to + accommodate + ([#862](https://github.com/informalsystems/tendermint-rs/issues/862)) \ No newline at end of file diff --git a/.changelog/unreleased/breaking-changes/862-rpc-event-events.md b/.changelog/unreleased/breaking-changes/862-rpc-event-events.md new file mode 100644 index 000000000..9b35a6b37 --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-rpc-event-events.md @@ -0,0 +1,5 @@ +- `[tendermint-rpc]` The `event::Event::events` field is now represented as + `Option>` as opposed to `Option>>` to accommodate breaking change in Tendermint v0.35.0 + subscription interface ([#862](https://github.com/informalsystems/tendermint- + rs/issues/862)) \ No newline at end of file diff --git a/.changelog/unreleased/breaking-changes/862-rpc-tx-hash-hex.md b/.changelog/unreleased/breaking-changes/862-rpc-tx-hash-hex.md new file mode 100644 index 000000000..bfaf2d85b --- /dev/null +++ b/.changelog/unreleased/breaking-changes/862-rpc-tx-hash-hex.md @@ -0,0 +1,3 @@ +- `[tendermint-rpc]` The `/tx` endpoint now encodes + the `hash` parameter as hexadecimal instead of base64 + ([#862](https://github.com/informalsystems/tendermint-rs/issues/862)) \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8ad3e8ea8..fe25cb29f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -125,7 +125,7 @@ jobs: runs-on: ubuntu-latest services: tendermint: - image: informaldev/tendermint:0.34.13 + image: informaldev/tendermint:0.35.0 ports: - 26656:26656 - 26657:26657 diff --git a/abci/src/application.rs b/abci/src/application.rs index b4a848608..5cfe154d6 100644 --- a/abci/src/application.rs +++ b/abci/src/application.rs @@ -9,11 +9,11 @@ use tendermint_proto::abci::request::Value; use tendermint_proto::abci::{ response, Request, RequestApplySnapshotChunk, RequestBeginBlock, RequestCheckTx, RequestDeliverTx, RequestEcho, RequestEndBlock, RequestInfo, RequestInitChain, - RequestLoadSnapshotChunk, RequestOfferSnapshot, RequestQuery, RequestSetOption, Response, + RequestLoadSnapshotChunk, RequestOfferSnapshot, RequestQuery, Response, ResponseApplySnapshotChunk, ResponseBeginBlock, ResponseCheckTx, ResponseCommit, ResponseDeliverTx, ResponseEcho, ResponseEndBlock, ResponseFlush, ResponseInfo, ResponseInitChain, ResponseListSnapshots, ResponseLoadSnapshotChunk, ResponseOfferSnapshot, - ResponseQuery, ResponseSetOption, + ResponseQuery, }; /// An ABCI application. @@ -77,12 +77,6 @@ pub trait Application: Send + Clone + 'static { Default::default() } - /// Allows the Tendermint node to request that the application set an - /// option to a particular value. - fn set_option(&self, _request: RequestSetOption) -> ResponseSetOption { - Default::default() - } - /// Used during state sync to discover available snapshots on peers. fn list_snapshots(&self) -> ResponseListSnapshots { Default::default() @@ -124,7 +118,6 @@ impl RequestDispatcher for A { Value::Echo(req) => response::Value::Echo(self.echo(req)), Value::Flush(_) => response::Value::Flush(self.flush()), Value::Info(req) => response::Value::Info(self.info(req)), - Value::SetOption(req) => response::Value::SetOption(self.set_option(req)), Value::InitChain(req) => response::Value::InitChain(self.init_chain(req)), Value::Query(req) => response::Value::Query(self.query(req)), Value::BeginBlock(req) => response::Value::BeginBlock(self.begin_block(req)), diff --git a/abci/src/application/kvstore.rs b/abci/src/application/kvstore.rs index 57a687345..5547f2a86 100644 --- a/abci/src/application/kvstore.rs +++ b/abci/src/application/kvstore.rs @@ -1,6 +1,6 @@ //! In-memory key/value store ABCI application. -use crate::codec::{encode_varint, MAX_VARINT_LENGTH}; +use crate::codec::MAX_VARINT_LENGTH; use crate::{Application, Error}; use bytes::BytesMut; use std::collections::HashMap; @@ -44,7 +44,7 @@ use tracing::{debug, info}; /// // Deliver a transaction and then commit the transaction /// client /// .deliver_tx(RequestDeliverTx { -/// tx: "test-key=test-value".as_bytes().to_owned(), +/// tx: "test-key=test-value".into(), /// }) /// .unwrap(); /// client.commit().unwrap(); @@ -52,7 +52,7 @@ use tracing::{debug, info}; /// // We should be able to query for the data we just delivered above /// let res = client /// .query(RequestQuery { -/// data: "test-key".as_bytes().to_owned(), +/// data: "test-key".into(), /// path: "".to_string(), /// height: 0, /// prove: false, @@ -123,17 +123,17 @@ impl Application for KeyValueStoreApp { version: "0.1.0".to_string(), app_version: 1, last_block_height, - last_block_app_hash, + last_block_app_hash: last_block_app_hash.into(), } } fn query(&self, request: RequestQuery) -> ResponseQuery { - let key = match String::from_utf8(request.data.clone()) { + let key = match std::str::from_utf8(&request.data) { Ok(s) => s, Err(e) => panic!("Failed to intepret key as UTF-8: {}", e), }; debug!("Attempting to get key: {}", key); - match self.get(key.clone()) { + match self.get(key) { Ok((height, value_opt)) => match value_opt { Some(value) => ResponseQuery { code: 0, @@ -141,7 +141,7 @@ impl Application for KeyValueStoreApp { info: "".to_string(), index: 0, key: request.data, - value: value.into_bytes(), + value: value.into_bytes().into(), proof_ops: None, height, codespace: "".to_string(), @@ -152,7 +152,7 @@ impl Application for KeyValueStoreApp { info: "".to_string(), index: 0, key: request.data, - value: vec![], + value: Default::default(), proof_ops: None, height, codespace: "".to_string(), @@ -165,28 +165,31 @@ impl Application for KeyValueStoreApp { fn check_tx(&self, _request: RequestCheckTx) -> ResponseCheckTx { ResponseCheckTx { code: 0, - data: vec![], + data: Default::default(), log: "".to_string(), info: "".to_string(), gas_wanted: 1, gas_used: 0, events: vec![], codespace: "".to_string(), + mempool_error: "".to_string(), + priority: 0, + sender: "".to_string(), } } fn deliver_tx(&self, request: RequestDeliverTx) -> ResponseDeliverTx { - let tx = String::from_utf8(request.tx).unwrap(); + let tx = std::str::from_utf8(&request.tx).unwrap(); let tx_parts = tx.split('=').collect::>(); let (key, value) = if tx_parts.len() == 2 { (tx_parts[0], tx_parts[1]) } else { - (tx.as_ref(), tx.as_ref()) + (tx, tx) }; let _ = self.set(key, value).unwrap(); ResponseDeliverTx { code: 0, - data: vec![], + data: Default::default(), log: "".to_string(), info: "".to_string(), gas_wanted: 0, @@ -195,18 +198,18 @@ impl Application for KeyValueStoreApp { r#type: "app".to_string(), attributes: vec![ EventAttribute { - key: "key".as_bytes().to_owned(), - value: key.as_bytes().to_owned(), + key: "key".to_string(), + value: key.to_string(), index: true, }, EventAttribute { - key: "index_key".as_bytes().to_owned(), - value: "index is working".as_bytes().to_owned(), + key: "index_key".to_string(), + value: "index is working".to_string(), index: true, }, EventAttribute { - key: "noindex_key".as_bytes().to_owned(), - value: "index is working".as_bytes().to_owned(), + key: "noindex_key".to_string(), + value: "index is working".to_string(), index: false, }, ], @@ -221,7 +224,7 @@ impl Application for KeyValueStoreApp { let (height, app_hash) = channel_recv(&result_rx).unwrap(); info!("Committed height {}", height); ResponseCommit { - data: app_hash, + data: app_hash.into(), retain_height: height - 1, } } @@ -278,7 +281,7 @@ impl KeyValueStoreDriver { // As in the Go-based key/value store, simply encode the number of // items as the "app hash" let mut app_hash = BytesMut::with_capacity(MAX_VARINT_LENGTH); - encode_varint(self.store.len() as u64, &mut app_hash); + prost::encoding::encode_varint(self.store.len() as u64, &mut app_hash); self.app_hash = app_hash.to_vec(); self.height += 1; channel_send(&result_tx, (self.height, self.app_hash.clone())) diff --git a/abci/src/client.rs b/abci/src/client.rs index c5146f88a..c2e11ddba 100644 --- a/abci/src/client.rs +++ b/abci/src/client.rs @@ -7,10 +7,9 @@ use tendermint_proto::abci::{ request, response, RequestApplySnapshotChunk, RequestBeginBlock, RequestCheckTx, RequestCommit, RequestDeliverTx, RequestEndBlock, RequestFlush, RequestInfo, RequestInitChain, RequestListSnapshots, RequestLoadSnapshotChunk, RequestOfferSnapshot, RequestQuery, - RequestSetOption, ResponseApplySnapshotChunk, ResponseBeginBlock, ResponseCheckTx, - ResponseCommit, ResponseDeliverTx, ResponseEndBlock, ResponseFlush, ResponseInfo, - ResponseInitChain, ResponseListSnapshots, ResponseLoadSnapshotChunk, ResponseOfferSnapshot, - ResponseQuery, ResponseSetOption, + ResponseApplySnapshotChunk, ResponseBeginBlock, ResponseCheckTx, ResponseCommit, + ResponseDeliverTx, ResponseEndBlock, ResponseFlush, ResponseInfo, ResponseInitChain, + ResponseListSnapshots, ResponseLoadSnapshotChunk, ResponseOfferSnapshot, ResponseQuery, }; use tendermint_proto::abci::{Request, RequestEcho, ResponseEcho}; @@ -113,11 +112,6 @@ impl Client { perform!(self, Commit, RequestCommit {}) } - /// Request that the application set an option to a particular value. - pub fn set_option(&mut self, req: RequestSetOption) -> Result { - perform!(self, SetOption, req) - } - /// Used during state sync to discover available snapshots on peers. pub fn list_snapshots(&mut self) -> Result { perform!(self, ListSnapshots, RequestListSnapshots {}) diff --git a/abci/src/codec.rs b/abci/src/codec.rs index 170d384e6..25d702d31 100644 --- a/abci/src/codec.rs +++ b/abci/src/codec.rs @@ -127,7 +127,7 @@ where message.encode(&mut buf).map_err(Error::encode)?; let buf = buf.freeze(); - encode_varint(buf.len() as u64, &mut dst); + prost::encoding::encode_varint(buf.len() as u64, &mut dst); dst.put(buf); Ok(()) } @@ -139,11 +139,11 @@ where { let src_len = src.len(); let mut tmp = src.clone().freeze(); - let encoded_len = match decode_varint(&mut tmp) { + let encoded_len = match prost::encoding::decode_varint(&mut tmp) { Ok(len) => len, // We've potentially only received a partial length delimiter Err(_) if src_len <= MAX_VARINT_LENGTH => return Ok(None), - Err(e) => return Err(e), + Err(e) => return Err(Error::decode(e)), }; let remaining = tmp.remaining() as u64; if remaining < encoded_len { @@ -161,14 +161,3 @@ where Ok(Some(res)) } } - -// encode_varint and decode_varint will be removed once -// https://github.com/tendermint/tendermint/issues/5783 lands in Tendermint. -pub fn encode_varint(val: u64, mut buf: &mut B) { - prost::encoding::encode_varint(val << 1, &mut buf); -} - -pub fn decode_varint(mut buf: &mut B) -> Result { - let len = prost::encoding::decode_varint(&mut buf).map_err(Error::decode)?; - Ok(len >> 1) -} diff --git a/abci/tests/kvstore_app.rs b/abci/tests/kvstore_app.rs index 62a1c51d6..8b415556a 100644 --- a/abci/tests/kvstore_app.rs +++ b/abci/tests/kvstore_app.rs @@ -24,19 +24,19 @@ mod kvstore_app_integration { client .deliver_tx(RequestDeliverTx { - tx: "test-key=test-value".as_bytes().to_owned(), + tx: "test-key=test-value".into(), }) .unwrap(); client.commit().unwrap(); let res = client .query(RequestQuery { - data: "test-key".as_bytes().to_owned(), + data: "test-key".into(), path: "".to_string(), height: 0, prove: false, }) .unwrap(); - assert_eq!(res.value, "test-value".as_bytes().to_owned()); + assert_eq!(res.value, "test-value".as_bytes()); } } diff --git a/light-client/src/evidence.rs b/light-client/src/evidence.rs index 279fb9501..3da3538d1 100644 --- a/light-client/src/evidence.rs +++ b/light-client/src/evidence.rs @@ -2,7 +2,7 @@ use crate::{components::io::IoError, types::PeerId}; -use tendermint::abci::transaction::Hash; +use tendermint_rpc::abci::transaction::Hash; use contracts::contract_trait; diff --git a/light-client/src/tests.rs b/light-client/src/tests.rs index 660c09a8b..093d4fa79 100644 --- a/light-client/src/tests.rs +++ b/light-client/src/tests.rs @@ -3,8 +3,8 @@ use crate::types::{Height, LightBlock, PeerId, SignedHeader, Time, TrustThreshold, ValidatorSet}; use serde::{Deserialize, Serialize}; -use tendermint::abci::transaction::Hash; use tendermint_rpc as rpc; +use tendermint_rpc::abci::transaction::Hash; use crate::components::clock::Clock; use crate::components::io::{AtHeight, Io, IoError}; diff --git a/p2p/src/secret_connection.rs b/p2p/src/secret_connection.rs index 18581a1b6..28c165891 100644 --- a/p2p/src/secret_connection.rs +++ b/p2p/src/secret_connection.rs @@ -185,7 +185,7 @@ impl Handshake { proto::crypto::public_key::Sum::Ed25519(ref bytes) => { ed25519::PublicKey::from_bytes(bytes).map_err(Error::signature) } - proto::crypto::public_key::Sum::Secp256k1(_) => Err(Error::unsupported_key()), + _ => Err(Error::unsupported_key()), }?; let remote_sig = diff --git a/proto/Cargo.toml b/proto/Cargo.toml index 6fdede136..3b836564e 100644 --- a/proto/Cargo.toml +++ b/proto/Cargo.toml @@ -19,7 +19,7 @@ all-features = true [dependencies] prost = { version = "0.9", default-features = false } prost-types = { version = "0.9", default-features = false } -bytes = { version = "1.0", default-features = false } +bytes = { version = "1.0", default-features = false, features = ["serde"] } serde = { version = "1.0", default-features = false, features = ["derive"] } serde_bytes = { version = "0.11", default-features = false, features = ["alloc"] } subtle-encoding = { version = "0.5", default-features = false, features = ["hex", "base64", "alloc"] } diff --git a/proto/src/chrono.rs b/proto/src/chrono.rs new file mode 100644 index 000000000..3b969f0f0 --- /dev/null +++ b/proto/src/chrono.rs @@ -0,0 +1,53 @@ +use core::convert::TryInto; + +use chrono::{DateTime, Duration, TimeZone, Utc}; + +use crate::google::protobuf as pb; + +impl From> for pb::Timestamp { + fn from(dt: DateTime) -> pb::Timestamp { + pb::Timestamp { + seconds: dt.timestamp(), + // This can exceed 1_000_000_000 in the case of a leap second, but + // even with a leap second it should be under 2_147_483_647. + nanos: dt + .timestamp_subsec_nanos() + .try_into() + .expect("timestamp_subsec_nanos bigger than i32::MAX"), + } + } +} + +impl From for DateTime { + fn from(ts: pb::Timestamp) -> DateTime { + Utc.timestamp(ts.seconds, ts.nanos as u32) + } +} + +// Note: we convert a protobuf::Duration into a chrono::Duration, not a +// std::time::Duration, because std::time::Durations are unsigned, but the +// protobuf duration is signed. + +impl From for pb::Duration { + fn from(d: Duration) -> pb::Duration { + // chrono's Duration stores the fractional part as `nanos: i32` + // internally but doesn't provide a way to access it, only a way to get + // the *total* number of nanoseconds. so we have to do this cool and fun + // hoop-jumping maneuver + let seconds = d.num_seconds(); + let nanos = (d - Duration::seconds(seconds)) + .num_nanoseconds() + .expect("we computed the fractional part, so there's no overflow") + .try_into() + .expect("the fractional part fits in i32"); + + pb::Duration { seconds, nanos } + } +} + +impl From for Duration { + fn from(d: pb::Duration) -> Duration { + // there's no constructor that supplies both at once + Duration::seconds(d.seconds) + Duration::nanoseconds(d.nanos as i64) + } +} diff --git a/proto/src/lib.rs b/proto/src/lib.rs index 018ea6216..f306f87ab 100644 --- a/proto/src/lib.rs +++ b/proto/src/lib.rs @@ -20,6 +20,7 @@ pub mod google { } } +mod chrono; mod error; #[allow(warnings)] mod tendermint; diff --git a/proto/src/prost/tendermint.abci.rs b/proto/src/prost/tendermint.abci.rs index 4e5142286..2a42bbd53 100644 --- a/proto/src/prost/tendermint.abci.rs +++ b/proto/src/prost/tendermint.abci.rs @@ -7,7 +7,7 @@ #[derive(Clone, PartialEq, ::prost::Message)] pub struct Request { - #[prost(oneof="request::Value", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15")] + #[prost(oneof="request::Value", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14")] pub value: ::core::option::Option, } /// Nested message and enum types in `Request`. @@ -21,28 +21,26 @@ pub mod request { #[prost(message, tag="3")] Info(super::RequestInfo), #[prost(message, tag="4")] - SetOption(super::RequestSetOption), - #[prost(message, tag="5")] InitChain(super::RequestInitChain), - #[prost(message, tag="6")] + #[prost(message, tag="5")] Query(super::RequestQuery), - #[prost(message, tag="7")] + #[prost(message, tag="6")] BeginBlock(super::RequestBeginBlock), - #[prost(message, tag="8")] + #[prost(message, tag="7")] CheckTx(super::RequestCheckTx), - #[prost(message, tag="9")] + #[prost(message, tag="8")] DeliverTx(super::RequestDeliverTx), - #[prost(message, tag="10")] + #[prost(message, tag="9")] EndBlock(super::RequestEndBlock), - #[prost(message, tag="11")] + #[prost(message, tag="10")] Commit(super::RequestCommit), - #[prost(message, tag="12")] + #[prost(message, tag="11")] ListSnapshots(super::RequestListSnapshots), - #[prost(message, tag="13")] + #[prost(message, tag="12")] OfferSnapshot(super::RequestOfferSnapshot), - #[prost(message, tag="14")] + #[prost(message, tag="13")] LoadSnapshotChunk(super::RequestLoadSnapshotChunk), - #[prost(message, tag="15")] + #[prost(message, tag="14")] ApplySnapshotChunk(super::RequestApplySnapshotChunk), } } @@ -62,14 +60,8 @@ pub struct RequestInfo { pub block_version: u64, #[prost(uint64, tag="3")] pub p2p_version: u64, -} -/// nondeterministic -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct RequestSetOption { - #[prost(string, tag="1")] - pub key: ::prost::alloc::string::String, - #[prost(string, tag="2")] - pub value: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub abci_version: ::prost::alloc::string::String, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestInitChain { @@ -78,18 +70,18 @@ pub struct RequestInitChain { #[prost(string, tag="2")] pub chain_id: ::prost::alloc::string::String, #[prost(message, optional, tag="3")] - pub consensus_params: ::core::option::Option, + pub consensus_params: ::core::option::Option, #[prost(message, repeated, tag="4")] pub validators: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="5")] - pub app_state_bytes: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="5")] + pub app_state_bytes: ::prost::bytes::Bytes, #[prost(int64, tag="6")] pub initial_height: i64, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestQuery { - #[prost(bytes="vec", tag="1")] - pub data: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub data: ::prost::bytes::Bytes, #[prost(string, tag="2")] pub path: ::prost::alloc::string::String, #[prost(int64, tag="3")] @@ -99,8 +91,8 @@ pub struct RequestQuery { } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestBeginBlock { - #[prost(bytes="vec", tag="1")] - pub hash: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub hash: ::prost::bytes::Bytes, #[prost(message, optional, tag="2")] pub header: ::core::option::Option, #[prost(message, optional, tag="3")] @@ -110,15 +102,15 @@ pub struct RequestBeginBlock { } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestCheckTx { - #[prost(bytes="vec", tag="1")] - pub tx: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub tx: ::prost::bytes::Bytes, #[prost(enumeration="CheckTxType", tag="2")] pub r#type: i32, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestDeliverTx { - #[prost(bytes="vec", tag="1")] - pub tx: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub tx: ::prost::bytes::Bytes, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RequestEndBlock { @@ -139,8 +131,8 @@ pub struct RequestOfferSnapshot { #[prost(message, optional, tag="1")] pub snapshot: ::core::option::Option, /// light client-verified app hash for snapshot height - #[prost(bytes="vec", tag="2")] - pub app_hash: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub app_hash: ::prost::bytes::Bytes, } /// loads a snapshot chunk #[derive(Clone, PartialEq, ::prost::Message)] @@ -157,8 +149,8 @@ pub struct RequestLoadSnapshotChunk { pub struct RequestApplySnapshotChunk { #[prost(uint32, tag="1")] pub index: u32, - #[prost(bytes="vec", tag="2")] - pub chunk: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub chunk: ::prost::bytes::Bytes, #[prost(string, tag="3")] pub sender: ::prost::alloc::string::String, } @@ -167,7 +159,7 @@ pub struct RequestApplySnapshotChunk { #[derive(Clone, PartialEq, ::prost::Message)] pub struct Response { - #[prost(oneof="response::Value", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16")] + #[prost(oneof="response::Value", tags="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15")] pub value: ::core::option::Option, } /// Nested message and enum types in `Response`. @@ -183,28 +175,26 @@ pub mod response { #[prost(message, tag="4")] Info(super::ResponseInfo), #[prost(message, tag="5")] - SetOption(super::ResponseSetOption), - #[prost(message, tag="6")] InitChain(super::ResponseInitChain), - #[prost(message, tag="7")] + #[prost(message, tag="6")] Query(super::ResponseQuery), - #[prost(message, tag="8")] + #[prost(message, tag="7")] BeginBlock(super::ResponseBeginBlock), - #[prost(message, tag="9")] + #[prost(message, tag="8")] CheckTx(super::ResponseCheckTx), - #[prost(message, tag="10")] + #[prost(message, tag="9")] DeliverTx(super::ResponseDeliverTx), - #[prost(message, tag="11")] + #[prost(message, tag="10")] EndBlock(super::ResponseEndBlock), - #[prost(message, tag="12")] + #[prost(message, tag="11")] Commit(super::ResponseCommit), - #[prost(message, tag="13")] + #[prost(message, tag="12")] ListSnapshots(super::ResponseListSnapshots), - #[prost(message, tag="14")] + #[prost(message, tag="13")] OfferSnapshot(super::ResponseOfferSnapshot), - #[prost(message, tag="15")] + #[prost(message, tag="14")] LoadSnapshotChunk(super::ResponseLoadSnapshotChunk), - #[prost(message, tag="16")] + #[prost(message, tag="15")] ApplySnapshotChunk(super::ResponseApplySnapshotChunk), } } @@ -227,6 +217,7 @@ pub struct ResponseFlush { pub struct ResponseInfo { #[prost(string, tag="1")] pub data: ::prost::alloc::string::String, + /// this is the software version of the application. TODO: remove? #[prost(string, tag="2")] pub version: ::prost::alloc::string::String, #[prost(uint64, tag="3")] @@ -235,29 +226,18 @@ pub struct ResponseInfo { #[prost(int64, tag="4")] #[serde(with = "crate::serializers::from_str")] pub last_block_height: i64, - #[prost(bytes="vec", tag="5")] - #[serde(skip_serializing_if = "::prost::alloc::vec::Vec::is_empty", with = "serde_bytes")] - pub last_block_app_hash: ::prost::alloc::vec::Vec, -} -/// nondeterministic -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ResponseSetOption { - #[prost(uint32, tag="1")] - pub code: u32, - /// bytes data = 2; - #[prost(string, tag="3")] - pub log: ::prost::alloc::string::String, - #[prost(string, tag="4")] - pub info: ::prost::alloc::string::String, + #[prost(bytes="bytes", tag="5")] + #[serde(skip_serializing_if = "bytes::Bytes::is_empty")] + pub last_block_app_hash: ::prost::bytes::Bytes, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseInitChain { #[prost(message, optional, tag="1")] - pub consensus_params: ::core::option::Option, + pub consensus_params: ::core::option::Option, #[prost(message, repeated, tag="2")] pub validators: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="3")] - pub app_hash: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="3")] + pub app_hash: ::prost::bytes::Bytes, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseQuery { @@ -273,10 +253,10 @@ pub struct ResponseQuery { pub info: ::prost::alloc::string::String, #[prost(int64, tag="5")] pub index: i64, - #[prost(bytes="vec", tag="6")] - pub key: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="7")] - pub value: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="6")] + pub key: ::prost::bytes::Bytes, + #[prost(bytes="bytes", tag="7")] + pub value: ::prost::bytes::Bytes, #[prost(message, optional, tag="8")] pub proof_ops: ::core::option::Option, #[prost(int64, tag="9")] @@ -293,8 +273,8 @@ pub struct ResponseBeginBlock { pub struct ResponseCheckTx { #[prost(uint32, tag="1")] pub code: u32, - #[prost(bytes="vec", tag="2")] - pub data: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub data: ::prost::bytes::Bytes, /// nondeterministic #[prost(string, tag="3")] pub log: ::prost::alloc::string::String, @@ -309,13 +289,21 @@ pub struct ResponseCheckTx { pub events: ::prost::alloc::vec::Vec, #[prost(string, tag="8")] pub codespace: ::prost::alloc::string::String, + #[prost(string, tag="9")] + pub sender: ::prost::alloc::string::String, + #[prost(int64, tag="10")] + pub priority: i64, + /// mempool_error is set by Tendermint. + /// ABCI applictions creating a ResponseCheckTX should not set mempool_error. + #[prost(string, tag="11")] + pub mempool_error: ::prost::alloc::string::String, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseDeliverTx { #[prost(uint32, tag="1")] pub code: u32, - #[prost(bytes="vec", tag="2")] - pub data: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub data: ::prost::bytes::Bytes, /// nondeterministic #[prost(string, tag="3")] pub log: ::prost::alloc::string::String, @@ -337,15 +325,15 @@ pub struct ResponseEndBlock { #[prost(message, repeated, tag="1")] pub validator_updates: ::prost::alloc::vec::Vec, #[prost(message, optional, tag="2")] - pub consensus_param_updates: ::core::option::Option, + pub consensus_param_updates: ::core::option::Option, #[prost(message, repeated, tag="3")] pub events: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseCommit { /// reserve 1 - #[prost(bytes="vec", tag="2")] - pub data: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="2")] + pub data: ::prost::bytes::Bytes, #[prost(int64, tag="3")] pub retain_height: i64, } @@ -380,8 +368,8 @@ pub mod response_offer_snapshot { } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseLoadSnapshotChunk { - #[prost(bytes="vec", tag="1")] - pub chunk: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub chunk: ::prost::bytes::Bytes, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseApplySnapshotChunk { @@ -416,29 +404,6 @@ pub mod response_apply_snapshot_chunk { //---------------------------------------- // Misc. -/// ConsensusParams contains all consensus-relevant parameters -/// that can be adjusted by the abci app -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ConsensusParams { - #[prost(message, optional, tag="1")] - pub block: ::core::option::Option, - #[prost(message, optional, tag="2")] - pub evidence: ::core::option::Option, - #[prost(message, optional, tag="3")] - pub validator: ::core::option::Option, - #[prost(message, optional, tag="4")] - pub version: ::core::option::Option, -} -/// BlockParams contains limits on the block size. -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlockParams { - /// Note: must be greater than 0 - #[prost(int64, tag="1")] - pub max_bytes: i64, - /// Note: must be greater or equal to -1 - #[prost(int64, tag="2")] - pub max_gas: i64, -} #[derive(Clone, PartialEq, ::prost::Message)] pub struct LastCommitInfo { #[prost(int32, tag="1")] @@ -459,10 +424,10 @@ pub struct Event { /// EventAttribute is a single key-value pair, associated with an event. #[derive(Clone, PartialEq, ::prost::Message)] pub struct EventAttribute { - #[prost(bytes="vec", tag="1")] - pub key: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="2")] - pub value: ::prost::alloc::vec::Vec, + #[prost(string, tag="1")] + pub key: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub value: ::prost::alloc::string::String, /// nondeterministic #[prost(bool, tag="3")] pub index: bool, @@ -476,8 +441,8 @@ pub struct TxResult { pub height: i64, #[prost(uint32, tag="2")] pub index: u32, - #[prost(bytes="vec", tag="3")] - pub tx: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="3")] + pub tx: ::prost::bytes::Bytes, #[prost(message, optional, tag="4")] pub result: ::core::option::Option, } @@ -488,8 +453,8 @@ pub struct TxResult { #[derive(Clone, PartialEq, ::prost::Message)] pub struct Validator { /// The first 20 bytes of SHA256(public key) - #[prost(bytes="vec", tag="1")] - pub address: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="1")] + pub address: ::prost::bytes::Bytes, /// PubKey pub_key = 2 \[(gogoproto.nullable)=false\]; /// /// The voting power @@ -546,11 +511,11 @@ pub struct Snapshot { #[prost(uint32, tag="3")] pub chunks: u32, /// Arbitrary snapshot hash, equal only if identical - #[prost(bytes="vec", tag="4")] - pub hash: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="4")] + pub hash: ::prost::bytes::Bytes, /// Arbitrary application metadata - #[prost(bytes="vec", tag="5")] - pub metadata: ::prost::alloc::vec::Vec, + #[prost(bytes="bytes", tag="5")] + pub metadata: ::prost::bytes::Bytes, } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] diff --git a/proto/src/prost/tendermint.blockchain.rs b/proto/src/prost/tendermint.blocksync.rs similarity index 100% rename from proto/src/prost/tendermint.blockchain.rs rename to proto/src/prost/tendermint.blocksync.rs diff --git a/proto/src/prost/tendermint.crypto.rs b/proto/src/prost/tendermint.crypto.rs index 4b47ef593..507e7866c 100644 --- a/proto/src/prost/tendermint.crypto.rs +++ b/proto/src/prost/tendermint.crypto.rs @@ -2,7 +2,7 @@ #[derive(::serde::Deserialize, ::serde::Serialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PublicKey { - #[prost(oneof="public_key::Sum", tags="1, 2")] + #[prost(oneof="public_key::Sum", tags="1, 2, 3")] pub sum: ::core::option::Option, } /// Nested message and enum types in `PublicKey`. @@ -17,6 +17,9 @@ pub mod public_key { #[prost(bytes, tag="2")] #[serde(rename = "tendermint/PubKeySecp256k1", with = "crate::serializers::bytes::base64string")] Secp256k1(::prost::alloc::vec::Vec), + #[prost(bytes, tag="3")] + #[serde(rename = "tendermint/PubKeySr25519", with = "crate::serializers::bytes::base64string")] + Sr25519(::prost::alloc::vec::Vec), } } #[derive(::serde::Deserialize, ::serde::Serialize)] diff --git a/proto/src/prost/tendermint.p2p.rs b/proto/src/prost/tendermint.p2p.rs index 8ed7b702f..2f809edd5 100644 --- a/proto/src/prost/tendermint.p2p.rs +++ b/proto/src/prost/tendermint.p2p.rs @@ -1,5 +1,5 @@ #[derive(Clone, PartialEq, ::prost::Message)] -pub struct NetAddress { +pub struct PexAddress { #[prost(string, tag="1")] pub id: ::prost::alloc::string::String, #[prost(string, tag="2")] @@ -8,6 +8,46 @@ pub struct NetAddress { pub port: u32, } #[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexRequest { +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexResponse { + #[prost(message, repeated, tag="1")] + pub addresses: ::prost::alloc::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexAddressV2 { + #[prost(string, tag="1")] + pub url: ::prost::alloc::string::String, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexRequestV2 { +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexResponseV2 { + #[prost(message, repeated, tag="1")] + pub addresses: ::prost::alloc::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PexMessage { + #[prost(oneof="pex_message::Sum", tags="1, 2, 3, 4")] + pub sum: ::core::option::Option, +} +/// Nested message and enum types in `PexMessage`. +pub mod pex_message { + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Sum { + #[prost(message, tag="1")] + PexRequest(super::PexRequest), + #[prost(message, tag="2")] + PexResponse(super::PexResponse), + #[prost(message, tag="3")] + PexRequestV2(super::PexRequestV2), + #[prost(message, tag="4")] + PexResponseV2(super::PexResponseV2), + } +} +#[derive(Clone, PartialEq, ::prost::Message)] pub struct ProtocolVersion { #[prost(uint64, tag="1")] pub p2p: u64, @@ -17,11 +57,11 @@ pub struct ProtocolVersion { pub app: u64, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DefaultNodeInfo { +pub struct NodeInfo { #[prost(message, optional, tag="1")] pub protocol_version: ::core::option::Option, #[prost(string, tag="2")] - pub default_node_id: ::prost::alloc::string::String, + pub node_id: ::prost::alloc::string::String, #[prost(string, tag="3")] pub listen_addr: ::prost::alloc::string::String, #[prost(string, tag="4")] @@ -33,37 +73,34 @@ pub struct DefaultNodeInfo { #[prost(string, tag="7")] pub moniker: ::prost::alloc::string::String, #[prost(message, optional, tag="8")] - pub other: ::core::option::Option, + pub other: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DefaultNodeInfoOther { +pub struct NodeInfoOther { #[prost(string, tag="1")] pub tx_index: ::prost::alloc::string::String, #[prost(string, tag="2")] pub rpc_address: ::prost::alloc::string::String, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct PexRequest { -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct PexAddrs { - #[prost(message, repeated, tag="1")] - pub addrs: ::prost::alloc::vec::Vec, +pub struct PeerInfo { + #[prost(string, tag="1")] + pub id: ::prost::alloc::string::String, + #[prost(message, repeated, tag="2")] + pub address_info: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="3")] + pub last_connected: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] -pub struct Message { - #[prost(oneof="message::Sum", tags="1, 2")] - pub sum: ::core::option::Option, -} -/// Nested message and enum types in `Message`. -pub mod message { - #[derive(Clone, PartialEq, ::prost::Oneof)] - pub enum Sum { - #[prost(message, tag="1")] - PexRequest(super::PexRequest), - #[prost(message, tag="2")] - PexAddrs(super::PexAddrs), - } +pub struct PeerAddressInfo { + #[prost(string, tag="1")] + pub address: ::prost::alloc::string::String, + #[prost(message, optional, tag="2")] + pub last_dial_success: ::core::option::Option, + #[prost(message, optional, tag="3")] + pub last_dial_failure: ::core::option::Option, + #[prost(uint32, tag="4")] + pub dial_failures: u32, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct PacketPing { diff --git a/proto/src/prost/tendermint.privval.rs b/proto/src/prost/tendermint.privval.rs index 8a86b3369..04fac20e6 100644 --- a/proto/src/prost/tendermint.privval.rs +++ b/proto/src/prost/tendermint.privval.rs @@ -86,6 +86,16 @@ pub mod message { PingResponse(super::PingResponse), } } +/// AuthSigMessage is duplicated from p2p prior to the P2P refactor. +/// It is used for the SecretConnection until we migrate privval to gRPC. +/// +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AuthSigMessage { + #[prost(message, optional, tag="1")] + pub pub_key: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub sig: ::prost::alloc::vec::Vec, +} #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] pub enum Errors { diff --git a/proto/src/prost/tendermint.statesync.rs b/proto/src/prost/tendermint.statesync.rs index 593bd0222..c7e8d7f8a 100644 --- a/proto/src/prost/tendermint.statesync.rs +++ b/proto/src/prost/tendermint.statesync.rs @@ -1,6 +1,6 @@ #[derive(Clone, PartialEq, ::prost::Message)] pub struct Message { - #[prost(oneof="message::Sum", tags="1, 2, 3, 4")] + #[prost(oneof="message::Sum", tags="1, 2, 3, 4, 5, 6, 7, 8")] pub sum: ::core::option::Option, } /// Nested message and enum types in `Message`. @@ -15,6 +15,14 @@ pub mod message { ChunkRequest(super::ChunkRequest), #[prost(message, tag="4")] ChunkResponse(super::ChunkResponse), + #[prost(message, tag="5")] + LightBlockRequest(super::LightBlockRequest), + #[prost(message, tag="6")] + LightBlockResponse(super::LightBlockResponse), + #[prost(message, tag="7")] + ParamsRequest(super::ParamsRequest), + #[prost(message, tag="8")] + ParamsResponse(super::ParamsResponse), } } #[derive(Clone, PartialEq, ::prost::Message)] @@ -55,3 +63,25 @@ pub struct ChunkResponse { #[prost(bool, tag="5")] pub missing: bool, } +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct LightBlockRequest { + #[prost(uint64, tag="1")] + pub height: u64, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct LightBlockResponse { + #[prost(message, optional, tag="1")] + pub light_block: ::core::option::Option, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ParamsRequest { + #[prost(uint64, tag="1")] + pub height: u64, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ParamsResponse { + #[prost(uint64, tag="1")] + pub height: u64, + #[prost(message, optional, tag="2")] + pub consensus_params: ::core::option::Option, +} diff --git a/proto/src/prost/tendermint.store.rs b/proto/src/prost/tendermint.store.rs deleted file mode 100644 index a4c2799d9..000000000 --- a/proto/src/prost/tendermint.store.rs +++ /dev/null @@ -1,7 +0,0 @@ -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BlockStoreState { - #[prost(int64, tag="1")] - pub base: i64, - #[prost(int64, tag="2")] - pub height: i64, -} diff --git a/proto/src/prost/tendermint.types.rs b/proto/src/prost/tendermint.types.rs index 61c23229e..4bc95203e 100644 --- a/proto/src/prost/tendermint.types.rs +++ b/proto/src/prost/tendermint.types.rs @@ -276,71 +276,6 @@ pub enum SignedMsgType { /// Proposals Proposal = 32, } -#[derive(::serde::Deserialize, ::serde::Serialize)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct CanonicalBlockId { - #[prost(bytes="vec", tag="1")] - pub hash: ::prost::alloc::vec::Vec, - #[prost(message, optional, tag="2")] - #[serde(alias = "parts")] - pub part_set_header: ::core::option::Option, -} -#[derive(::serde::Deserialize, ::serde::Serialize)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct CanonicalPartSetHeader { - #[prost(uint32, tag="1")] - pub total: u32, - #[prost(bytes="vec", tag="2")] - pub hash: ::prost::alloc::vec::Vec, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct CanonicalProposal { - /// type alias for byte - #[prost(enumeration="SignedMsgType", tag="1")] - pub r#type: i32, - /// canonicalization requires fixed size encoding here - #[prost(sfixed64, tag="2")] - pub height: i64, - /// canonicalization requires fixed size encoding here - #[prost(sfixed64, tag="3")] - pub round: i64, - #[prost(int64, tag="4")] - pub pol_round: i64, - #[prost(message, optional, tag="5")] - pub block_id: ::core::option::Option, - #[prost(message, optional, tag="6")] - pub timestamp: ::core::option::Option, - #[prost(string, tag="7")] - pub chain_id: ::prost::alloc::string::String, -} -#[derive(::serde::Deserialize, ::serde::Serialize)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct CanonicalVote { - /// type alias for byte - #[prost(enumeration="SignedMsgType", tag="1")] - pub r#type: i32, - /// canonicalization requires fixed size encoding here - #[prost(sfixed64, tag="2")] - pub height: i64, - /// canonicalization requires fixed size encoding here - #[prost(sfixed64, tag="3")] - pub round: i64, - #[prost(message, optional, tag="4")] - pub block_id: ::core::option::Option, - #[prost(message, optional, tag="5")] - pub timestamp: ::core::option::Option, - #[prost(string, tag="6")] - pub chain_id: ::prost::alloc::string::String, -} -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct EventDataRoundState { - #[prost(int64, tag="1")] - pub height: i64, - #[prost(int32, tag="2")] - pub round: i32, - #[prost(string, tag="3")] - pub step: ::prost::alloc::string::String, -} /// ConsensusParams contains consensus critical parameters that determine the /// validity of blocks. #[derive(Clone, PartialEq, ::prost::Message)] @@ -365,12 +300,6 @@ pub struct BlockParams { /// Note: must be greater or equal to -1 #[prost(int64, tag="2")] pub max_gas: i64, - /// Minimum time increment between consecutive blocks (in milliseconds) If the - /// block header timestamp is ahead of the system clock, decrease this value. - /// - /// Not exposed to the application. - #[prost(int64, tag="3")] - pub time_iota_ms: i64, } /// EvidenceParams determine how we handle evidence of malfeasance. #[derive(::serde::Deserialize, ::serde::Serialize)] @@ -420,6 +349,71 @@ pub struct HashedParams { pub block_max_gas: i64, } #[derive(::serde::Deserialize, ::serde::Serialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanonicalBlockId { + #[prost(bytes="vec", tag="1")] + pub hash: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="2")] + #[serde(alias = "parts")] + pub part_set_header: ::core::option::Option, +} +#[derive(::serde::Deserialize, ::serde::Serialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanonicalPartSetHeader { + #[prost(uint32, tag="1")] + pub total: u32, + #[prost(bytes="vec", tag="2")] + pub hash: ::prost::alloc::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanonicalProposal { + /// type alias for byte + #[prost(enumeration="SignedMsgType", tag="1")] + pub r#type: i32, + /// canonicalization requires fixed size encoding here + #[prost(sfixed64, tag="2")] + pub height: i64, + /// canonicalization requires fixed size encoding here + #[prost(sfixed64, tag="3")] + pub round: i64, + #[prost(int64, tag="4")] + pub pol_round: i64, + #[prost(message, optional, tag="5")] + pub block_id: ::core::option::Option, + #[prost(message, optional, tag="6")] + pub timestamp: ::core::option::Option, + #[prost(string, tag="7")] + pub chain_id: ::prost::alloc::string::String, +} +#[derive(::serde::Deserialize, ::serde::Serialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanonicalVote { + /// type alias for byte + #[prost(enumeration="SignedMsgType", tag="1")] + pub r#type: i32, + /// canonicalization requires fixed size encoding here + #[prost(sfixed64, tag="2")] + pub height: i64, + /// canonicalization requires fixed size encoding here + #[prost(sfixed64, tag="3")] + pub round: i64, + #[prost(message, optional, tag="4")] + pub block_id: ::core::option::Option, + #[prost(message, optional, tag="5")] + pub timestamp: ::core::option::Option, + #[prost(string, tag="6")] + pub chain_id: ::prost::alloc::string::String, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EventDataRoundState { + #[prost(int64, tag="1")] + pub height: i64, + #[prost(int32, tag="2")] + pub round: i32, + #[prost(string, tag="3")] + pub step: ::prost::alloc::string::String, +} +#[derive(::serde::Deserialize, ::serde::Serialize)] #[serde(from = "crate::serializers::evidence::EvidenceVariant", into = "crate::serializers::evidence::EvidenceVariant")] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Evidence { diff --git a/proto/src/prost/tendermint.version.rs b/proto/src/prost/tendermint.version.rs index bd1227266..f9b227c15 100644 --- a/proto/src/prost/tendermint.version.rs +++ b/proto/src/prost/tendermint.version.rs @@ -1,13 +1,3 @@ -/// App includes the protocol and software version for the application. -/// This information is included in ResponseInfo. The App.Protocol can be -/// updated in ResponseEndBlock. -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct App { - #[prost(uint64, tag="1")] - pub protocol: u64, - #[prost(string, tag="2")] - pub software: ::prost::alloc::string::String, -} /// Consensus captures the consensus rules for processing a block in the blockchain, /// including all blockchain data structures and the rules of the application's /// state transition machine. diff --git a/proto/src/tendermint.rs b/proto/src/tendermint.rs index 335cb2877..a65841e3b 100644 --- a/proto/src/tendermint.rs +++ b/proto/src/tendermint.rs @@ -18,10 +18,6 @@ pub mod rpc { } } -pub mod blockchain { - include!("prost/tendermint.blockchain.rs"); -} - pub mod libs { pub mod bits { include!("prost/tendermint.libs.bits.rs"); @@ -36,8 +32,8 @@ pub mod version { include!("prost/tendermint.version.rs"); } -pub mod store { - include!("prost/tendermint.store.rs"); +pub mod blocksync { + include!("prost/tendermint.blocksync.rs"); } pub mod privval { @@ -62,5 +58,5 @@ pub mod crypto { pub mod meta { pub const REPOSITORY: &str = "https://github.com/tendermint/tendermint"; - pub const COMMITISH: &str = "v0.34.9"; + pub const COMMITISH: &str = "v0.35.0"; } diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index d97e62813..753b983ce 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -78,6 +78,7 @@ subtle-encoding = { version = "0.5", default-features = false, features = ["bech url = { version = "2.2", default-features = false } walkdir = { version = "2.3", default-features = false } flex-error = { version = "0.4.4", default-features = false } +subtle = { version = "2", default-features = false } # Optional dependencies async-trait = { version = "0.1", optional = true, default-features = false } diff --git a/rpc/src/abci.rs b/rpc/src/abci.rs new file mode 100644 index 000000000..2cbb63df4 --- /dev/null +++ b/rpc/src/abci.rs @@ -0,0 +1,34 @@ +//! Old ABCI structures, formerly defined in `tendermint::abci`. +//! +//! The original contents of `tendermint::abci` were created only to model RPC +//! responses, not to model ABCI itself: +//! +//! > NOTE: This module contains types for ABCI responses as consumed from RPC +//! endpoints. It does not contain an ABCI protocol implementation. +//! +//! The old types should be eliminated and +//! merged with the new ABCI domain types. Moving them here in the meantime +//! disentangles improving the ABCI domain modeling from changes to the RPC +//! interface. + +mod code; +mod data; +mod gas; +mod info; +mod log; +mod path; + +pub mod responses; +pub mod tag; +pub mod transaction; + +pub use self::{ + code::Code, + data::Data, + gas::Gas, + info::Info, + log::Log, + path::Path, + responses::{DeliverTx, Event, Responses}, + transaction::Transaction, +}; diff --git a/tendermint/src/abci/code.rs b/rpc/src/abci/code.rs similarity index 91% rename from tendermint/src/abci/code.rs rename to rpc/src/abci/code.rs index 5a10dedfc..ccc53958a 100644 --- a/tendermint/src/abci/code.rs +++ b/rpc/src/abci/code.rs @@ -1,4 +1,4 @@ -use core::fmt; +use core::{fmt, num::NonZeroU32}; use serde::de::{Deserialize, Deserializer, Visitor}; use serde::{Serialize, Serializer}; @@ -15,7 +15,7 @@ pub enum Code { Ok, /// Error codes - Err(u32), + Err(NonZeroU32), } impl Default for Code { @@ -46,9 +46,9 @@ impl Code { impl From for Code { fn from(value: u32) -> Code { - match value { - 0 => Code::Ok, - err => Code::Err(err), + match NonZeroU32::new(value) { + Some(value) => Code::Err(value), + None => Code::Ok, } } } @@ -57,7 +57,7 @@ impl From for u32 { fn from(code: Code) -> u32 { match code { Code::Ok => 0, - Code::Err(err) => err, + Code::Err(err) => err.get(), } } } diff --git a/tendermint/src/abci/data.rs b/rpc/src/abci/data.rs similarity index 94% rename from tendermint/src/abci/data.rs rename to rpc/src/abci/data.rs index 5fc93f00f..a2c47bf32 100644 --- a/tendermint/src/abci/data.rs +++ b/rpc/src/abci/data.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; /// application-specific rules. #[derive(Clone, Debug, Eq, PartialEq, Default, Serialize, Deserialize)] #[serde(transparent)] -pub struct Data(#[serde(with = "crate::serializers::bytes::base64string")] Vec); +pub struct Data(#[serde(with = "tendermint::serializers::bytes::base64string")] Vec); impl From> for Data { fn from(value: Vec) -> Self { diff --git a/tendermint/src/abci/gas.rs b/rpc/src/abci/gas.rs similarity index 98% rename from tendermint/src/abci/gas.rs rename to rpc/src/abci/gas.rs index af7721d27..d6fe98e9d 100644 --- a/tendermint/src/abci/gas.rs +++ b/rpc/src/abci/gas.rs @@ -5,13 +5,13 @@ //! //! -use crate::error::Error; use crate::prelude::*; use core::{ fmt::{self, Display}, str::FromStr, }; use serde::{de::Error as _, Deserialize, Deserializer, Serialize, Serializer}; +use tendermint::error::Error; /// Gas: representation of transaction processing resource costs #[derive(Copy, Clone, Debug, Default, Eq, PartialEq, PartialOrd, Ord)] diff --git a/tendermint/src/abci/info.rs b/rpc/src/abci/info.rs similarity index 100% rename from tendermint/src/abci/info.rs rename to rpc/src/abci/info.rs diff --git a/tendermint/src/abci/log.rs b/rpc/src/abci/log.rs similarity index 100% rename from tendermint/src/abci/log.rs rename to rpc/src/abci/log.rs diff --git a/tendermint/src/abci/path.rs b/rpc/src/abci/path.rs similarity index 94% rename from tendermint/src/abci/path.rs rename to rpc/src/abci/path.rs index a49eabc3b..b5b3c8ff2 100644 --- a/tendermint/src/abci/path.rs +++ b/rpc/src/abci/path.rs @@ -1,12 +1,12 @@ //! Paths to ABCI data -use crate::error::Error; use crate::prelude::*; use core::{ fmt::{self, Display}, str::FromStr, }; use serde::{Deserialize, Serialize}; +use tendermint::error::Error; /// Path to ABCI data #[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] diff --git a/tendermint/src/abci/responses.rs b/rpc/src/abci/responses.rs similarity index 98% rename from tendermint/src/abci/responses.rs rename to rpc/src/abci/responses.rs index 4a112fcfa..614e1f447 100644 --- a/tendermint/src/abci/responses.rs +++ b/rpc/src/abci/responses.rs @@ -2,9 +2,9 @@ use super::{code::Code, data::Data, gas::Gas, info::Info, log::Log, tag::Tag}; use crate::prelude::*; -use crate::{consensus, serializers, validator}; use core::fmt::{self, Display}; use serde::{Deserialize, Deserializer, Serialize}; +use tendermint::{consensus, serializers, validator}; /// Responses for ABCI calls which occur during block processing. /// diff --git a/tendermint/src/abci/tag.rs b/rpc/src/abci/tag.rs similarity index 60% rename from tendermint/src/abci/tag.rs rename to rpc/src/abci/tag.rs index 50601c5dd..98f868a1b 100644 --- a/tendermint/src/abci/tag.rs +++ b/rpc/src/abci/tag.rs @@ -1,10 +1,9 @@ //! Tags -use crate::error::Error; use crate::prelude::*; use core::{fmt, str::FromStr}; use serde::{Deserialize, Serialize}; -use tendermint_proto::serializers::bytes::base64string; +use tendermint::error::Error; /// Tags #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] @@ -18,13 +17,7 @@ pub struct Tag { /// Tag keys #[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize)] -pub struct Key( - #[serde( - serialize_with = "base64string::serialize", - deserialize_with = "base64string::deserialize_to_string" - )] - String, -); +pub struct Key(String); impl AsRef for Key { fn as_ref(&self) -> &str { @@ -48,13 +41,7 @@ impl fmt::Display for Key { /// Tag values #[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] -pub struct Value( - #[serde( - serialize_with = "base64string::serialize", - deserialize_with = "base64string::deserialize_to_string" - )] - String, -); +pub struct Value(String); impl AsRef for Value { fn as_ref(&self) -> &str { @@ -75,16 +62,3 @@ impl fmt::Display for Value { write!(f, "{}", &self.0) } } - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn tag_serde() { - let json = r#"{"key": "cGFja2V0X3RpbWVvdXRfaGVpZ2h0", "value": "MC00ODQw"}"#; - let tag: Tag = serde_json::from_str(json).unwrap(); - assert_eq!("packet_timeout_height", tag.key.0); - assert_eq!("0-4840", tag.value.0); - } -} diff --git a/tendermint/src/abci/transaction.rs b/rpc/src/abci/transaction.rs similarity index 100% rename from tendermint/src/abci/transaction.rs rename to rpc/src/abci/transaction.rs diff --git a/tendermint/src/abci/transaction/hash.rs b/rpc/src/abci/transaction/hash.rs similarity index 98% rename from tendermint/src/abci/transaction/hash.rs rename to rpc/src/abci/transaction/hash.rs index b9b00136f..5e0c47c2d 100644 --- a/tendermint/src/abci/transaction/hash.rs +++ b/rpc/src/abci/transaction/hash.rs @@ -1,6 +1,5 @@ //! Transaction hashes -use crate::error::Error; use crate::prelude::*; use core::{ fmt::{self, Debug, Display}, @@ -9,6 +8,7 @@ use core::{ use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; use subtle::{self, ConstantTimeEq}; use subtle_encoding::hex; +use tendermint::error::Error; /// Size of a transaction hash in bytes pub const LENGTH: usize = 32; diff --git a/rpc/src/client.rs b/rpc/src/client.rs index a1ce9ad3a..150bf42a3 100644 --- a/rpc/src/client.rs +++ b/rpc/src/client.rs @@ -14,6 +14,7 @@ pub use transport::websocket::{ WebSocketClient, WebSocketClientDriver, WebSocketClientUrl, WebSocketConfig, }; +use crate::abci::{self, Transaction}; use crate::endpoint::validators::DEFAULT_VALIDATORS_PER_PAGE; use crate::endpoint::*; use crate::paging::Paging; @@ -22,7 +23,6 @@ use crate::query::Query; use crate::{Error, Order, SimpleRequest}; use async_trait::async_trait; use core::time::Duration; -use tendermint::abci::{self, Transaction}; use tendermint::block::Height; use tendermint::evidence::Evidence; use tendermint::Genesis; diff --git a/rpc/src/client/bin/main.rs b/rpc/src/client/bin/main.rs index eab7664f0..b6f559a15 100644 --- a/rpc/src/client/bin/main.rs +++ b/rpc/src/client/bin/main.rs @@ -3,8 +3,7 @@ use core::str::FromStr; use futures::StreamExt; use structopt::StructOpt; -use tendermint::abci::transaction::Hash; -use tendermint::abci::{Path, Transaction}; +use tendermint_rpc::abci::{transaction::Hash, Path, Transaction}; use tendermint_rpc::query::Query; use tendermint_rpc::{ Client, Error, HttpClient, Order, Paging, Scheme, Subscription, SubscriptionClient, Url, diff --git a/rpc/src/client/transport/mock.rs b/rpc/src/client/transport/mock.rs index f600b5c31..0949f17dd 100644 --- a/rpc/src/client/transport/mock.rs +++ b/rpc/src/client/transport/mock.rs @@ -247,9 +247,11 @@ mod test { use tokio::fs; async fn read_json_fixture(name: &str) -> String { - fs::read_to_string(PathBuf::from("./tests/support/").join(name.to_owned() + ".json")) - .await - .unwrap() + fs::read_to_string( + PathBuf::from("./tests/kvstore_fixtures").join(name.to_owned() + ".json"), + ) + .await + .unwrap() } async fn read_event(name: &str) -> Event { @@ -258,8 +260,8 @@ mod test { #[tokio::test] async fn mock_client() { - let abci_info_fixture = read_json_fixture("abci_info").await; - let block_fixture = read_json_fixture("block").await; + let abci_info_fixture = read_json_fixture("incoming/abci_info").await; + let block_fixture = read_json_fixture("incoming/block_at_height_10").await; let matcher = MockRequestMethodMatcher::default() .map(Method::AbciInfo, Ok(abci_info_fixture)) .map(Method::Block, Ok(block_fixture)); @@ -267,12 +269,12 @@ mod test { let driver_hdl = tokio::spawn(async move { driver.run().await }); let abci_info = client.abci_info().await.unwrap(); - assert_eq!("GaiaApp".to_string(), abci_info.data); - assert_eq!(Height::from(488120_u32), abci_info.last_block_height); + assert_eq!("{\"size\":0}".to_string(), abci_info.data); + assert_eq!(Height::from(6_u32), abci_info.last_block_height); let block = client.block(Height::from(10_u32)).await.unwrap().block; assert_eq!(Height::from(10_u32), block.header.height); - assert_eq!("cosmoshub-2".parse::().unwrap(), block.header.chain_id); + assert_eq!("dockerchain".parse::().unwrap(), block.header.chain_id); client.close(); driver_hdl.await.unwrap().unwrap(); @@ -283,9 +285,9 @@ mod test { let (client, driver) = MockClient::new(MockRequestMethodMatcher::default()); let driver_hdl = tokio::spawn(async move { driver.run().await }); - let event1 = read_event("event_new_block_1").await; - let event2 = read_event("event_new_block_2").await; - let event3 = read_event("event_new_block_3").await; + let event1 = read_event("incoming/subscribe_newblock_0").await; + let event2 = read_event("incoming/subscribe_newblock_1").await; + let event3 = read_event("incoming/subscribe_newblock_2").await; let events = vec![event1, event2, event3]; let subs1 = client.subscribe(EventType::NewBlock.into()).await.unwrap(); diff --git a/rpc/src/client/transport/router.rs b/rpc/src/client/transport/router.rs index c699717c3..d8b24712b 100644 --- a/rpc/src/client/transport/router.rs +++ b/rpc/src/client/transport/router.rs @@ -155,9 +155,11 @@ mod test { use tokio::time::{self, Duration}; async fn read_json_fixture(name: &str) -> String { - fs::read_to_string(PathBuf::from("./tests/support/").join(name.to_owned() + ".json")) - .await - .unwrap() + fs::read_to_string( + PathBuf::from("./tests/kvstore_fixtures/").join(name.to_owned() + ".json"), + ) + .await + .unwrap() } async fn read_event(name: &str) -> Event { @@ -201,7 +203,7 @@ mod test { // Another subscription with a different query router.add(subs3_id, "query2", subs3_event_tx); - let mut ev = read_event("event_new_block_1").await; + let mut ev = read_event("incoming/subscribe_newblock_0").await; ev.query = "query1".into(); router.publish_event(ev.clone()); diff --git a/rpc/src/client/transport/websocket.rs b/rpc/src/client/transport/websocket.rs index f086910c3..2722ca67a 100644 --- a/rpc/src/client/transport/websocket.rs +++ b/rpc/src/client/transport/websocket.rs @@ -1094,9 +1094,11 @@ mod test { } async fn read_json_fixture(name: &str) -> String { - fs::read_to_string(PathBuf::from("./tests/support/").join(name.to_owned() + ".json")) - .await - .unwrap() + fs::read_to_string( + PathBuf::from("./tests/kvstore_fixtures/").join(name.to_owned() + ".json"), + ) + .await + .unwrap() } async fn read_event(name: &str) -> Event { @@ -1105,9 +1107,9 @@ mod test { #[tokio::test] async fn websocket_client_happy_path() { - let event1 = read_event("event_new_block_1").await; - let event2 = read_event("event_new_block_2").await; - let event3 = read_event("event_new_block_3").await; + let event1 = read_event("incoming/subscribe_newblock_0").await; + let event2 = read_event("incoming/subscribe_newblock_1").await; + let event3 = read_event("incoming/subscribe_newblock_2").await; let test_events = vec![event1, event2, event3]; println!("Starting WebSocket server..."); diff --git a/rpc/src/endpoint/abci_info.rs b/rpc/src/endpoint/abci_info.rs index 37e6fd90a..212d58a4c 100644 --- a/rpc/src/endpoint/abci_info.rs +++ b/rpc/src/endpoint/abci_info.rs @@ -1,8 +1,9 @@ //! `/abci_info` endpoint JSON-RPC wrapper -use serde::{Deserialize, Serialize}; - use core::convert::{TryFrom, TryInto}; + +use bytes::Bytes; +use serde::{Deserialize, Serialize}; use tendermint::block; use tendermint::Error; use tendermint_proto::abci::ResponseInfo; @@ -49,7 +50,7 @@ pub struct AbciInfo { pub last_block_height: block::Height, /// Last app hash for the block - pub last_block_app_hash: Vec, + pub last_block_app_hash: Bytes, } impl TryFrom for AbciInfo { diff --git a/rpc/src/endpoint/abci_query.rs b/rpc/src/endpoint/abci_query.rs index c4dacc5fc..cd4841895 100644 --- a/rpc/src/endpoint/abci_query.rs +++ b/rpc/src/endpoint/abci_query.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; -use tendermint::abci::{Code, Log, Path}; +use crate::abci::{Code, Log, Path}; use tendermint::block; use tendermint::merkle::proof::Proof; use tendermint::serializers; diff --git a/rpc/src/endpoint/block_results.rs b/rpc/src/endpoint/block_results.rs index 0f2c8fcb6..8bf8df1f3 100644 --- a/rpc/src/endpoint/block_results.rs +++ b/rpc/src/endpoint/block_results.rs @@ -2,7 +2,8 @@ use serde::{Deserialize, Serialize}; -use tendermint::{abci, block, consensus, validator}; +use crate::abci; +use tendermint::{block, consensus, validator}; use crate::prelude::*; diff --git a/rpc/src/endpoint/broadcast/tx_async.rs b/rpc/src/endpoint/broadcast/tx_async.rs index 2cd5bd8ae..0de93113e 100644 --- a/rpc/src/endpoint/broadcast/tx_async.rs +++ b/rpc/src/endpoint/broadcast/tx_async.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; -use tendermint::abci::{transaction, Code, Data, Log, Transaction}; +use crate::abci::{transaction, Code, Data, Log, Transaction}; /// `/broadcast_tx_async`: broadcast a transaction and return immediately. #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] diff --git a/rpc/src/endpoint/broadcast/tx_commit.rs b/rpc/src/endpoint/broadcast/tx_commit.rs index bb4cf93a5..4e0a60bfb 100644 --- a/rpc/src/endpoint/broadcast/tx_commit.rs +++ b/rpc/src/endpoint/broadcast/tx_commit.rs @@ -3,12 +3,10 @@ use serde::{Deserialize, Serialize}; -use tendermint::abci::responses::Codespace; -use tendermint::abci::{Event, Gas, Info}; -use tendermint::{ - abci::{transaction, Code, Data, Log, Transaction}, - block, +use crate::abci::{ + responses::Codespace, transaction, Code, Data, Event, Gas, Info, Log, Transaction, }; +use tendermint::block; use crate::prelude::*; diff --git a/rpc/src/endpoint/broadcast/tx_sync.rs b/rpc/src/endpoint/broadcast/tx_sync.rs index 706d9d125..e188525a4 100644 --- a/rpc/src/endpoint/broadcast/tx_sync.rs +++ b/rpc/src/endpoint/broadcast/tx_sync.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; -use tendermint::abci::{transaction, Code, Data, Log, Transaction}; +use crate::abci::{transaction, Code, Data, Log, Transaction}; /// `/broadcast_tx_sync`: returns with the response from `CheckTx`. #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] diff --git a/rpc/src/endpoint/evidence.rs b/rpc/src/endpoint/evidence.rs index 98bcb3158..c9e387b81 100644 --- a/rpc/src/endpoint/evidence.rs +++ b/rpc/src/endpoint/evidence.rs @@ -2,8 +2,9 @@ use crate::Method; +use crate::abci::transaction; use serde::{Deserialize, Serialize}; -use tendermint::{abci::transaction, evidence::Evidence}; +use tendermint::evidence::Evidence; /// `/broadcast_evidence`: broadcast an evidence. #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] diff --git a/rpc/src/endpoint/net_info.rs b/rpc/src/endpoint/net_info.rs index c3a7787c7..b28164a93 100644 --- a/rpc/src/endpoint/net_info.rs +++ b/rpc/src/endpoint/net_info.rs @@ -37,7 +37,7 @@ pub struct Response { pub n_peers: u64, /// Peer information - pub peers: Vec, + pub peers: Option>, } impl crate::Response for Response {} diff --git a/rpc/src/endpoint/tx.rs b/rpc/src/endpoint/tx.rs index e3de3ebb5..e97967c08 100644 --- a/rpc/src/endpoint/tx.rs +++ b/rpc/src/endpoint/tx.rs @@ -1,8 +1,9 @@ //! `/tx` endpoint JSON-RPC wrapper +use crate::abci; use crate::Method; use serde::{Deserialize, Serialize}; -use tendermint::{abci, block}; +use tendermint::block; use tendermint_proto::types::TxProof; /// Request for finding a transaction by its hash. @@ -10,9 +11,8 @@ use tendermint_proto::types::TxProof; pub struct Request { /// The hash of the transaction we want to find. /// - /// Serialized internally into a base64-encoded string before sending to - /// the RPC server. - #[serde(with = "tendermint::serializers::hash_base64")] + /// Serialized internally into a hexadecimal-encoded string before sending + /// to the RPC server. pub hash: abci::transaction::Hash, /// Whether or not to include the proofs of the transaction's inclusion in /// the block. diff --git a/rpc/src/event.rs b/rpc/src/event.rs index cae0c62fd..4dce1bec3 100644 --- a/rpc/src/event.rs +++ b/rpc/src/event.rs @@ -1,8 +1,7 @@ //! RPC subscription event-related data structures. -use alloc::collections::BTreeMap as HashMap; +use crate::abci::responses::{BeginBlock, EndBlock}; use serde::{Deserialize, Serialize}; -use tendermint::abci::responses::{BeginBlock, EndBlock}; use tendermint::Block; use crate::prelude::*; @@ -18,8 +17,8 @@ pub struct Event { pub query: String, /// The data associated with the event. pub data: EventData, - /// Event type and attributes map. - pub events: Option>>, + /// Event type and attributes list. + pub events: Option>, } impl Response for Event {} @@ -73,5 +72,5 @@ pub struct TxResult { pub log: Option, pub gas_wanted: Option, pub gas_used: Option, - pub events: Vec, + pub events: Vec, } diff --git a/rpc/src/lib.rs b/rpc/src/lib.rs index 9ab6b672f..dbbd4c804 100644 --- a/rpc/src/lib.rs +++ b/rpc/src/lib.rs @@ -45,6 +45,7 @@ pub use client::{HttpClient, HttpClientUrl}; #[cfg(feature = "websocket-client")] pub use client::{WebSocketClient, WebSocketClientDriver, WebSocketClientUrl, WebSocketConfig}; +pub mod abci; pub mod endpoint; pub mod error; pub mod event; diff --git a/rpc/tests/kvstore_fixtures.rs b/rpc/tests/kvstore_fixtures.rs index 1fb40251d..d8915b3cc 100644 --- a/rpc/tests/kvstore_fixtures.rs +++ b/rpc/tests/kvstore_fixtures.rs @@ -3,10 +3,10 @@ use core::str::FromStr; use std::{fs, path::PathBuf}; use subtle_encoding::{base64, hex}; -use tendermint::abci::transaction::Hash; use tendermint::evidence::Duration; use tendermint::public_key; use tendermint_config::net::Address; +use tendermint_rpc::abci::transaction::Hash; use tendermint_rpc::{ endpoint, error::{Error, ErrorDetail}, @@ -252,15 +252,28 @@ fn outgoing_fixtures() { base64::decode("dHg1PXZhbHVl").unwrap() ); } - "tx" => { + "tx_prove" => { let wrapped = serde_json::from_str::>(&content) .unwrap(); assert_eq!( wrapped.params().hash, Hash::new([ - 214, 63, 156, 35, 121, 30, 97, 4, 16, 181, 118, 216, 194, 123, 181, 174, - 172, 147, 204, 26, 88, 82, 36, 40, 167, 179, 42, 18, 118, 8, 88, 96 + 252, 184, 111, 113, 196, 239, 244, 62, 19, 197, 31, 161, 39, 145, 246, 221, + 29, 219, 134, 0, 165, 17, 49, 190, 34, 137, 97, 77, 104, 130, 246, 190 + ]) + ); + assert!(wrapped.params().prove); + } + "tx_no_prove" => { + let wrapped = + serde_json::from_str::>(&content) + .unwrap(); + assert_eq!( + wrapped.params().hash, + Hash::new([ + 252, 184, 111, 113, 196, 239, 244, 62, 19, 197, 31, 161, 39, 145, 246, 221, + 29, 219, 134, 0, 165, 17, 49, 190, 34, 137, 97, 77, 104, 130, 246, 190 ]) ); assert!(!wrapped.params().prove); @@ -318,7 +331,7 @@ fn incoming_fixtures() { let result = endpoint::abci_info::Response::from_string(content).unwrap(); assert_eq!(result.response.app_version, 1); assert_eq!(result.response.data, "{\"size\":0}"); - assert_eq!(result.response.last_block_app_hash, b"AAAAAAAAAAA="); + assert_eq!(result.response.last_block_app_hash, b"AAAAAAAAAAA="[..]); assert_eq!(result.response.version, "0.17.0"); } "abci_query_with_existing_key" => { @@ -352,11 +365,11 @@ fn incoming_fixtures() { match res { Err(Error(ErrorDetail::Response(e), _)) => { let response = e.source; - assert_eq!(response.code(), Code::InternalError); - assert_eq!(response.message(), "Internal error"); + assert_eq!(response.code(), Code::InvalidRequest); + assert_eq!(response.message(), "Invalid Request"); assert_eq!( response.data(), - Some("height must be greater than 0, but got 0") + Some("height must be greater than zero (requested height: 0)") ); } _ => panic!("expected Response error"), @@ -364,7 +377,7 @@ fn incoming_fixtures() { } "block_at_height_1" => { let result = endpoint::block::Response::from_string(content).unwrap(); - assert!(result.block.data.iter().next().is_none()); + assert!(result.block.data.get(0).is_none()); assert!(result.block.evidence.iter().next().is_none()); assert!(result.block.header.app_hash.value().is_empty()); assert_eq!(result.block.header.chain_id.as_str(), CHAIN_ID); @@ -405,7 +418,7 @@ fn incoming_fixtures() { } "block_at_height_10" => { let result = endpoint::block::Response::from_string(content).unwrap(); - assert!(result.block.data.iter().next().is_none()); + assert!(result.block.data.get(0).is_none()); assert!(result.block.evidence.iter().next().is_none()); assert_eq!(result.block.header.app_hash.value(), [0u8; 8]); assert_eq!(result.block.header.chain_id.as_str(), CHAIN_ID); @@ -462,43 +475,8 @@ fn incoming_fixtures() { "block_search" => { let result = endpoint::block_search::Response::from_string(content).unwrap(); assert_eq!(result.total_count as usize, result.blocks.len()); - // Test a few selected attributes of the results. - for block in result.blocks { - assert!(block.block.data.iter().next().is_none()); - assert!(block.block.evidence.iter().next().is_none()); - assert_eq!(block.block.header.app_hash.value(), [0u8; 8]); - assert_eq!(block.block.header.chain_id.as_str(), CHAIN_ID); - assert!(!block.block.header.consensus_hash.is_empty()); - assert!(block.block.header.data_hash.is_none()); - assert!(block.block.header.evidence_hash.is_none()); - assert_eq!(block.block.header.height.value(), 10); - assert!(block.block.header.last_block_id.is_some()); - assert_eq!(block.block.header.last_commit_hash, empty_merkle_root_hash); - assert_eq!(block.block.header.last_results_hash, empty_merkle_root_hash); - assert!(!block.block.header.next_validators_hash.is_empty()); - assert_ne!( - block.block.header.proposer_address.as_bytes(), - [0u8; tendermint::account::LENGTH] - ); - assert!( - block - .block - .header - .time - .duration_since(informal_epoch) - .unwrap() - .as_secs() - > 0 - ); - assert!(!block.block.header.validators_hash.is_empty()); - assert_eq!( - block.block.header.version, - tendermint::block::header::Version { block: 10, app: 1 } - ); - assert!(block.block.last_commit.is_some()); - assert!(!block.block_id.hash.is_empty()); - assert!(!block.block_id.part_set_header.hash.is_empty()); - assert_eq!(block.block_id.part_set_header.total, 1); + for response in result.blocks { + assert!(response.block.header.height.value() > 1); } } "blockchain_from_1_to_10" => { @@ -550,21 +528,21 @@ fn incoming_fixtures() { } "broadcast_tx_async" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "broadcast_tx_commit" => { let result = endpoint::broadcast::tx_commit::Response::from_string(content).unwrap(); - assert_eq!(result.check_tx.code, tendermint::abci::Code::Ok); + assert_eq!(result.check_tx.code, tendermint_rpc::abci::Code::Ok); assert_eq!( result.check_tx.codespace, - tendermint::abci::responses::Codespace::default() + tendermint_rpc::abci::responses::Codespace::default() ); assert!(result.check_tx.data.is_none()); assert!(result.check_tx.events.is_empty()); @@ -573,10 +551,10 @@ fn incoming_fixtures() { //assert_eq!(result.check_tx.gas_wanted.value(), 1); assert!(result.check_tx.info.to_string().is_empty()); assert!(result.check_tx.log.value().is_empty()); - assert_eq!(result.deliver_tx.code, tendermint::abci::Code::Ok); + assert_eq!(result.deliver_tx.code, tendermint_rpc::abci::Code::Ok); assert_eq!( result.deliver_tx.codespace, - tendermint::abci::responses::Codespace::default() + tendermint_rpc::abci::responses::Codespace::default() ); assert!(result.deliver_tx.data.is_none()); assert_eq!(result.deliver_tx.events.len(), 1); @@ -644,16 +622,16 @@ fn incoming_fixtures() { assert!(result.deliver_tx.log.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); } "broadcast_tx_sync" => { let result = endpoint::broadcast::tx_sync::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } @@ -708,7 +686,7 @@ fn incoming_fixtures() { assert_eq!(u64::from(result.block_height), 10_u64); assert_eq!(result.consensus_params.block.max_bytes, 22020096_u64); assert_eq!(result.consensus_params.block.max_gas, -1_i64); - assert_eq!(result.consensus_params.block.time_iota_ms, 500_i64); + assert_eq!(result.consensus_params.block.time_iota_ms, 1000_i64); assert_eq!( result.consensus_params.evidence.max_age_duration, Duration(core::time::Duration::from_nanos(172800000000000_u64)) @@ -789,7 +767,7 @@ fn incoming_fixtures() { assert_eq!(result.listeners[0].to_string(), "Listener(@)"); assert!(result.listening); assert_eq!(result.n_peers, 0); - assert!(result.peers.is_empty()); + assert!(result.peers.is_none()); } "status" => { let result = endpoint::status::Response::from_string(content).unwrap(); @@ -815,9 +793,12 @@ fn incoming_fixtures() { app: 1 } ); - assert_eq!(result.node_info.version.to_string(), "v0.34.9"); + assert_eq!(result.node_info.version.to_string(), "0.35.0-unreleased"); assert!(!result.sync_info.catching_up); - assert_eq!(result.sync_info.latest_app_hash.value(), [0; 8]); + assert_eq!( + result.sync_info.latest_app_hash.value(), + [6, 0, 0, 0, 0, 0, 0, 0] + ); assert!(!result.sync_info.latest_block_hash.is_empty()); assert!( result @@ -862,7 +843,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -917,7 +898,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -972,7 +953,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -1027,7 +1008,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -1082,7 +1063,7 @@ fn incoming_fixtures() { } = result.data { let b = block.unwrap(); - assert!(b.data.iter().next().is_none()); + assert!(b.data.get(0).is_none()); assert!(b.evidence.iter().next().is_none()); assert!(!b.header.app_hash.value().is_empty()); assert_eq!(b.header.chain_id.as_str(), CHAIN_ID); @@ -1160,19 +1141,7 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx0"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + check_event_attrs(&result.events.unwrap(), "tx0", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_1" => { @@ -1204,19 +1173,8 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx1"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + + check_event_attrs(&result.events.unwrap(), "tx1", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_2" => { @@ -1248,19 +1206,7 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx2"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + check_event_attrs(&result.events.unwrap(), "tx2", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_3" => { @@ -1292,19 +1238,7 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx3"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + check_event_attrs(&result.events.unwrap(), "tx3", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_4" => { @@ -1336,91 +1270,101 @@ fn incoming_fixtures() { } else { panic!("not a tx"); } - for (k, v) in result.events.unwrap() { - assert_eq!(v.len(), 1); - match k.as_str() { - "app.creator" => assert_eq!(v[0], "Cosmoshi Netowoko"), - "app.index_key" => assert_eq!(v[0], "index is working"), - "app.key" => assert_eq!(v[0], "tx4"), - "app.noindex_key" => assert_eq!(v[0], "index is working"), - "tm.event" => assert_eq!(v[0], "Tx"), - "tx.hash" => assert_eq!(v[0].len(), 64), - "tx.height" => assert_eq!(v[0], height.to_string()), - _ => panic!("unknown event found {}", k), - } - } + check_event_attrs(&result.events.unwrap(), "tx4", height); assert_eq!(result.query, "tm.event = 'Tx'"); } "subscribe_txs_broadcast_tx_0" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_1" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_2" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_3" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_4" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } "subscribe_txs_broadcast_tx_5" => { let result = endpoint::broadcast::tx_async::Response::from_string(content).unwrap(); - assert_eq!(result.code, tendermint::abci::Code::Ok); + assert_eq!(result.code, tendermint_rpc::abci::Code::Ok); assert!(result.data.value().is_empty()); assert_ne!( result.hash, - tendermint::abci::transaction::Hash::new([0; 32]) + tendermint_rpc::abci::transaction::Hash::new([0; 32]) ); assert!(result.log.value().is_empty()); } - "tx" => { + "tx_prove" => { + let result = endpoint::tx::Response::from_string(content).unwrap(); + assert_eq!( + result.hash, + Hash::new([ + 252, 184, 111, 113, 196, 239, 244, 62, 19, 197, 31, 161, 39, 145, 246, 221, + 29, 219, 134, 0, 165, 17, 49, 190, 34, 137, 97, 77, 104, 130, 246, 190 + ]) + ); + assert_eq!(result.height.value(), 20); + assert!(result.proof.is_some()); + let proof = result.proof.unwrap(); + assert_eq!( + proof.root_hash, + vec![ + 199, 124, 183, 99, 203, 39, 4, 138, 141, 159, 9, 218, 112, 123, 122, 25, + 236, 244, 180, 12, 150, 122, 87, 207, 22, 206, 222, 225, 165, 19, 10, 143 + ] + ); + assert_eq!(proof.proof.unwrap().total, 2); + } + "tx_no_prove" => { let result = endpoint::tx::Response::from_string(content).unwrap(); assert_eq!( result.hash, Hash::new([ - 214, 63, 156, 35, 121, 30, 97, 4, 16, 181, 118, 216, 194, 123, 181, 174, - 172, 147, 204, 26, 88, 82, 36, 40, 167, 179, 42, 18, 118, 8, 88, 96 + 252, 184, 111, 113, 196, 239, 244, 62, 19, 197, 31, 161, 39, 145, 246, 221, + 29, 219, 134, 0, 165, 17, 49, 190, 34, 137, 97, 77, 104, 130, 246, 190 ]) ); - assert_eq!(u64::from(result.height), 12u64); + assert_eq!(result.height.value(), 20); + assert!(result.proof.is_none()); } "tx_search_no_prove" => { let result = endpoint::tx_search::Response::from_string(content).unwrap(); @@ -1428,7 +1372,7 @@ fn incoming_fixtures() { // Test a few selected attributes of the results. for tx in result.txs { assert_ne!(tx.hash.as_bytes(), [0; 32]); - assert_eq!(tx.tx_result.code, tendermint::abci::Code::Ok); + assert_eq!(tx.tx_result.code, tendermint_rpc::abci::Code::Ok); assert_eq!(tx.tx_result.events.len(), 1); assert_eq!(tx.tx_result.events[0].type_str, "app"); assert_eq!(tx.tx_result.gas_used.value(), 0); @@ -1444,7 +1388,7 @@ fn incoming_fixtures() { // Test a few selected attributes of the results. for tx in result.txs { assert_ne!(tx.hash.as_bytes(), [0; 32]); - assert_eq!(tx.tx_result.code, tendermint::abci::Code::Ok); + assert_eq!(tx.tx_result.code, tendermint_rpc::abci::Code::Ok); assert_eq!(tx.tx_result.events.len(), 1); assert_eq!(tx.tx_result.events[0].type_str, "app"); assert_eq!(tx.tx_result.gas_used.value(), 0); @@ -1463,3 +1407,29 @@ fn incoming_fixtures() { } } } + +fn check_event_attrs(events: &[tendermint_rpc::abci::Event], app_key: &str, height: i64) { + for event in events { + for attr in &event.attributes { + match event.type_str.as_ref() { + "app" => match attr.key.as_ref() { + "creator" => assert_eq!(attr.value.as_ref(), "Cosmoshi Netowoko"), + "index_key" => assert_eq!(attr.value.as_ref(), "index is working"), + "key" => assert_eq!(attr.value.as_ref(), app_key), + "noindex_key" => assert_eq!(attr.value.as_ref(), "index is working"), + _ => panic!("unrecognized app attribute found \"{}\"", attr.key), + }, + "tx" => match attr.key.as_ref() { + "hash" => assert_eq!(attr.value.as_ref().len(), 64), + "height" => assert_eq!(attr.value.as_ref(), height.to_string()), + _ => panic!("unrecognized tx attribute found \"{}\"", attr.key), + }, + "tm" => match attr.key.as_ref() { + "event" => assert_eq!(attr.value.as_ref(), "Tx"), + _ => panic!("unrecognized tm attribute found \"{}\"", attr.key), + }, + _ => panic!("unrecognized event type found \"{}\"", event.type_str), + } + } + } +} diff --git a/rpc/tests/kvstore_fixtures/incoming/abci_info.json b/rpc/tests/kvstore_fixtures/incoming/abci_info.json index a94f499fa..97355e2b8 100644 --- a/rpc/tests/kvstore_fixtures/incoming/abci_info.json +++ b/rpc/tests/kvstore_fixtures/incoming/abci_info.json @@ -1,12 +1,12 @@ { - "id": "48e82c4a-4018-433e-9557-c40ac927676f", + "id": "332cf099-c4d1-46b6-beaa-cce28a940e48", "jsonrpc": "2.0", "result": { "response": { "app_version": "1", "data": "{\"size\":0}", "last_block_app_hash": "AAAAAAAAAAA=", - "last_block_height": "32", + "last_block_height": "6", "version": "0.17.0" } } diff --git a/rpc/tests/kvstore_fixtures/incoming/abci_query_with_existing_key.json b/rpc/tests/kvstore_fixtures/incoming/abci_query_with_existing_key.json index fee2a734a..d1798fe0f 100644 --- a/rpc/tests/kvstore_fixtures/incoming/abci_query_with_existing_key.json +++ b/rpc/tests/kvstore_fixtures/incoming/abci_query_with_existing_key.json @@ -1,11 +1,11 @@ { - "id": "ae5b4026-3be4-46ea-876e-2177b74e79a7", + "id": "95375ef6-6ca4-4d14-b28e-24deb522b968", "jsonrpc": "2.0", "result": { "response": { "code": 0, "codespace": "", - "height": "44", + "height": "22", "index": "0", "info": "", "key": "dHgw", diff --git a/rpc/tests/kvstore_fixtures/incoming/abci_query_with_non_existent_key.json b/rpc/tests/kvstore_fixtures/incoming/abci_query_with_non_existent_key.json index 3bda4fb05..5e1c9a210 100644 --- a/rpc/tests/kvstore_fixtures/incoming/abci_query_with_non_existent_key.json +++ b/rpc/tests/kvstore_fixtures/incoming/abci_query_with_non_existent_key.json @@ -1,11 +1,11 @@ { - "id": "a8a36384-95f9-481f-8fc5-4a820176e869", + "id": "cb61fc5e-5207-4e5e-bf37-9d4d1a0f21a9", "jsonrpc": "2.0", "result": { "response": { "code": 0, "codespace": "", - "height": "32", + "height": "6", "index": "0", "info": "", "key": "bm9uX2V4aXN0ZW50X2tleQ==", diff --git a/rpc/tests/kvstore_fixtures/incoming/block_at_height_0.json b/rpc/tests/kvstore_fixtures/incoming/block_at_height_0.json index 5ab877e36..89f0c70e5 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_at_height_0.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_at_height_0.json @@ -1,9 +1,9 @@ { "error": { - "code": -32603, - "data": "height must be greater than 0, but got 0", - "message": "Internal error" + "code": -32600, + "data": "height must be greater than zero (requested height: 0)", + "message": "Invalid Request" }, - "id": "c0ba0ff6-0afd-4d18-bc15-0891696d42f2", + "id": "f887795a-4940-4152-9460-1c6bb3f87a5a", "jsonrpc": "2.0" } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/block_at_height_1.json b/rpc/tests/kvstore_fixtures/incoming/block_at_height_1.json index 2635e49aa..5a2aa0458 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_at_height_1.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_at_height_1.json @@ -1,5 +1,5 @@ { - "id": "0166b641-4967-4b3c-a36a-73ea4e5a737a", + "id": "a37bcc8e-6a32-4157-9200-a26be9981bbd", "jsonrpc": "2.0", "result": { "block": { @@ -25,10 +25,10 @@ }, "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:29.232984022Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:33.387236819Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -48,9 +48,9 @@ } }, "block_id": { - "hash": "44C37753BF31FD4238227E19213F042699F62416D4E5422BBA59095FC4BEE039", + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", "parts": { - "hash": "13EEDAF51D61F7FF513FCD1B6387E0A3E306E49E5DCEA43CAFE77FB7B951DD4B", + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", "total": 1 } } diff --git a/rpc/tests/kvstore_fixtures/incoming/block_at_height_10.json b/rpc/tests/kvstore_fixtures/incoming/block_at_height_10.json index f085fcfe5..975884a09 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_at_height_10.json @@ -1,5 +1,5 @@ { - "id": "d01f0a06-172c-48b8-a9ce-5db74af08ad1", + "id": "988f944f-4d85-486f-ad27-2f3574c2a4a3", "jsonrpc": "2.0", "result": { "block": { @@ -17,18 +17,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "10", "last_block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, - "last_commit_hash": "515DAA8790FBC39D93EA23229826BA45205DAF178F8BD9A7D4835AA07C663C68", + "last_commit_hash": "B194E4E363E010ED4F80860FAF452B45D81C77D7C68C753424F44596A229D692", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:33.997760354Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:38.160820316Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -36,9 +36,9 @@ }, "last_commit": { "block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, @@ -47,17 +47,17 @@ "signatures": [ { "block_id_flag": 2, - "signature": "V0pC4gdCnBBhIoidoAPEuUWP9QTYtTc7EN5VZuXUdSDmYhM8NCcezy9+IxGXqAd7TUBV1aPT/SVv8KFH98u9Ag==", - "timestamp": "2021-07-16T12:16:33.997760354Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "5yClL8UlPdvb2tzNguZu3UaTH5X5S8S635u9nBQjZQw3NFhrZklXm6Aw7Mxvhn3y7CL0yKHdRmH0FnPh8cs2Cg==", + "timestamp": "2021-11-25T17:04:38.160820316Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, "block_id": { - "hash": "223B6924AC98CE99678027C712954C565D4359507C3DECFF9D2D5B5A9E4231F6", + "hash": "BCF3DB412E80A396D10BF5B5E6D3E63D3B06DEB25AA958BCB8CE18D023838042", "parts": { - "hash": "F2FC723B88EFD18C4599BDF9441AA962F19C146C8601ED0854973189D11816DE", + "hash": "7F02924A557B6B6AEB9390183F5458C88EAC02956AFDCCAAFC09B59A80D1EEA8", "total": 1 } } diff --git a/rpc/tests/kvstore_fixtures/incoming/block_results_at_height_10.json b/rpc/tests/kvstore_fixtures/incoming/block_results_at_height_10.json index 8e928660c..d1a81c6de 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_results_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_results_at_height_10.json @@ -1,11 +1,12 @@ { - "id": "421a030f-0b5d-4adb-bb17-537d11228040", + "id": "f3ef9de0-d9af-4708-8c17-6679eea49c35", "jsonrpc": "2.0", "result": { "begin_block_events": null, "consensus_param_updates": null, "end_block_events": null, "height": "10", + "total_gas_used": "0", "txs_results": null, "validator_updates": null } diff --git a/rpc/tests/kvstore_fixtures/incoming/block_search.json b/rpc/tests/kvstore_fixtures/incoming/block_search.json index cbd74b5d7..1204189b7 100644 --- a/rpc/tests/kvstore_fixtures/incoming/block_search.json +++ b/rpc/tests/kvstore_fixtures/incoming/block_search.json @@ -1,70 +1,558 @@ { + "id": "41ddde55-c7d2-4273-9a8d-2c8a68d006b7", "jsonrpc": "2.0", - "id": "", "result": { "blocks": [ { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "2", + "last_block_id": { + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", + "parts": { + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", + "total": 1 + } + }, + "last_commit_hash": "F3DD07E01C87D4C2743B86BCD0A3841060D6672F5E267B1E559CEABA3CB2925F", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:33.973579036Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", + "parts": { + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", + "total": 1 + } + }, + "height": "1", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "m6+9UqkWOXwxLbEB7/Jd2z+u7bxMjkHHQejlJ5oW4JIGttiTqki+RwJQCrBQ5I7lW/ttPNfgxpB55BQoGwNbCA==", + "timestamp": "2021-11-25T17:04:33.973579036Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, "block_id": { - "hash": "4FFD15F274758E474898498A191EB8CA6FC6C466576255DA132908A12AC1674C", - "part_set_header": { - "total": 1, - "hash": "BBA710736635FA20CDB4F48732563869E90871D31FE9E7DE3D900CD4334D8775" + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", + "parts": { + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "3", + "last_block_id": { + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", + "parts": { + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", + "total": 1 + } + }, + "last_commit_hash": "5687A75F20F3DFAF579565DF912BA7524A80EAD0F022874E3F9E1DA19DBCE2ED", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:34.498501389Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", + "parts": { + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", + "total": 1 + } + }, + "height": "2", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "EZnkAJdSrp/hJsqfZq41drTOpTYYfZo6dmqhgu7IPSzqxdGCrlYndiGoq/Ju2YaA2f2lgULUe+J40+Mo2xprDA==", + "timestamp": "2021-11-25T17:04:34.498501389Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] } }, + "block_id": { + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", + "parts": { + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", + "total": 1 + } + } + }, + { "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "4", + "last_block_id": { + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", + "parts": { + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", + "total": 1 + } + }, + "last_commit_hash": "BC093B8E6089D8C9359B2B23B57A687A462BDE5E1832D5EA0C65C4CDE9F128EA", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:35.023377724Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { - "block": "10", - "app": "1" + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", + "parts": { + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", + "total": 1 + } }, + "height": "3", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "nNJp/GUijIQqIjBVDitX75JvIU8Og6jerI9tZ7bjUMuhQe0SpGauqArFsvVXSMKiH/PYT01dibuDovzQCeyaAA==", + "timestamp": "2021-11-25T17:04:35.023377724Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", + "parts": { + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", "chain_id": "dockerchain", - "height": "10", - "time": "2020-03-15T16:57:08.151Z", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "5", "last_block_id": { - "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "part_set_header": { - "total": 1, - "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", + "parts": { + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", + "total": 1 + } + }, + "last_commit_hash": "A61865B92400BDB797CFFAE747642966FE299DF955C663B51A5AF84F1B19E092", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:35.549543409Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", + "parts": { + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", + "total": 1 } }, - "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "data_hash": "", - "validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "next_validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", + "height": "4", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "TnRCx236/uZVCqyKz4+nsz2fvcXaNQEu0LHLeRYKnzlWYqNg/SCoAWaO8I866ZyZ0i9pY3QwrO/Z95OSmrn1Bw==", + "timestamp": "2021-11-25T17:04:35.549543409Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", + "parts": { + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "6", + "last_block_id": { + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", + "parts": { + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", + "total": 1 + } + }, + "last_commit_hash": "38A1FDC48C2D5B8E14DDF138F96011C23DA97B7D0211AC3397B81529C61F7AC1", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:36.068793865Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", + "parts": { + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", + "total": 1 + } + }, + "height": "5", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "l0oNqn1W1+g++ekWb1b/RSMOxNIAY4R9K/gHdVNMCzaukCB1G3zu8hQRfcLxJyj2YwV2weIZmEnDs0du/chxDQ==", + "timestamp": "2021-11-25T17:04:36.068793865Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", + "parts": { + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "7", + "last_block_id": { + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", + "parts": { + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", + "total": 1 + } + }, + "last_commit_hash": "B9358CD1EE4E9B16BBB2DAE8BB17708D8099E54DE6850323DE06B7E1E8F912E3", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "", - "proposer_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3" + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:36.594528638Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } }, + "last_commit": { + "block_id": { + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", + "parts": { + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", + "total": 1 + } + }, + "height": "6", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "VWW3WrbL2ASnyge5sATYuVqxZiBSJwH4oOzZFEd1oizpDy4p6VD13fHqfkYfdpjjJRg/dDZkJg06yJoKasLOBw==", + "timestamp": "2021-11-25T17:04:36.594528638Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", + "parts": { + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", + "total": 1 + } + } + }, + { + "block": { "data": { - "txs": null + "txs": [] }, "evidence": { - "evidence": null + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "8", + "last_block_id": { + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", + "parts": { + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", + "total": 1 + } + }, + "last_commit_hash": "C92C8DDA8D9DBB0E46B89FA33A190181BF43D1330D6A7BCC66927B7372AE269C", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:37.112815661Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } }, "last_commit": { + "block_id": { + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", + "parts": { + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", + "total": 1 + } + }, + "height": "7", + "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "GaH5Ob0j72yzugyhc++7TeY8eodiLXrTCwW8+M9/xolnDxPB1GnzgmAVHyRPeAcHEL7/ArZFQeEQF+nwe+M+Bw==", + "timestamp": "2021-11-25T17:04:37.112815661Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", + "parts": { + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "9", + "last_block_id": { + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", + "parts": { + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", + "total": 1 + } + }, + "last_commit_hash": "9BDF7B30A10ACF5B16D815E45A77BA7FA81917C9B360FD4D35D4BFC1755A8CDD", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:37.636885394Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { + "block_id": { + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", + "parts": { + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", + "total": 1 + } + }, + "height": "8", "round": 0, + "signatures": [ + { + "block_id_flag": 2, + "signature": "TPhGWTaCM5iRtuZHQNvP8sQ23vd+A/diFwZkRhYxQzGSHCiS5jIjoyF+EaPypza6sFr63hN09eW5PYBljvMzBg==", + "timestamp": "2021-11-25T17:04:37.636885394Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" + } + ] + } + }, + "block_id": { + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", + "parts": { + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", + "total": 1 + } + } + }, + { + "block": { + "data": { + "txs": [] + }, + "evidence": { + "evidence": [] + }, + "header": { + "app_hash": "0000000000000000", + "chain_id": "dockerchain", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "height": "10", + "last_block_id": { + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", + "parts": { + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", + "total": 1 + } + }, + "last_commit_hash": "B194E4E363E010ED4F80860FAF452B45D81C77D7C68C753424F44596A229D692", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:38.160820316Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "version": { + "app": "1", + "block": "11" + } + }, + "last_commit": { "block_id": { - "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "part_set_header": { - "total": 1, - "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", + "parts": { + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", + "total": 1 } }, + "height": "9", + "round": 0, "signatures": [ { "block_id_flag": 2, - "validator_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3", - "timestamp": "2020-03-15T16:57:08.151Z", - "signature": "GRBX/UNaf19vs5byJfAuXk2FQ05soOHmaMFCbrNBhHdNZtFKHp6J9eFwZrrG+YCxKMdqPn2tQWAes6X8kpd1DA==" + "signature": "5yClL8UlPdvb2tzNguZu3UaTH5X5S8S635u9nBQjZQw3NFhrZklXm6Aw7Mxvhn3y7CL0yKHdRmH0FnPh8cs2Cg==", + "timestamp": "2021-11-25T17:04:38.160820316Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } + }, + "block_id": { + "hash": "BCF3DB412E80A396D10BF5B5E6D3E63D3B06DEB25AA958BCB8CE18D023838042", + "parts": { + "hash": "7F02924A557B6B6AEB9390183F5458C88EAC02956AFDCCAAFC09B59A80D1EEA8", + "total": 1 + } } } ], - "total_count": "1" + "total_count": "9" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/blockchain_from_1_to_10.json b/rpc/tests/kvstore_fixtures/incoming/blockchain_from_1_to_10.json index b7d8e0ae4..432d7a2c5 100644 --- a/rpc/tests/kvstore_fixtures/incoming/blockchain_from_1_to_10.json +++ b/rpc/tests/kvstore_fixtures/incoming/blockchain_from_1_to_10.json @@ -1,17 +1,17 @@ { - "id": "7f156511-df54-4ede-8821-d6932c878ca2", + "id": "b49a0551-ac45-42ce-85da-dfc2ffc0385b", "jsonrpc": "2.0", "result": { "block_metas": [ { "block_id": { - "hash": "223B6924AC98CE99678027C712954C565D4359507C3DECFF9D2D5B5A9E4231F6", + "hash": "BCF3DB412E80A396D10BF5B5E6D3E63D3B06DEB25AA958BCB8CE18D023838042", "parts": { - "hash": "F2FC723B88EFD18C4599BDF9441AA962F19C146C8601ED0854973189D11816DE", + "hash": "7F02924A557B6B6AEB9390183F5458C88EAC02956AFDCCAAFC09B59A80D1EEA8", "total": 1 } }, - "block_size": "571", + "block_size": "569", "header": { "app_hash": "0000000000000000", "chain_id": "dockerchain", @@ -20,18 +20,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "10", "last_block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, - "last_commit_hash": "515DAA8790FBC39D93EA23229826BA45205DAF178F8BD9A7D4835AA07C663C68", + "last_commit_hash": "B194E4E363E010ED4F80860FAF452B45D81C77D7C68C753424F44596A229D692", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:33.997760354Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:38.160820316Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -41,9 +41,9 @@ }, { "block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, @@ -56,18 +56,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "9", "last_block_id": { - "hash": "10D7A9EF7E80D0F8DF3E77E95D7C35017CA19E48515038CAC6DC5BC926D6EA7C", + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", "parts": { - "hash": "A96E9C8E2759D7A95FBAB150DDA26A4ECFC3D656D9545F373833172FDCB1B191", + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", "total": 1 } }, - "last_commit_hash": "0A8375B1547930A7AD121381359A0D43384E04B14EC07FB8BF3E6A3124E455BA", + "last_commit_hash": "9BDF7B30A10ACF5B16D815E45A77BA7FA81917C9B360FD4D35D4BFC1755A8CDD", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:33.479129116Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:37.636885394Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -77,13 +77,13 @@ }, { "block_id": { - "hash": "10D7A9EF7E80D0F8DF3E77E95D7C35017CA19E48515038CAC6DC5BC926D6EA7C", + "hash": "1907CB789D493823C5AF3BF8A8D7BBE15708F2FB42D9AEAACE8D7DFB5D596676", "parts": { - "hash": "A96E9C8E2759D7A95FBAB150DDA26A4ECFC3D656D9545F373833172FDCB1B191", + "hash": "FB31902FF64078CDA2F2446BD04D40CABE1F24F107AF01C25EA3B72710E0C843", "total": 1 } }, - "block_size": "571", + "block_size": "569", "header": { "app_hash": "0000000000000000", "chain_id": "dockerchain", @@ -92,18 +92,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "8", "last_block_id": { - "hash": "7BBDEBAACD6175DC04ED02E00CA187B47AA2BA31E14B56F1EDD81711EA2D0E9E", + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", "parts": { - "hash": "47F94ADC5CC798B665E963B38FD92CE0A5028B776C3F8CB8A888DB9BCB135255", + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", "total": 1 } }, - "last_commit_hash": "68BA536B3600124E7B34E2B5655143A9FBE492D2EB801BD6B707E775C704F7AC", + "last_commit_hash": "C92C8DDA8D9DBB0E46B89FA33A190181BF43D1330D6A7BCC66927B7372AE269C", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:32.960708562Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:37.112815661Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -113,9 +113,9 @@ }, { "block_id": { - "hash": "7BBDEBAACD6175DC04ED02E00CA187B47AA2BA31E14B56F1EDD81711EA2D0E9E", + "hash": "AEF780DCEF7C251CDF85D8B421B7BA0570D846AC55A238B7A03E91BA28C64D49", "parts": { - "hash": "47F94ADC5CC798B665E963B38FD92CE0A5028B776C3F8CB8A888DB9BCB135255", + "hash": "36DDE8F2F77633C9D5161904BCB138FBA0F588B91A0C11D7D58304BC41538FF4", "total": 1 } }, @@ -128,18 +128,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "7", "last_block_id": { - "hash": "8937F69C6E345E565B0CA1903B47B0F7870D28054330C8DFFF8FC62A4A669E71", + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", "parts": { - "hash": "63FFACB6E280BE2A4F7BF4D0067F3ADB7EFA9A28B9A5CD3A9DCE39376E184611", + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", "total": 1 } }, - "last_commit_hash": "06AA328E6DEBDCDEDB3289AC1AF5CAD14C129E2EDBB10DC5E4DD2299DD68DE1F", + "last_commit_hash": "B9358CD1EE4E9B16BBB2DAE8BB17708D8099E54DE6850323DE06B7E1E8F912E3", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:32.441854222Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:36.594528638Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -149,13 +149,13 @@ }, { "block_id": { - "hash": "8937F69C6E345E565B0CA1903B47B0F7870D28054330C8DFFF8FC62A4A669E71", + "hash": "4D6C9018EC4EEC5A228E3DD720B5816828BB93E2AB6DA260B112DE5DA715AA37", "parts": { - "hash": "63FFACB6E280BE2A4F7BF4D0067F3ADB7EFA9A28B9A5CD3A9DCE39376E184611", + "hash": "15C68CD49FAC940A0614AD70EA9CD144BF0D80956CC3351A707DD414F68A1B77", "total": 1 } }, - "block_size": "571", + "block_size": "569", "header": { "app_hash": "0000000000000000", "chain_id": "dockerchain", @@ -164,18 +164,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "6", "last_block_id": { - "hash": "85789949436D56D8A68944C59B3604F48FE87DA4A437EBB8735EA57B2CC84199", + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", "parts": { - "hash": "D5545141E42C0EBBF174EDD2601C8589C2116111D11EFF270B9D467E7E86E7F5", + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", "total": 1 } }, - "last_commit_hash": "1DB4A22544F7794F63034F983540FC08766CACF4A26F7983EA217AE537512282", + "last_commit_hash": "38A1FDC48C2D5B8E14DDF138F96011C23DA97B7D0211AC3397B81529C61F7AC1", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:31.914193769Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:36.068793865Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -185,9 +185,9 @@ }, { "block_id": { - "hash": "85789949436D56D8A68944C59B3604F48FE87DA4A437EBB8735EA57B2CC84199", + "hash": "7BEC354E2D957801AA01E4BB583CFFF8D2B2B76F88E34EC4F9EBFDE625886848", "parts": { - "hash": "D5545141E42C0EBBF174EDD2601C8589C2116111D11EFF270B9D467E7E86E7F5", + "hash": "5785922B6E6E9D8D4EC710BA3AE985D25D1CA55688EB1F8A8051583925FF07A4", "total": 1 } }, @@ -200,18 +200,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "5", "last_block_id": { - "hash": "C61290C168222DF1A8DE7835BFF17B10C61E4ED9277F122442FA4046A960635A", + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", "parts": { - "hash": "A674EB61DCDE24F367A742F15DA620D3A66E6496FB257EB0676C893E56AEBE38", + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", "total": 1 } }, - "last_commit_hash": "38BF789B0DF166078B7EB4AEF33C83730E2B051D72985C30535128200F047B6A", + "last_commit_hash": "A61865B92400BDB797CFFAE747642966FE299DF955C663B51A5AF84F1B19E092", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:31.388034944Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:35.549543409Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -221,13 +221,13 @@ }, { "block_id": { - "hash": "C61290C168222DF1A8DE7835BFF17B10C61E4ED9277F122442FA4046A960635A", + "hash": "A3C3691168F47E92355FA3EF1009C8A30ABC96B1F2FCAD0D00486E89BCC4ED0E", "parts": { - "hash": "A674EB61DCDE24F367A742F15DA620D3A66E6496FB257EB0676C893E56AEBE38", + "hash": "5878E710ADD459D1BB2BC6EDC19649C1ECCFB32D7A0245BD7212AF7035AFCA06", "total": 1 } }, - "block_size": "571", + "block_size": "569", "header": { "app_hash": "0000000000000000", "chain_id": "dockerchain", @@ -236,18 +236,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "4", "last_block_id": { - "hash": "2C2BA16F686527DC10F0A3CCCA2215CB45B56ED6F51A28E74F7657048CEB3CBF", + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", "parts": { - "hash": "5E44D35FBB14FDD5D3320D7FDDBA077CC3D8AAE9491D67D52D304B41BBA671CA", + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", "total": 1 } }, - "last_commit_hash": "8312F3A5282B121B1C118F44B3448F440B749D4555777641416ED3EB17600FF9", + "last_commit_hash": "BC093B8E6089D8C9359B2B23B57A687A462BDE5E1832D5EA0C65C4CDE9F128EA", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:30.863905197Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:35.023377724Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -257,9 +257,9 @@ }, { "block_id": { - "hash": "2C2BA16F686527DC10F0A3CCCA2215CB45B56ED6F51A28E74F7657048CEB3CBF", + "hash": "C9D5643E940F00FE9A3FBB367E95F7279FED7784FC5A177A1A06F2D001154CBB", "parts": { - "hash": "5E44D35FBB14FDD5D3320D7FDDBA077CC3D8AAE9491D67D52D304B41BBA671CA", + "hash": "F01752CC5908C1315BA33ED20EAE07DC09B089E8255452D845C6B6CE8B269635", "total": 1 } }, @@ -272,18 +272,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "3", "last_block_id": { - "hash": "0636CC84AB264C5A91852C21A8C337C216A3F98184489A28F329B378DE301691", + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", "parts": { - "hash": "92B62BF5935DCE75CBE38CD522F4372AF07A4F36DD09DCC9BE516D11719B9748", + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", "total": 1 } }, - "last_commit_hash": "F5B94D8A51A6627FBBB0EFA45C3FF6981B8F80EAA753A21ECCE51BD9CEAFAC93", + "last_commit_hash": "5687A75F20F3DFAF579565DF912BA7524A80EAD0F022874E3F9E1DA19DBCE2ED", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:30.340443692Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:34.498501389Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -293,9 +293,9 @@ }, { "block_id": { - "hash": "0636CC84AB264C5A91852C21A8C337C216A3F98184489A28F329B378DE301691", + "hash": "5D3C8CB9FCCDBB7D0EFD13986F12BB071A1594F8DD0FB7C20FFEA7AC547DD207", "parts": { - "hash": "92B62BF5935DCE75CBE38CD522F4372AF07A4F36DD09DCC9BE516D11719B9748", + "hash": "449577AC157A16D2FCAB57D394B2250F8236178A8043281432BAEABC0567503F", "total": 1 } }, @@ -308,18 +308,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "2", "last_block_id": { - "hash": "44C37753BF31FD4238227E19213F042699F62416D4E5422BBA59095FC4BEE039", + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", "parts": { - "hash": "13EEDAF51D61F7FF513FCD1B6387E0A3E306E49E5DCEA43CAFE77FB7B951DD4B", + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", "total": 1 } }, - "last_commit_hash": "FFD940CAE430CC36EF47D79A2A4D82ECE4B6148EBFD57718676E63A430728090", + "last_commit_hash": "F3DD07E01C87D4C2743B86BCD0A3841060D6672F5E267B1E559CEABA3CB2925F", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:29.814665301Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:33.973579036Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -329,13 +329,13 @@ }, { "block_id": { - "hash": "44C37753BF31FD4238227E19213F042699F62416D4E5422BBA59095FC4BEE039", + "hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", "parts": { - "hash": "13EEDAF51D61F7FF513FCD1B6387E0A3E306E49E5DCEA43CAFE77FB7B951DD4B", + "hash": "5DAA9D85807CFAD825F5796439B050D888EDAB3B9A83B8B919F57090E7872957", "total": 1 } }, - "block_size": "311", + "block_size": "312", "header": { "app_hash": "", "chain_id": "dockerchain", @@ -352,10 +352,10 @@ }, "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:29.232984022Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:33.387236819Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -364,6 +364,6 @@ "num_txs": "0" } ], - "last_height": "33" + "last_height": "10" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_async.json b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_async.json index 628b32193..23a57ae05 100644 --- a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_async.json +++ b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_async.json @@ -1,11 +1,12 @@ { - "id": "4efd497c-5b42-458f-b136-b101e764071d", + "id": "fb725d9a-923a-4fd2-99c0-1b7a9bfdc401", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_commit.json b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_commit.json index f553bae58..104325614 100644 --- a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_commit.json +++ b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_commit.json @@ -1,5 +1,5 @@ { - "id": "c32535b9-bec5-4549-9f90-7aa25d6d6a12", + "id": "c3a4ce32-070f-4e72-be11-96dcd6f4615b", "jsonrpc": "2.0", "result": { "check_tx": { @@ -10,7 +10,10 @@ "gas_used": "0", "gas_wanted": "1", "info": "", - "log": "" + "log": "", + "mempoolError": "", + "priority": "0", + "sender": "" }, "deliver_tx": { "code": 0, @@ -21,23 +24,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" + "key": "key", + "value": "commit-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -49,6 +52,6 @@ "log": "" }, "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "34" + "height": "11" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_sync.json b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_sync.json index c84bbc76a..2b9ba9105 100644 --- a/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_sync.json +++ b/rpc/tests/kvstore_fixtures/incoming/broadcast_tx_sync.json @@ -1,11 +1,12 @@ { - "id": "59795aed-7cb3-4997-803e-f747b8f2cc2f", + "id": "493d43ec-3e1d-476e-928c-faef50754837", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/commit_at_height_10.json b/rpc/tests/kvstore_fixtures/incoming/commit_at_height_10.json index 33a44fadd..f2b9695e7 100644 --- a/rpc/tests/kvstore_fixtures/incoming/commit_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/incoming/commit_at_height_10.json @@ -1,14 +1,14 @@ { - "id": "21ad34a1-45a5-4766-a917-d5492b24f941", + "id": "6f54a0c9-cc78-4d15-8952-a4f61d757774", "jsonrpc": "2.0", "result": { - "canonical": true, + "canonical": false, "signed_header": { "commit": { "block_id": { - "hash": "223B6924AC98CE99678027C712954C565D4359507C3DECFF9D2D5B5A9E4231F6", + "hash": "BCF3DB412E80A396D10BF5B5E6D3E63D3B06DEB25AA958BCB8CE18D023838042", "parts": { - "hash": "F2FC723B88EFD18C4599BDF9441AA962F19C146C8601ED0854973189D11816DE", + "hash": "7F02924A557B6B6AEB9390183F5458C88EAC02956AFDCCAAFC09B59A80D1EEA8", "total": 1 } }, @@ -17,9 +17,9 @@ "signatures": [ { "block_id_flag": 2, - "signature": "XcYXbxMIxFjL5s+oD4XGi7KkzPAFHH1j6IWcX8odqWKgZkjxAk/ACDufwCqA3CwiQDO946qTo2dhZ7B2Ull3DA==", - "timestamp": "2021-07-16T12:16:34.512439966Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "ldPa+x1U/7eXfzm07bhFr29lpi1HEr/uRQSnFhhr87IaMzDuUKQDqRf4GXpSDMDdmUu67eZlGzoXaVHZNq7QDg==", + "timestamp": "2021-11-25T17:04:38.684352646Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] }, @@ -31,18 +31,18 @@ "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "height": "10", "last_block_id": { - "hash": "4AED585851DEE548A0143C8B41FA72FDA0597CA304807BEF06222D335EDD404D", + "hash": "03979BC4F521D92D137F8A93B64D7D1A8589560F64C4543784DECCBCEDF1D13F", "parts": { - "hash": "B2A89B0BAC1FEF0C15D3ED44105E75DB7F8DB42ECEA33E32B3B820AEDAB132BD", + "hash": "00DC8C2DE1DE6B66960CB5F15F802286D6423903C06804C35053E0F757B34E47", "total": 1 } }, - "last_commit_hash": "515DAA8790FBC39D93EA23229826BA45205DAF178F8BD9A7D4835AA07C663C68", + "last_commit_hash": "B194E4E363E010ED4F80860FAF452B45D81C77D7C68C753424F44596A229D692", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:33.997760354Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:38.160820316Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" diff --git a/rpc/tests/kvstore_fixtures/incoming/consensus_params.json b/rpc/tests/kvstore_fixtures/incoming/consensus_params.json index 7ad12b60b..82af3d71f 100644 --- a/rpc/tests/kvstore_fixtures/incoming/consensus_params.json +++ b/rpc/tests/kvstore_fixtures/incoming/consensus_params.json @@ -1,13 +1,12 @@ { - "id": "6c5641b5-079a-4d2d-9009-f7d4ce20b2ec", + "id": "e7ef4782-f290-42a1-94fd-bc8e84e76b53", "jsonrpc": "2.0", "result": { "block_height": "10", "consensus_params": { "block": { "max_bytes": "22020096", - "max_gas": "-1", - "time_iota_ms": "500" + "max_gas": "-1" }, "evidence": { "max_age_duration": "172800000000000", @@ -19,7 +18,9 @@ "ed25519" ] }, - "version": {} + "version": { + "app_version": "0" + } } } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/consensus_state.json b/rpc/tests/kvstore_fixtures/incoming/consensus_state.json index e86eb66f3..fa08dc3c7 100644 --- a/rpc/tests/kvstore_fixtures/incoming/consensus_state.json +++ b/rpc/tests/kvstore_fixtures/incoming/consensus_state.json @@ -1,9 +1,9 @@ { - "id": "523312c6-ea35-4274-b521-401e724bb344", + "id": "51f544e1-0f45-4fd4-ba95-80b073c63137", "jsonrpc": "2.0", "result": { "round_state": { - "height/round/step": "34/0/1", + "height/round/step": "11/0/1", "height_vote_set": [ { "precommits": [ @@ -20,10 +20,10 @@ "locked_block_hash": "", "proposal_block_hash": "", "proposer": { - "address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", + "address": "6B3F66DCF73507BCE7148D6580DAC27074108628", "index": 0 }, - "start_time": "2021-07-16T12:16:46.916066071Z", + "start_time": "2021-11-25T17:04:39.191279187Z", "valid_block_hash": "" } } diff --git a/rpc/tests/kvstore_fixtures/incoming/genesis.json b/rpc/tests/kvstore_fixtures/incoming/genesis.json index 904207f53..d243350ad 100644 --- a/rpc/tests/kvstore_fixtures/incoming/genesis.json +++ b/rpc/tests/kvstore_fixtures/incoming/genesis.json @@ -1,5 +1,5 @@ { - "id": "9f71da58-c631-4141-be10-a9dac3496af0", + "id": "97b6f531-5f8c-424a-91be-9a0caaf6f34d", "jsonrpc": "2.0", "result": { "genesis": { @@ -20,18 +20,20 @@ "ed25519" ] }, - "version": {} + "version": { + "app_version": "0" + } }, - "genesis_time": "2021-07-16T12:16:29.232984022Z", + "genesis_time": "2021-11-25T17:04:33.387236819Z", "initial_height": "1", "validators": [ { - "address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", + "address": "6B3F66DCF73507BCE7148D6580DAC27074108628", "name": "", "power": "10", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "f+7sWZojwd8xbxZ+GJL+x/zKr1wyM0NMJkp8tCnA4t0=" + "value": "fbRNPLlIO+9TvAyBBwxAm2CKODIL8Oxaryw/DaHJGq4=" } } ] diff --git a/rpc/tests/kvstore_fixtures/incoming/net_info.json b/rpc/tests/kvstore_fixtures/incoming/net_info.json index 057baa3f7..0f39f2e4b 100644 --- a/rpc/tests/kvstore_fixtures/incoming/net_info.json +++ b/rpc/tests/kvstore_fixtures/incoming/net_info.json @@ -1,5 +1,5 @@ { - "id": "a01a558c-a893-415a-8f57-21f104d1aa46", + "id": "87e7b1f1-46bc-4789-8978-f570ed2600b1", "jsonrpc": "2.0", "result": { "listeners": [ @@ -7,6 +7,6 @@ ], "listening": true, "n_peers": "0", - "peers": [] + "peers": null } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/status.json b/rpc/tests/kvstore_fixtures/incoming/status.json index fdc868cd1..94ce28cb6 100644 --- a/rpc/tests/kvstore_fixtures/incoming/status.json +++ b/rpc/tests/kvstore_fixtures/incoming/status.json @@ -1,10 +1,10 @@ { - "id": "7acd6adc-648a-4e73-88de-911fb2db10c5", + "id": "84cd8df6-1ab8-4678-9294-7c7f63b60ad7", "jsonrpc": "2.0", "result": { "node_info": { - "channels": "40202122233038606100", - "id": "eb277d0093f0a454f87558b962ae0ba6a0675691", + "channels": "402021222330386061626300", + "id": "25d4acdbecad89a4d50073cc5673965d98f5681d", "listen_addr": "tcp://0.0.0.0:26656", "moniker": "dockernode", "network": "dockerchain", @@ -17,24 +17,34 @@ "block": "11", "p2p": "8" }, - "version": "v0.34.9" + "version": "0.35.0-unreleased" }, "sync_info": { + "backfill_blocks_total": "0", + "backfilled_blocks": "0", "catching_up": false, + "chunk_process_avg_time": "0", "earliest_app_hash": "", - "earliest_block_hash": "44C37753BF31FD4238227E19213F042699F62416D4E5422BBA59095FC4BEE039", + "earliest_block_hash": "05D500079FA8DFDCA556313E7A8E1FC4BDA2407D23A1A2ED40F1C06889A0BC43", "earliest_block_height": "1", - "earliest_block_time": "2021-07-16T12:16:29.232984022Z", - "latest_app_hash": "0000000000000000", - "latest_block_hash": "D18444A13CC9F798A4B57FDCD3C486EB7FF1F4EF73DF6234764226DDED75A394", - "latest_block_height": "34", - "latest_block_time": "2021-07-16T12:16:46.411375512Z" + "earliest_block_time": "2021-11-25T17:04:33.387236819Z", + "latest_app_hash": "0600000000000000", + "latest_block_hash": "96685C09D7C09916D127A894A5F53652E18AF8F0E5B4112C69A39CC631179960", + "latest_block_height": "12", + "latest_block_time": "2021-11-25T17:04:39.209040526Z", + "max_peer_block_height": "0", + "remaining_time": "0", + "snapshot_chunks_count": "0", + "snapshot_chunks_total": "0", + "snapshot_height": "0", + "total_snapshots": "0", + "total_synced_time": "0" }, "validator_info": { - "address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", + "address": "6B3F66DCF73507BCE7148D6580DAC27074108628", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "f+7sWZojwd8xbxZ+GJL+x/zKr1wyM0NMJkp8tCnA4t0=" + "value": "fbRNPLlIO+9TvAyBBwxAm2CKODIL8Oxaryw/DaHJGq4=" }, "voting_power": "10" } diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_malformed.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_malformed.json index a916a9a5c..6338f5abb 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_malformed.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_malformed.json @@ -4,6 +4,6 @@ "data": "failed to parse query: \nparse error near PegText (line 1 symbol 2 - line 1 symbol 11):\n\"malformed\"\n", "message": "Internal error" }, - "id": "b23346ae-3330-4024-9286-933c350249c1", + "id": "7ba4d785-72ab-41a3-8a1d-7bce9af86fce", "jsonrpc": "2.0" } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_0.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_0.json index 7a2553da1..9e97ee722 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_0.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_0.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "35", + "height": "13", "last_block_id": { - "hash": "D18444A13CC9F798A4B57FDCD3C486EB7FF1F4EF73DF6234764226DDED75A394", + "hash": "96685C09D7C09916D127A894A5F53652E18AF8F0E5B4112C69A39CC631179960", "parts": { - "hash": "DCECC31BE4B7F69DC5038571F4410EDF538A602BF9B3C85045702DD7A868C708", + "hash": "F83D5F70A95C1C0F122DF87D6D068A9D3155292C931448E227F0EB1F594E755E", "total": 1 } }, - "last_commit_hash": "EE7456BBB24313A5C10EDD10ABC6C61C69FFA5C69BB24221BFE655FD6801E83D", - "last_results_hash": "4837665DFE640A370E7496C691987562D02462142C5F34F59E185911A12370EA", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:46.930356271Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "last_commit_hash": "93B574F4F3F664332D9C990993262DCD8295FF42C7E3CFD3060DB8BE1B2E1502", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:39.73525063Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "D18444A13CC9F798A4B57FDCD3C486EB7FF1F4EF73DF6234764226DDED75A394", + "hash": "96685C09D7C09916D127A894A5F53652E18AF8F0E5B4112C69A39CC631179960", "parts": { - "hash": "DCECC31BE4B7F69DC5038571F4410EDF538A602BF9B3C85045702DD7A868C708", + "hash": "F83D5F70A95C1C0F122DF87D6D068A9D3155292C931448E227F0EB1F594E755E", "total": 1 } }, - "height": "34", + "height": "12", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "xlPAgX+MKydn8/rjQCRCbAqbrffyJlA4PNtXO9SRqD2L4fQsvqXbPZIFuJlu4nT1gwS6dMJvxHtkAgaDMNEYDQ==", - "timestamp": "2021-07-16T12:16:46.930356271Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "Xb4Moc2Pntlf7m1YHskziYFUDVt02m7L01wmeRD6F/Z6rMI/M7s+FS2dQqeNfFOzXa5a6t+qaLBS2RWq1YcTBA==", + "timestamp": "2021-11-25T17:04:39.73525063Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "C75F0D24F0F94548BB1BC1B9D0AB4F304DD3F5170FBAF4B828EE47344EFE7A8C", + "parts": { + "hash": "B69A825C835F943795E299A93D5BDB8A031E4C6732575942DDD76866DBD9C36B", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_1.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_1.json index 66e281821..aa5539e13 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_1.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_1.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "36", + "height": "14", "last_block_id": { - "hash": "DA3E9C0ABE252FF76E932F411993920222A47D7B1A080A37508802E1FC66D01D", + "hash": "C75F0D24F0F94548BB1BC1B9D0AB4F304DD3F5170FBAF4B828EE47344EFE7A8C", "parts": { - "hash": "01A0B7D0054F27DFE276467353FD590ADCB7CDCF2DD288862E35E555A5CA6369", + "hash": "B69A825C835F943795E299A93D5BDB8A031E4C6732575942DDD76866DBD9C36B", "total": 1 } }, - "last_commit_hash": "3EF3F938C94A61FD308F3B4B154C146EC051D6A31490C0C783F1C5F87211821F", + "last_commit_hash": "B9489594ACC7F23813285C35B0D06703D94C3DE9C8F09DB976F51B98F4B3BA14", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:47.455836102Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:40.2533916Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "DA3E9C0ABE252FF76E932F411993920222A47D7B1A080A37508802E1FC66D01D", + "hash": "C75F0D24F0F94548BB1BC1B9D0AB4F304DD3F5170FBAF4B828EE47344EFE7A8C", "parts": { - "hash": "01A0B7D0054F27DFE276467353FD590ADCB7CDCF2DD288862E35E555A5CA6369", + "hash": "B69A825C835F943795E299A93D5BDB8A031E4C6732575942DDD76866DBD9C36B", "total": 1 } }, - "height": "35", + "height": "13", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "oKLVAMNvXRv7irGzr6xmXvCIZ1e0XQigskO1nPXmNm6btYKWomMYcIwTqZzt9e3S/6lGp5rxRd9AIxSzXywgDA==", - "timestamp": "2021-07-16T12:16:47.455836102Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "iCmqBcpgynmzbHYOJVmL02KG1Rf/UDKa1f6LTEoI9yJTvjXfMI4p/rI2v2+06lTJpkv/e0e7g17g/2Di0sWKCA==", + "timestamp": "2021-11-25T17:04:40.2533916Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "993F74E1E788000C029967BB891DAFF9B0C0210470A8242003D81C35CE04594A", + "parts": { + "hash": "15E637900D2D0B224594522FE357D099D7AF5B5FA1F5DDC0185DDDC526DA0503", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_2.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_2.json index 6f57c49eb..4cdde5268 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_2.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_2.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "37", + "height": "15", "last_block_id": { - "hash": "231E2122BB41CCF58E6C05B93AF30571725120F0034C7ACEBB790B41FF967681", + "hash": "993F74E1E788000C029967BB891DAFF9B0C0210470A8242003D81C35CE04594A", "parts": { - "hash": "D7324EFCD611A77E82F51D76DD618A1B8A66E3E230CD86BBEA75A838DC06F832", + "hash": "15E637900D2D0B224594522FE357D099D7AF5B5FA1F5DDC0185DDDC526DA0503", "total": 1 } }, - "last_commit_hash": "3EC5A6297B9190B0BB510B9473D646B81D50B005B7585CB9DD1ECF6904757D6A", + "last_commit_hash": "F158FDEDAD38ACE5046203F892D43202D1F2EB0323D3FB7189E09932FE799893", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:47.983741392Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:40.777942784Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "231E2122BB41CCF58E6C05B93AF30571725120F0034C7ACEBB790B41FF967681", + "hash": "993F74E1E788000C029967BB891DAFF9B0C0210470A8242003D81C35CE04594A", "parts": { - "hash": "D7324EFCD611A77E82F51D76DD618A1B8A66E3E230CD86BBEA75A838DC06F832", + "hash": "15E637900D2D0B224594522FE357D099D7AF5B5FA1F5DDC0185DDDC526DA0503", "total": 1 } }, - "height": "36", + "height": "14", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "xq3AtJ1K/QfZ7vAnRjgOSRJoOMFUgLIIKvBtuC1Qgf6PFi3a70H/zWOOezaGPbQDhPVEF5zDba4ju/WzF0dEDQ==", - "timestamp": "2021-07-16T12:16:47.983741392Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "G6LyYKBCwAfzOyunSfgqOQb7fiOwRudue92N4a31gWmXDnebJlUbdaS4zpS3ZsEWjIlY3bh+W1NsJDwBXvVcBA==", + "timestamp": "2021-11-25T17:04:40.777942784Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "0922C89268B7D399544B2ED22220906234C8A4F3466A053AB7F54FD2B94B448A", + "parts": { + "hash": "F4C132CFC4981A95FB71C635308DAD29562AC88C1C0D5761A6481DAA9F8B01F1", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_3.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_3.json index a4e8be854..04a6cbbd9 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_3.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_3.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "38", + "height": "16", "last_block_id": { - "hash": "4CE8485379A321DDF901AB2E319757E981EC87EB94BA971E89659047C7BEA6BA", + "hash": "0922C89268B7D399544B2ED22220906234C8A4F3466A053AB7F54FD2B94B448A", "parts": { - "hash": "E04B8A765D3DAB72215AC2ACFEF67F7543E9B7E18AC4C4A8A548A9538D8B0D90", + "hash": "F4C132CFC4981A95FB71C635308DAD29562AC88C1C0D5761A6481DAA9F8B01F1", "total": 1 } }, - "last_commit_hash": "89FB87B79CA66FC19193CDE2441B0B58398C78954C2E169D525547EEB432A76D", + "last_commit_hash": "0370BC4B8DF8B26916F6793B882F98AE3CD27E9D3CCFDD917693503728BB9906", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:48.513039779Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:41.30228258Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "4CE8485379A321DDF901AB2E319757E981EC87EB94BA971E89659047C7BEA6BA", + "hash": "0922C89268B7D399544B2ED22220906234C8A4F3466A053AB7F54FD2B94B448A", "parts": { - "hash": "E04B8A765D3DAB72215AC2ACFEF67F7543E9B7E18AC4C4A8A548A9538D8B0D90", + "hash": "F4C132CFC4981A95FB71C635308DAD29562AC88C1C0D5761A6481DAA9F8B01F1", "total": 1 } }, - "height": "37", + "height": "15", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "7l0EDmZewcp4oxDBcLLS/4tw55nwIu78lqMzGA9u07eLu7xvNOJALPZ+DwY4X2VFEc+BUec+tRojA6LegximCQ==", - "timestamp": "2021-07-16T12:16:48.513039779Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "wtsWDiEd7qGArF7QCMjOUrhEg8WRWsUZFBeXM4FKaAcRI/bYBz5+1HbYb91gOm0IclUtMWwoq+mavkTk41A/Bg==", + "timestamp": "2021-11-25T17:04:41.30228258Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "86636B8DFE337462E7B09CA8705C25EA1F06D5BF023C49F3D69439766D0646C0", + "parts": { + "hash": "E1A19A10835CA880002A3D2791DEF7D63DE0D91900C01B1D5DF0024A1B14BE68", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_4.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_4.json index a4eec3d85..2a108a427 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_4.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_newblock_4.json @@ -1,5 +1,5 @@ { - "id": "4375b246-297f-42cc-937f-a9cf69a538e2", + "id": "d9c32ce3-e18a-402d-852f-b0f5ad474397", "jsonrpc": "2.0", "result": { "data": { @@ -18,20 +18,20 @@ "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "height": "39", + "height": "17", "last_block_id": { - "hash": "918A56A7225058ECC03A4A06CD6E856266C5866524E9BA9322A16E688F53A846", + "hash": "86636B8DFE337462E7B09CA8705C25EA1F06D5BF023C49F3D69439766D0646C0", "parts": { - "hash": "0F0E36E6E15F271AAD7511715A58B38CA021527D1A6E68E86C132954EF484684", + "hash": "E1A19A10835CA880002A3D2791DEF7D63DE0D91900C01B1D5DF0024A1B14BE68", "total": 1 } }, - "last_commit_hash": "40CE1250F271BB17FBF5E6D67CA8E1D25D1CA5A5BDFDAF54295EF36228373DA3", + "last_commit_hash": "B92A6D3A4F69CCD8F9DA342A198DA39F603EF7197C555175055C53E229C4DBED", "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "next_validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", - "proposer_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D", - "time": "2021-07-16T12:16:49.037360939Z", - "validators_hash": "ADFA3B40824D69EAD7828B9A78D16D80DFA93499D1DB0EC362916AE61182A64D", + "next_validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", + "proposer_address": "6B3F66DCF73507BCE7148D6580DAC27074108628", + "time": "2021-11-25T17:04:41.823831801Z", + "validators_hash": "D506A39182DDCC44917A3E7827E784B501B354789F99BAC8D56AE50ABE34972B", "version": { "app": "1", "block": "11" @@ -39,35 +39,50 @@ }, "last_commit": { "block_id": { - "hash": "918A56A7225058ECC03A4A06CD6E856266C5866524E9BA9322A16E688F53A846", + "hash": "86636B8DFE337462E7B09CA8705C25EA1F06D5BF023C49F3D69439766D0646C0", "parts": { - "hash": "0F0E36E6E15F271AAD7511715A58B38CA021527D1A6E68E86C132954EF484684", + "hash": "E1A19A10835CA880002A3D2791DEF7D63DE0D91900C01B1D5DF0024A1B14BE68", "total": 1 } }, - "height": "38", + "height": "16", "round": 0, "signatures": [ { "block_id_flag": 2, - "signature": "hMmRj3S/M7jVToUZmeRxH8g17fTxLI3CZgkS55T41+MMsn2YZ3j42CyxOtONPpdUDhyZ2Ja1fqAHVIM2jgiqCQ==", - "timestamp": "2021-07-16T12:16:49.037360939Z", - "validator_address": "ABA577531E6D6F4119E7E1E0EE1909B908A8346D" + "signature": "Yh8Wr3sxwM1d5eBF7hhq3yIEP1v7ZenldyuV5mgfVYgIessk3zdZ6C26o0SNBeSmdI/eLHjpNMQ8mhq99lu7Dg==", + "timestamp": "2021-11-25T17:04:41.823831801Z", + "validator_address": "6B3F66DCF73507BCE7148D6580DAC27074108628" } ] } }, + "block_id": { + "hash": "E320D1884F1963A1EEFC4EC0999646EBE115C472B0F669EF088DF0F4B23D55A1", + "parts": { + "hash": "6B52BBB30CEEE34C6D55C4A444D2407534A5E3A7D1B48A1AA0943FB7DD965DC9", + "total": 1 + } + }, "result_begin_block": {}, "result_end_block": { "validator_updates": null } } }, - "events": { - "tm.event": [ - "NewBlock" - ] - }, - "query": "tm.event = 'NewBlock'" + "events": [ + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "NewBlock" + } + ], + "type": "tm" + } + ], + "query": "tm.event = 'NewBlock'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs.json index 5aa08ece8..a9b81794f 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs.json @@ -1,5 +1,5 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": {} } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_0.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_0.json index 3f1748d47..f66cd91f4 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_0.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_0.json @@ -1,35 +1,35 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "41", + "height": "19", "result": { "events": [ { "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgw" + "key": "key", + "value": "tx0" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -40,29 +40,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx0" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE" - ], - "tx.height": [ - "41" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx0" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "19" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_1.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_1.json index 835057872..6c47e6de9 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_1.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_1.json @@ -1,12 +1,12 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "41", + "height": "19", "index": 1, "result": { "events": [ @@ -14,23 +14,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgx" + "key": "key", + "value": "tx1" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -41,29 +41,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx1" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C" - ], - "tx.height": [ - "41" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx1" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "19" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_2.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_2.json index f6d9e251f..21d572fd9 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_2.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_2.json @@ -1,35 +1,35 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "42", + "height": "20", "result": { "events": [ { "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgy" + "key": "key", + "value": "tx2" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -40,29 +40,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx2" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4" - ], - "tx.height": [ - "42" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx2" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "20" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_3.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_3.json index f92f0da5a..ca3cbf2a8 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_3.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_3.json @@ -1,35 +1,35 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "43", + "height": "21", "result": { "events": [ { "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgz" + "key": "key", + "value": "tx3" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -40,29 +40,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx3" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD" - ], - "tx.height": [ - "43" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx3" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "21" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_4.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_4.json index 0a284fae4..4173c05bd 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_4.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_4.json @@ -1,35 +1,35 @@ { - "id": "5cc8e426-b6d1-49f1-845c-d93415a93f93", + "id": "47773d3e-53d3-475f-a14c-4171848d2114", "jsonrpc": "2.0", "result": { "data": { "type": "tendermint/event/Tx", "value": { "TxResult": { - "height": "44", + "height": "22", "result": { "events": [ { "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHg0" + "key": "key", + "value": "tx4" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -40,29 +40,64 @@ } } }, - "events": { - "app.creator": [ - "Cosmoshi Netowoko" - ], - "app.index_key": [ - "index is working" - ], - "app.key": [ - "tx4" - ], - "app.noindex_key": [ - "index is working" - ], - "tm.event": [ - "Tx" - ], - "tx.hash": [ - "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B" - ], - "tx.height": [ - "44" - ] - }, - "query": "tm.event = 'Tx'" + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx4" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + }, + { + "attributes": [ + { + "index": false, + "key": "event", + "value": "Tx" + } + ], + "type": "tm" + }, + { + "attributes": [ + { + "index": false, + "key": "hash", + "value": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B" + } + ], + "type": "tx" + }, + { + "attributes": [ + { + "index": false, + "key": "height", + "value": "22" + } + ], + "type": "tx" + } + ], + "query": "tm.event = 'Tx'", + "subscription_id": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_0.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_0.json index 83fc9c49f..000fd2fe7 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_0.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_0.json @@ -1,11 +1,12 @@ { - "id": "f04ffeb5-9cfa-4248-a17c-787453bae43a", + "id": "90553359-b197-47a8-a2b4-257e1e6d5f9d", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_1.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_1.json index 9d7b00117..b572da930 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_1.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_1.json @@ -1,11 +1,12 @@ { - "id": "7fc1c81c-5c8a-43f0-aaeb-f862c3eea928", + "id": "379361db-535d-4141-be4a-33200e0aff88", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_2.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_2.json index c70a882eb..07ae98da2 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_2.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_2.json @@ -1,11 +1,12 @@ { - "id": "d0d77026-920a-4686-87a2-bf9206615722", + "id": "eebd09f1-5f2d-44d6-aece-6987d7facc79", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_3.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_3.json index 9324b08af..5ae915c59 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_3.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_3.json @@ -1,11 +1,12 @@ { - "id": "2af206dc-f501-4c7b-9024-fad410875334", + "id": "0596b8cb-645f-4bb4-83a6-0c69cef87d11", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_4.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_4.json index 3f69222e7..35645500e 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_4.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_4.json @@ -1,11 +1,12 @@ { - "id": "349fb5d9-5af4-42c2-acc0-656ce0fd6127", + "id": "d94ad0c6-5fe3-44ea-9e32-aa7780a17e45", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_5.json b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_5.json index 75c1a33e3..a7b6e318c 100644 --- a/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_5.json +++ b/rpc/tests/kvstore_fixtures/incoming/subscribe_txs_broadcast_tx_5.json @@ -1,11 +1,12 @@ { - "id": "eceb3ffc-0324-4897-8ccd-eea89ae80fd2", + "id": "674400fc-5e82-4a74-8f14-c47d7696e091", "jsonrpc": "2.0", "result": { "code": 0, "codespace": "", "data": "", "hash": "CC4AC5C231481DD2ED2EA15789483B94565BF41612B6FEDE5BE7694F882CC202", - "log": "" + "log": "", + "mempool_error": "" } } \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/tx.json b/rpc/tests/kvstore_fixtures/incoming/tx_no_prove.json similarity index 50% rename from rpc/tests/kvstore_fixtures/incoming/tx.json rename to rpc/tests/kvstore_fixtures/incoming/tx_no_prove.json index 87855a83f..1ea917a92 100644 --- a/rpc/tests/kvstore_fixtures/incoming/tx.json +++ b/rpc/tests/kvstore_fixtures/incoming/tx_no_prove.json @@ -1,11 +1,11 @@ { - "id": "aeca4fe2-9a71-4906-8a8e-91ea4114ea4b", + "id": "0fdbf4b0-6223-49e7-a729-adda09e120a4", "jsonrpc": "2.0", "result": { - "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "12", - "index": 2, - "tx": "Y29tbWl0LWtleT12YWx1ZQ==", + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "height": "20", + "index": 0, + "tx": "dHgwPXZhbHVl", "tx_result": { "code": 0, "codespace": "", @@ -15,23 +15,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" + "key": "key", + "value": "tx0" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" diff --git a/rpc/tests/kvstore_fixtures/incoming/tx_prove.json b/rpc/tests/kvstore_fixtures/incoming/tx_prove.json new file mode 100644 index 000000000..39bb499bf --- /dev/null +++ b/rpc/tests/kvstore_fixtures/incoming/tx_prove.json @@ -0,0 +1,58 @@ +{ + "id": "ca7613d3-1d03-4fcb-9a78-afda77f77250", + "jsonrpc": "2.0", + "result": { + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "height": "20", + "index": 0, + "proof": { + "data": "dHgwPXZhbHVl", + "proof": { + "aunts": [ + "QnwQk7ERU9NjeD1GlLa4H8lscIRFD3evj6SZulKp3T8=" + ], + "index": "0", + "leaf_hash": "3UnhxGnCw+sKtov5uD2YZbCP79vHFwLMc1ZPTaVocKQ=", + "total": "2" + }, + "root_hash": "C77CB763CB27048A8D9F09DA707B7A19ECF4B40C967A57CF16CEDEE1A5130A8F" + }, + "tx": "dHgwPXZhbHVl", + "tx_result": { + "code": 0, + "codespace": "", + "data": null, + "events": [ + { + "attributes": [ + { + "index": true, + "key": "creator", + "value": "Cosmoshi Netowoko" + }, + { + "index": true, + "key": "key", + "value": "tx0" + }, + { + "index": true, + "key": "index_key", + "value": "index is working" + }, + { + "index": false, + "key": "noindex_key", + "value": "index is working" + } + ], + "type": "app" + } + ], + "gas_used": "0", + "gas_wanted": "0", + "info": "", + "log": "" + } + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/incoming/tx_search_no_prove.json b/rpc/tests/kvstore_fixtures/incoming/tx_search_no_prove.json index 8983e7f1f..d3f9da68e 100644 --- a/rpc/tests/kvstore_fixtures/incoming/tx_search_no_prove.json +++ b/rpc/tests/kvstore_fixtures/incoming/tx_search_no_prove.json @@ -1,12 +1,12 @@ { - "id": "9ee74828-e8f1-429d-9d53-254c833bae00", + "id": "24446c5c-eed4-4df6-a514-01e4b2c4de3d", "jsonrpc": "2.0", "result": { "total_count": "8", "txs": [ { "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "height": "34", + "height": "11", "index": 0, "tx": "YXN5bmMta2V5PXZhbHVl", "tx_result": { @@ -18,23 +18,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "YXN5bmMta2V5" + "key": "key", + "value": "async-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -48,7 +48,7 @@ }, { "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "height": "34", + "height": "11", "index": 1, "tx": "c3luYy1rZXk9dmFsdWU=", "tx_result": { @@ -60,23 +60,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "c3luYy1rZXk=" + "key": "key", + "value": "sync-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -90,7 +90,7 @@ }, { "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "34", + "height": "11", "index": 2, "tx": "Y29tbWl0LWtleT12YWx1ZQ==", "tx_result": { @@ -102,23 +102,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" + "key": "key", + "value": "commit-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -132,7 +132,7 @@ }, { "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "height": "41", + "height": "19", "index": 0, "tx": "dHgwPXZhbHVl", "tx_result": { @@ -144,23 +144,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgw" + "key": "key", + "value": "tx0" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -174,7 +174,7 @@ }, { "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "height": "41", + "height": "19", "index": 1, "tx": "dHgxPXZhbHVl", "tx_result": { @@ -186,23 +186,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgx" + "key": "key", + "value": "tx1" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -216,7 +216,7 @@ }, { "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "height": "42", + "height": "20", "index": 0, "tx": "dHgyPXZhbHVl", "tx_result": { @@ -228,23 +228,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgy" + "key": "key", + "value": "tx2" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -258,7 +258,7 @@ }, { "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "height": "43", + "height": "21", "index": 0, "tx": "dHgzPXZhbHVl", "tx_result": { @@ -270,23 +270,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgz" + "key": "key", + "value": "tx3" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -300,7 +300,7 @@ }, { "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "height": "44", + "height": "22", "index": 0, "tx": "dHg0PXZhbHVl", "tx_result": { @@ -312,23 +312,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHg0" + "key": "key", + "value": "tx4" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" diff --git a/rpc/tests/kvstore_fixtures/incoming/tx_search_with_prove.json b/rpc/tests/kvstore_fixtures/incoming/tx_search_with_prove.json index 906773ce6..f79bc5422 100644 --- a/rpc/tests/kvstore_fixtures/incoming/tx_search_with_prove.json +++ b/rpc/tests/kvstore_fixtures/incoming/tx_search_with_prove.json @@ -1,12 +1,12 @@ { - "id": "1cfb0a9f-749f-418a-8f01-34a3268b6b7f", + "id": "65c6ae71-86a4-4bee-9079-e950114f87c9", "jsonrpc": "2.0", "result": { "total_count": "8", "txs": [ { "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "height": "34", + "height": "11", "index": 0, "proof": { "data": "YXN5bmMta2V5PXZhbHVl", @@ -31,23 +31,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "YXN5bmMta2V5" + "key": "key", + "value": "async-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -61,7 +61,7 @@ }, { "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "height": "34", + "height": "11", "index": 1, "proof": { "data": "c3luYy1rZXk9dmFsdWU=", @@ -86,23 +86,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "c3luYy1rZXk=" + "key": "key", + "value": "sync-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -116,7 +116,7 @@ }, { "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "34", + "height": "11", "index": 2, "proof": { "data": "Y29tbWl0LWtleT12YWx1ZQ==", @@ -140,23 +140,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" + "key": "key", + "value": "commit-key" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -170,7 +170,7 @@ }, { "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "height": "41", + "height": "19", "index": 0, "proof": { "data": "dHgwPXZhbHVl", @@ -194,23 +194,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgw" + "key": "key", + "value": "tx0" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -224,7 +224,7 @@ }, { "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "height": "41", + "height": "19", "index": 1, "proof": { "data": "dHgxPXZhbHVl", @@ -248,23 +248,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgx" + "key": "key", + "value": "tx1" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -278,7 +278,7 @@ }, { "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "height": "42", + "height": "20", "index": 0, "proof": { "data": "dHgyPXZhbHVl", @@ -300,23 +300,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgy" + "key": "key", + "value": "tx2" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -330,7 +330,7 @@ }, { "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "height": "43", + "height": "21", "index": 0, "proof": { "data": "dHgzPXZhbHVl", @@ -352,23 +352,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHgz" + "key": "key", + "value": "tx3" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" @@ -382,7 +382,7 @@ }, { "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "height": "44", + "height": "22", "index": 0, "proof": { "data": "dHg0PXZhbHVl", @@ -404,23 +404,23 @@ "attributes": [ { "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" + "key": "creator", + "value": "Cosmoshi Netowoko" }, { "index": true, - "key": "a2V5", - "value": "dHg0" + "key": "key", + "value": "tx4" }, { "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "index_key", + "value": "index is working" }, { "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" + "key": "noindex_key", + "value": "index is working" } ], "type": "app" diff --git a/rpc/tests/kvstore_fixtures/outgoing/abci_info.json b/rpc/tests/kvstore_fixtures/outgoing/abci_info.json index 5d743fbf8..fc55d441b 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/abci_info.json +++ b/rpc/tests/kvstore_fixtures/outgoing/abci_info.json @@ -1,5 +1,5 @@ { - "id": "48e82c4a-4018-433e-9557-c40ac927676f", + "id": "332cf099-c4d1-46b6-beaa-cce28a940e48", "jsonrpc": "2.0", "method": "abci_info", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_existing_key.json b/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_existing_key.json index 14b1208b7..6b7a7b1ef 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_existing_key.json +++ b/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_existing_key.json @@ -1,5 +1,5 @@ { - "id": "ae5b4026-3be4-46ea-876e-2177b74e79a7", + "id": "95375ef6-6ca4-4d14-b28e-24deb522b968", "jsonrpc": "2.0", "method": "abci_query", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_non_existent_key.json b/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_non_existent_key.json index 21f71df75..d79ac801b 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_non_existent_key.json +++ b/rpc/tests/kvstore_fixtures/outgoing/abci_query_with_non_existent_key.json @@ -1,5 +1,5 @@ { - "id": "a8a36384-95f9-481f-8fc5-4a820176e869", + "id": "cb61fc5e-5207-4e5e-bf37-9d4d1a0f21a9", "jsonrpc": "2.0", "method": "abci_query", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_0.json b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_0.json index d5749794c..637d60d18 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_0.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_0.json @@ -1,5 +1,5 @@ { - "id": "c0ba0ff6-0afd-4d18-bc15-0891696d42f2", + "id": "f887795a-4940-4152-9460-1c6bb3f87a5a", "jsonrpc": "2.0", "method": "block", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_1.json b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_1.json index 25a3ad803..7fd9c0ae4 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_1.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_1.json @@ -1,5 +1,5 @@ { - "id": "0166b641-4967-4b3c-a36a-73ea4e5a737a", + "id": "a37bcc8e-6a32-4157-9200-a26be9981bbd", "jsonrpc": "2.0", "method": "block", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_10.json b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_10.json index 332870b8a..bbdffad96 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_at_height_10.json @@ -1,5 +1,5 @@ { - "id": "d01f0a06-172c-48b8-a9ce-5db74af08ad1", + "id": "988f944f-4d85-486f-ad27-2f3574c2a4a3", "jsonrpc": "2.0", "method": "block", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_results_at_height_10.json b/rpc/tests/kvstore_fixtures/outgoing/block_results_at_height_10.json index 639bef55e..fdcdfd1a2 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_results_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_results_at_height_10.json @@ -1,5 +1,5 @@ { - "id": "421a030f-0b5d-4adb-bb17-537d11228040", + "id": "f3ef9de0-d9af-4708-8c17-6679eea49c35", "jsonrpc": "2.0", "method": "block_results", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/block_search.json b/rpc/tests/kvstore_fixtures/outgoing/block_search.json index 91e1c9a82..072b11121 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/block_search.json +++ b/rpc/tests/kvstore_fixtures/outgoing/block_search.json @@ -1,5 +1,5 @@ { - "id": "9ee74828-e8f1-429d-9d53-254c833bae00", + "id": "41ddde55-c7d2-4273-9a8d-2c8a68d006b7", "jsonrpc": "2.0", "method": "block_search", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/blockchain_from_1_to_10.json b/rpc/tests/kvstore_fixtures/outgoing/blockchain_from_1_to_10.json index 93e1f51ae..eac0fd39f 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/blockchain_from_1_to_10.json +++ b/rpc/tests/kvstore_fixtures/outgoing/blockchain_from_1_to_10.json @@ -1,5 +1,5 @@ { - "id": "7f156511-df54-4ede-8821-d6932c878ca2", + "id": "b49a0551-ac45-42ce-85da-dfc2ffc0385b", "jsonrpc": "2.0", "method": "blockchain", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_async.json b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_async.json index 755d233dd..d7423dfa8 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_async.json +++ b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_async.json @@ -1,5 +1,5 @@ { - "id": "4efd497c-5b42-458f-b136-b101e764071d", + "id": "fb725d9a-923a-4fd2-99c0-1b7a9bfdc401", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_commit.json b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_commit.json index 5c381e329..b25bd0ae2 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_commit.json +++ b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_commit.json @@ -1,5 +1,5 @@ { - "id": "c32535b9-bec5-4549-9f90-7aa25d6d6a12", + "id": "c3a4ce32-070f-4e72-be11-96dcd6f4615b", "jsonrpc": "2.0", "method": "broadcast_tx_commit", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_sync.json b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_sync.json index 29500d5ac..8d2c4b3d0 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_sync.json +++ b/rpc/tests/kvstore_fixtures/outgoing/broadcast_tx_sync.json @@ -1,5 +1,5 @@ { - "id": "59795aed-7cb3-4997-803e-f747b8f2cc2f", + "id": "493d43ec-3e1d-476e-928c-faef50754837", "jsonrpc": "2.0", "method": "broadcast_tx_sync", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/commit_at_height_10.json b/rpc/tests/kvstore_fixtures/outgoing/commit_at_height_10.json index 256e154c7..2b3fc2dda 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/commit_at_height_10.json +++ b/rpc/tests/kvstore_fixtures/outgoing/commit_at_height_10.json @@ -1,5 +1,5 @@ { - "id": "21ad34a1-45a5-4766-a917-d5492b24f941", + "id": "6f54a0c9-cc78-4d15-8952-a4f61d757774", "jsonrpc": "2.0", "method": "commit", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/consensus_params.json b/rpc/tests/kvstore_fixtures/outgoing/consensus_params.json index 9562649d8..4e25b2bd7 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/consensus_params.json +++ b/rpc/tests/kvstore_fixtures/outgoing/consensus_params.json @@ -1,5 +1,5 @@ { - "id": "6c5641b5-079a-4d2d-9009-f7d4ce20b2ec", + "id": "e7ef4782-f290-42a1-94fd-bc8e84e76b53", "jsonrpc": "2.0", "method": "consensus_params", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/consensus_state.json b/rpc/tests/kvstore_fixtures/outgoing/consensus_state.json index 942985640..29b3af892 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/consensus_state.json +++ b/rpc/tests/kvstore_fixtures/outgoing/consensus_state.json @@ -1,5 +1,5 @@ { - "id": "523312c6-ea35-4274-b521-401e724bb344", + "id": "51f544e1-0f45-4fd4-ba95-80b073c63137", "jsonrpc": "2.0", "method": "consensus_state", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/genesis.json b/rpc/tests/kvstore_fixtures/outgoing/genesis.json index b0d63b1e4..83368316e 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/genesis.json +++ b/rpc/tests/kvstore_fixtures/outgoing/genesis.json @@ -1,5 +1,5 @@ { - "id": "9f71da58-c631-4141-be10-a9dac3496af0", + "id": "97b6f531-5f8c-424a-91be-9a0caaf6f34d", "jsonrpc": "2.0", "method": "genesis", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/net_info.json b/rpc/tests/kvstore_fixtures/outgoing/net_info.json index 3588ea1fd..f9752861f 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/net_info.json +++ b/rpc/tests/kvstore_fixtures/outgoing/net_info.json @@ -1,5 +1,5 @@ { - "id": "a01a558c-a893-415a-8f57-21f104d1aa46", + "id": "87e7b1f1-46bc-4789-8978-f570ed2600b1", "jsonrpc": "2.0", "method": "net_info", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/status.json b/rpc/tests/kvstore_fixtures/outgoing/status.json index b2e090c93..ba1dacbf8 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/status.json +++ b/rpc/tests/kvstore_fixtures/outgoing/status.json @@ -1,5 +1,5 @@ { - "id": "7acd6adc-648a-4e73-88de-911fb2db10c5", + "id": "84cd8df6-1ab8-4678-9294-7c7f63b60ad7", "jsonrpc": "2.0", "method": "status", "params": null diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_malformed.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_malformed.json index 8964332fc..d4a0b9a04 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_malformed.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_malformed.json @@ -1,5 +1,5 @@ { - "id": "502f1307-1edc-45d8-9495-5c41a61c1885", + "id": "0d873a57-cfe4-4e5a-829f-4ec93f7bf4ba", "jsonrpc": "2.0", "method": "subscribe", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_newblock.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_newblock.json index 6d4434699..4878f59a5 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_newblock.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_newblock.json @@ -1,5 +1,5 @@ { - "id": "8fd4ce82-da4b-439b-b6a2-013dd31b33fc", + "id": "525ea6b8-bc6b-4f29-b9b7-241ce2a3f5b5", "jsonrpc": "2.0", "method": "subscribe", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs.json index 8e2910d9a..aecc8a8a0 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs.json @@ -1,5 +1,5 @@ { - "id": "30306628-9f5c-4846-acc2-08a7e1843afc", + "id": "c68ff230-5dc6-4d13-8ad7-2ed4a6009c2d", "jsonrpc": "2.0", "method": "subscribe", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_0.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_0.json index 3602d6eaf..423d9e32e 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_0.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_0.json @@ -1,5 +1,5 @@ { - "id": "f04ffeb5-9cfa-4248-a17c-787453bae43a", + "id": "90553359-b197-47a8-a2b4-257e1e6d5f9d", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_1.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_1.json index 76e92bc2d..927d2a7bc 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_1.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_1.json @@ -1,5 +1,5 @@ { - "id": "7fc1c81c-5c8a-43f0-aaeb-f862c3eea928", + "id": "379361db-535d-4141-be4a-33200e0aff88", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_2.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_2.json index 57651cf54..192718f2c 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_2.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_2.json @@ -1,5 +1,5 @@ { - "id": "d0d77026-920a-4686-87a2-bf9206615722", + "id": "eebd09f1-5f2d-44d6-aece-6987d7facc79", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_3.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_3.json index 7050a8751..3469677f2 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_3.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_3.json @@ -1,5 +1,5 @@ { - "id": "2af206dc-f501-4c7b-9024-fad410875334", + "id": "0596b8cb-645f-4bb4-83a6-0c69cef87d11", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_4.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_4.json index 429ddc28a..42e6b2953 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_4.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_4.json @@ -1,5 +1,5 @@ { - "id": "349fb5d9-5af4-42c2-acc0-656ce0fd6127", + "id": "d94ad0c6-5fe3-44ea-9e32-aa7780a17e45", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_5.json b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_5.json index b88b0fa07..6306b6db4 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_5.json +++ b/rpc/tests/kvstore_fixtures/outgoing/subscribe_txs_broadcast_tx_5.json @@ -1,5 +1,5 @@ { - "id": "eceb3ffc-0324-4897-8ccd-eea89ae80fd2", + "id": "674400fc-5e82-4a74-8f14-c47d7696e091", "jsonrpc": "2.0", "method": "broadcast_tx_async", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx.json b/rpc/tests/kvstore_fixtures/outgoing/tx.json deleted file mode 100644 index 1a3535ad0..000000000 --- a/rpc/tests/kvstore_fixtures/outgoing/tx.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "id": "aeca4fe2-9a71-4906-8a8e-91ea4114ea4b", - "jsonrpc": "2.0", - "method": "tx", - "params": { - "hash": "1j+cI3keYQQQtXbYwnu1rqyTzBpYUiQop7MqEnYIWGA=", - "prove": false - } -} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx_no_prove.json b/rpc/tests/kvstore_fixtures/outgoing/tx_no_prove.json new file mode 100644 index 000000000..e2c779442 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/outgoing/tx_no_prove.json @@ -0,0 +1,9 @@ +{ + "id": "0fdbf4b0-6223-49e7-a729-adda09e120a4", + "jsonrpc": "2.0", + "method": "tx", + "params": { + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "prove": false + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx_prove.json b/rpc/tests/kvstore_fixtures/outgoing/tx_prove.json new file mode 100644 index 000000000..6d9c6bd56 --- /dev/null +++ b/rpc/tests/kvstore_fixtures/outgoing/tx_prove.json @@ -0,0 +1,9 @@ +{ + "id": "ca7613d3-1d03-4fcb-9a78-afda77f77250", + "jsonrpc": "2.0", + "method": "tx", + "params": { + "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", + "prove": true + } +} \ No newline at end of file diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx_search_no_prove.json b/rpc/tests/kvstore_fixtures/outgoing/tx_search_no_prove.json index 117d7537c..b7c3549f6 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/tx_search_no_prove.json +++ b/rpc/tests/kvstore_fixtures/outgoing/tx_search_no_prove.json @@ -1,5 +1,5 @@ { - "id": "9ee74828-e8f1-429d-9d53-254c833bae00", + "id": "24446c5c-eed4-4df6-a514-01e4b2c4de3d", "jsonrpc": "2.0", "method": "tx_search", "params": { diff --git a/rpc/tests/kvstore_fixtures/outgoing/tx_search_with_prove.json b/rpc/tests/kvstore_fixtures/outgoing/tx_search_with_prove.json index f910032df..9726d8ea9 100644 --- a/rpc/tests/kvstore_fixtures/outgoing/tx_search_with_prove.json +++ b/rpc/tests/kvstore_fixtures/outgoing/tx_search_with_prove.json @@ -1,5 +1,5 @@ { - "id": "1cfb0a9f-749f-418a-8f01-34a3268b6b7f", + "id": "65c6ae71-86a4-4bee-9079-e950114f87c9", "jsonrpc": "2.0", "method": "tx_search", "params": { diff --git a/rpc/tests/parse_response.rs b/rpc/tests/parse_response.rs deleted file mode 100644 index 6acc0c345..000000000 --- a/rpc/tests/parse_response.rs +++ /dev/null @@ -1,512 +0,0 @@ -//! Tendermint RPC endpoint testing. - -use std::{fs, path::PathBuf}; -use tendermint::abci::Code; - -use core::str::FromStr; -use tendermint::vote; -use tendermint_rpc::endpoint::consensus_state::RoundVote; -use tendermint_rpc::{ - endpoint, - error::{Error, ErrorDetail}, - Code as RpcCode, Response, -}; - -const EXAMPLE_APP: &str = "GaiaApp"; -const EXAMPLE_CHAIN: &str = "cosmoshub-2"; - -fn read_json_fixture(name: &str) -> String { - fs::read_to_string(PathBuf::from("./tests/support/").join(name.to_owned() + ".json")).unwrap() -} - -#[test] -fn abci_info() { - let response = endpoint::abci_info::Response::from_string(&read_json_fixture("abci_info")) - .unwrap() - .response; - - assert_eq!(response.data.as_str(), EXAMPLE_APP); - assert_eq!(response.last_block_height.value(), 488_120); -} - -#[test] -fn abci_query() { - let response = endpoint::abci_query::Response::from_string(&read_json_fixture("abci_query")) - .unwrap() - .response; - - assert_eq!(response.height.value(), 1); - assert!(response.proof.is_some()); - let proof = response.proof.unwrap(); - assert_eq!(proof.ops.len(), 2); - assert_eq!(proof.ops[0].field_type, "iavl:v"); - assert_eq!(proof.ops[1].field_type, "multistore"); -} - -#[test] -fn block() { - let response = endpoint::block::Response::from_string(&read_json_fixture("block")).unwrap(); - - assert_eq!(response.block.header.version.block, 10); - assert_eq!(response.block.header.chain_id.as_str(), EXAMPLE_CHAIN); - assert_eq!(response.block.header.height.value(), 10); - assert_eq!(response.block.data.iter().len(), 0); - assert_eq!(response.block.evidence.iter().len(), 0); - assert_eq!( - response - .block - .last_commit - .as_ref() - .unwrap() - .signatures - .len(), - 1 - ); -} - -#[test] -fn block_with_evidences() { - let response = - endpoint::block::Response::from_string(&read_json_fixture("block_with_evidences")).unwrap(); - - let evidence = response.block.evidence.iter().next().unwrap(); - - match evidence { - tendermint::evidence::Evidence::DuplicateVote(_) => (), - _ => unreachable!(), - } -} - -// TODO: Update this test and its json file -// #[test] -// fn block_empty_block_id() { -// let response = -// endpoint::block::Response::from_string(&read_json_fixture("block_empty_block_id")) -// .unwrap(); -// -// let tendermint::Block { last_commit, .. } = response.block; -// -// assert_eq!(last_commit.as_ref().unwrap().precommits.len(), 2); -// assert!(last_commit.unwrap().precommits[0] -// .as_ref() -// .unwrap() -// .block_id -// .is_none()); -// } - -#[test] -fn first_block() { - let response = - endpoint::block::Response::from_string(&read_json_fixture("first_block")).unwrap(); - - assert_eq!(response.block.header.version.block, 10); - assert_eq!(response.block.header.chain_id.as_str(), EXAMPLE_CHAIN); - assert_eq!(response.block.header.height.value(), 1); - assert!(response.block.header.last_block_id.is_none()); - - assert_eq!(response.block.data.iter().len(), 0); - assert_eq!(response.block.evidence.iter().len(), 0); - assert!(response.block.last_commit.is_none()); -} -#[test] -fn block_results() { - let response = - endpoint::block_results::Response::from_string(&read_json_fixture("block_results")) - .unwrap(); - assert_eq!(response.height.value(), 1814); - - let validator_updates = response.validator_updates; - let deliver_tx = response.txs_results.unwrap(); - let log_json = deliver_tx[0].log.value(); - let log_json_value = serde_json::Value::from_str(log_json.as_str()).unwrap(); - - assert_eq!(log_json_value[0]["msg_index"].as_str().unwrap(), "0"); - assert!(log_json_value[0]["success"].as_bool().unwrap()); - - assert_eq!(deliver_tx[0].gas_wanted.value(), 200_000); - assert_eq!(deliver_tx[0].gas_used.value(), 105_662); - assert_eq!(deliver_tx[0].events.len(), 1); - assert_eq!(deliver_tx[0].events[0].attributes.len(), 3); - assert_eq!(deliver_tx[0].events[0].attributes[0].key.as_ref(), "action"); - assert_eq!( - deliver_tx[0].events[0].attributes[0].value.as_ref(), - "delegate" - ); - - assert_eq!(validator_updates[0].power.value(), 1_233_243); -} - -#[test] -fn blockchain() { - let response = - endpoint::blockchain::Response::from_string(&read_json_fixture("blockchain")).unwrap(); - - assert_eq!(response.last_height.value(), 488_556); - assert_eq!(response.block_metas.len(), 10); - - let block_meta = &response.block_metas[0]; - assert_eq!(block_meta.header.chain_id.as_str(), EXAMPLE_CHAIN) -} - -#[test] -fn broadcast_tx_async() { - let response = endpoint::broadcast::tx_async::Response::from_string(&read_json_fixture( - "broadcast_tx_async", - )) - .unwrap(); - - assert_eq!( - &response.hash.to_string(), - "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - ); -} - -#[test] -fn broadcast_tx_sync() { - let response = endpoint::broadcast::tx_sync::Response::from_string(&read_json_fixture( - "broadcast_tx_sync", - )) - .unwrap(); - - assert_eq!(response.code, Code::Ok); - assert_eq!( - &response.hash.to_string(), - "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - ); -} - -#[test] -fn broadcast_tx_sync_int() { - let response = endpoint::broadcast::tx_sync::Response::from_string(&read_json_fixture( - "broadcast_tx_sync_int", - )) - .unwrap(); - - assert_eq!(response.code, Code::Ok); - assert_eq!( - &response.hash.to_string(), - "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - ); -} - -#[test] -fn broadcast_tx_commit() { - let response = endpoint::broadcast::tx_commit::Response::from_string(&read_json_fixture( - "broadcast_tx_commit", - )) - .unwrap(); - - assert_eq!( - response.deliver_tx.data.unwrap().value(), - &vec![ - 10, 22, 10, 20, 99, 111, 110, 110, 101, 99, 116, 105, 111, 110, 95, 111, 112, 101, 110, - 95, 105, 110, 105, 116 - ] - ); - assert_eq!( - &response.hash.to_string(), - "EFA00D85332A8197CF290E4724BAC877EA93DDFE547A561828BAE45A29BF1DAD" - ); - assert_eq!(5, response.deliver_tx.events.len()); -} - -#[test] -fn broadcast_tx_commit_null_data() { - let response = endpoint::broadcast::tx_commit::Response::from_string(&read_json_fixture( - "broadcast_tx_commit_null_data", - )) - .unwrap(); - - assert_eq!( - &response.hash.to_string(), - "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - ); -} - -#[test] -fn commit() { - let response = endpoint::commit::Response::from_string(&read_json_fixture("commit")).unwrap(); - let header = response.signed_header.header; - assert_eq!(header.chain_id.as_ref(), "dockerchain"); - // For now we just want to make sure the commit including precommits and a block_id exist - // in SignedHeader; later we should verify some properties: e.g. block_id.hash matches the - // header etc: - let commit = response.signed_header.commit; - let block_id = commit.block_id; - let _signatures = &commit.signatures; - assert_eq!(header.hash(), block_id.hash); -} - -#[test] -fn commit_height_1() { - let response = endpoint::commit::Response::from_string(&read_json_fixture("commit_1")).unwrap(); - let header = response.signed_header.header; - let commit = response.signed_header.commit; - let block_id = commit.block_id; - assert_eq!(header.hash(), block_id.hash); -} - -#[test] -fn genesis() { - let response = endpoint::genesis::Response::from_string(&read_json_fixture("genesis")).unwrap(); - - let tendermint::Genesis { - chain_id, - consensus_params, - .. - } = response.genesis; - - assert_eq!(chain_id.as_str(), EXAMPLE_CHAIN); - assert_eq!(consensus_params.block.max_bytes, 200_000); -} - -#[test] -fn health() { - endpoint::health::Response::from_string(&read_json_fixture("health")).unwrap(); -} - -#[test] -fn net_info() { - let response = - endpoint::net_info::Response::from_string(&read_json_fixture("net_info")).unwrap(); - - assert_eq!(response.n_peers, 2); - assert_eq!(response.peers[0].node_info.network.as_str(), EXAMPLE_CHAIN); -} - -#[test] -fn status() { - let response = endpoint::status::Response::from_string(&read_json_fixture("status")).unwrap(); - - assert_eq!(response.node_info.network.as_str(), EXAMPLE_CHAIN); - assert_eq!(response.sync_info.latest_block_height.value(), 410_744); - assert_eq!(response.validator_info.power.value(), 0); -} - -#[test] -fn validators() { - let response = - endpoint::validators::Response::from_string(&read_json_fixture("validators")).unwrap(); - - assert_eq!(response.block_height.value(), 42); - - let validators = response.validators; - assert_eq!(validators.len(), 65); -} - -#[test] -fn jsonrpc_error() { - let result = endpoint::blockchain::Response::from_string(&read_json_fixture("error")); - - match result { - Err(Error(ErrorDetail::Response(e), _)) => { - let response = e.source; - assert_eq!(response.code(), RpcCode::InternalError); - assert_eq!(response.message(), "Internal error"); - assert_eq!( - response.data().unwrap(), - "min height 321 can't be greater than max height 123" - ); - } - _ => panic!("expected Response error"), - } -} - -#[test] -fn tx_no_prove() { - let tx = endpoint::tx::Response::from_string(&read_json_fixture("tx_no_prove")).unwrap(); - - assert_eq!( - "291B44C883803751917D547238EAC419E968C0171A3154D777B2EA8EA5039C57", - tx.hash.to_string() - ); - assert_eq!(2, tx.height.value()); - - let events = &tx.tx_result.events; - assert_eq!(events.len(), 6); - assert_eq!(events[0].attributes.len(), 3); - assert_eq!(events[0].attributes[0].key.as_ref(), "recipient"); - assert_eq!( - events[0].attributes[0].value.as_ref(), - "cosmos17xpfvakm2amg962yls6f84z3kell8c5lserqta" - ); - - assert!(tx.proof.is_none()); -} - -#[test] -fn tx_with_prove() { - let tx = endpoint::tx::Response::from_string(&read_json_fixture("tx_with_prove")).unwrap(); - - assert_eq!( - "291B44C883803751917D547238EAC419E968C0171A3154D777B2EA8EA5039C57", - tx.hash.to_string() - ); - assert_eq!(2, tx.height.value()); - - let events = &tx.tx_result.events; - assert_eq!(events.len(), 6); - assert_eq!(events[0].attributes.len(), 3); - assert_eq!(events[0].attributes[0].key.as_ref(), "recipient"); - assert_eq!( - events[0].attributes[0].value.as_ref(), - "cosmos17xpfvakm2amg962yls6f84z3kell8c5lserqta" - ); - - let proof = tx.proof.as_ref().unwrap(); - assert_eq!( - vec![ - 10, 159, 1, 10, 142, 1, 10, 28, 47, 99, 111, 115, 109, 111, 115, 46, 98, 97, 110, 107, - 46, 118, 49, 98, 101, 116, 97, 49, 46, 77, 115, 103, 83, 101, 110, 100, 18, 110, 10, - 45, 99, 111, 115, 109, 111, 115, 49, 115, 50, 116, 119, 52, 53, 99, 55, 115, 116, 115, - 97, 102, 107, 52, 50, 118, 115, 122, 57, 115, 106, 48, 57, 106, 109, 48, 57, 121, 54, - 116, 107, 52, 113, 101, 101, 114, 104, 18, 45, 99, 111, 115, 109, 111, 115, 49, 110, - 118, 51, 117, 102, 55, 104, 112, 117, 118, 107, 52, 101, 109, 51, 57, 118, 120, 114, - 57, 52, 52, 104, 112, 104, 117, 106, 116, 117, 113, 97, 50, 120, 108, 55, 54, 56, 56, - 26, 14, 10, 9, 115, 97, 109, 111, 108, 101, 97, 110, 115, 18, 1, 49, 18, 9, 116, 101, - 115, 116, 32, 109, 101, 109, 111, 24, 169, 70, 18, 102, 10, 78, 10, 70, 10, 31, 47, 99, - 111, 115, 109, 111, 115, 46, 99, 114, 121, 112, 116, 111, 46, 115, 101, 99, 112, 50, - 53, 54, 107, 49, 46, 80, 117, 98, 75, 101, 121, 18, 35, 10, 33, 3, 98, 211, 158, 175, - 190, 7, 170, 66, 0, 20, 131, 204, 81, 56, 214, 191, 143, 101, 195, 149, 126, 234, 114, - 55, 58, 237, 26, 39, 95, 114, 111, 164, 18, 4, 10, 2, 8, 1, 18, 20, 10, 14, 10, 9, 115, - 97, 109, 111, 108, 101, 97, 110, 115, 18, 1, 49, 16, 160, 141, 6, 26, 64, 185, 213, - 205, 42, 231, 20, 240, 14, 103, 188, 41, 94, 116, 55, 181, 30, 185, 212, 221, 131, 145, - 132, 32, 83, 223, 255, 85, 10, 220, 211, 124, 172, 29, 152, 55, 91, 199, 85, 165, 186, - 68, 87, 22, 14, 235, 208, 43, 62, 93, 129, 228, 237, 222, 77, 146, 245, 107, 123, 173, - 19, 73, 154, 174, 249 - ], - proof.data - ); - assert_eq!( - vec![ - 105, 196, 2, 216, 75, 198, 114, 80, 111, 27, 54, 17, 4, 107, 139, 37, 40, 156, 38, 0, - 253, 122, 0, 118, 137, 197, 148, 154, 51, 32, 101, 87 - ], - proof.root_hash - ); -} - -#[test] -fn tx_search_no_prove() { - let response = - endpoint::tx_search::Response::from_string(&read_json_fixture("tx_search_no_prove")) - .unwrap(); - - assert_eq!(8, response.total_count); - assert_eq!(8, response.txs.len()); - assert_eq!( - "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - response.txs[0].hash.to_string() - ); - assert_eq!(11, response.txs[0].height.value()); - assert!(response.txs[0].proof.is_none()); - - let events = &response.txs[0].tx_result.events; - assert_eq!(events.len(), 1); - assert_eq!(events[0].attributes.len(), 4); - assert_eq!(events[0].attributes[0].key.as_ref(), "creator"); - assert_eq!(events[0].attributes[0].value.as_ref(), "Cosmoshi Netowoko"); -} - -#[test] -fn tx_search_with_prove() { - let response = - endpoint::tx_search::Response::from_string(&read_json_fixture("tx_search_with_prove")) - .unwrap(); - - assert_eq!(8, response.total_count); - assert_eq!(8, response.txs.len()); - assert_eq!( - "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - response.txs[0].hash.to_string() - ); - assert_eq!(11, response.txs[0].height.value()); - let proof = response.txs[0].proof.as_ref().unwrap(); - assert_eq!( - vec![97, 115, 121, 110, 99, 45, 107, 101, 121, 61, 118, 97, 108, 117, 101], - proof.data - ); - assert_eq!( - vec![ - 245, 70, 67, 176, 5, 16, 101, 200, 125, 163, 26, 101, 69, 49, 182, 95, 155, 87, 56, 15, - 155, 243, 51, 47, 245, 188, 167, 88, 69, 103, 38, 140 - ], - proof.root_hash - ); - - let events = &response.txs[0].tx_result.events; - assert_eq!(events.len(), 1); - assert_eq!(events[0].attributes.len(), 4); - assert_eq!(events[0].attributes[0].key.as_ref(), "creator"); - assert_eq!(events[0].attributes[0].value.as_ref(), "Cosmoshi Netowoko"); -} - -#[test] -fn consensus_state() { - let response = - endpoint::consensus_state::Response::from_string(&read_json_fixture("consensus_state")) - .unwrap(); - - let hrs = &response.round_state.height_round_step; - assert_eq!(hrs.height.value(), 1262197); - assert_eq!(hrs.round.value(), 0); - assert_eq!(hrs.step, 8); - - let hvs = &response.round_state.height_vote_set; - assert_eq!(hvs.len(), 1); - assert_eq!(hvs[0].round, 0); - assert_eq!(hvs[0].prevotes.len(), 2); - match &hvs[0].prevotes[0] { - RoundVote::Vote(summary) => { - assert_eq!(summary.validator_index, 0); - assert_eq!( - summary.validator_address_fingerprint.as_ref(), - vec![0, 0, 1, 228, 67, 253] - ); - assert_eq!(summary.height.value(), 1262197); - assert_eq!(summary.round.value(), 0); - assert_eq!(summary.vote_type, vote::Type::Prevote); - assert_eq!( - summary.block_id_hash_fingerprint.as_ref(), - vec![99, 74, 218, 241, 244, 2] - ); - assert_eq!( - summary.signature_fingerprint.as_ref(), - vec![123, 185, 116, 225, 186, 64] - ); - assert_eq!( - summary.timestamp.as_rfc3339(), - "2019-08-01T11:52:35.513572509Z" - ); - } - _ => panic!("unexpected round vote type: {:?}", hvs[0].prevotes[0]), - } - assert_eq!(hvs[0].prevotes[1], RoundVote::Nil); - assert_eq!(hvs[0].precommits.len(), 2); - match &hvs[0].precommits[0] { - RoundVote::Vote(summary) => { - assert_eq!(summary.validator_index, 5); - assert_eq!( - summary.validator_address_fingerprint.as_ref(), - vec![24, 199, 141, 19, 92, 157] - ); - assert_eq!(summary.height.value(), 1262197); - assert_eq!(summary.round.value(), 0); - assert_eq!(summary.vote_type, vote::Type::Precommit); - assert_eq!( - summary.block_id_hash_fingerprint.as_ref(), - vec![99, 74, 218, 241, 244, 2] - ); - assert_eq!( - summary.signature_fingerprint.as_ref(), - vec![139, 94, 255, 254, 171, 205] - ); - assert_eq!( - summary.timestamp.as_rfc3339(), - "2019-08-01T11:52:36.25600005Z" - ); - } - _ => panic!("unexpected round vote type: {:?}", hvs[0].precommits[0]), - } - assert_eq!(hvs[0].precommits[1], RoundVote::Nil); -} diff --git a/rpc/tests/support/abci_info.json b/rpc/tests/support/abci_info.json deleted file mode 100644 index 5b4ea0d74..000000000 --- a/rpc/tests/support/abci_info.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "response": { - "data": "GaiaApp", - "version": "0.17.0", - "app_version": "1", - "last_block_height": "488120", - "last_block_app_hash": "UAAAAAAAAAA=" - } - } -} \ No newline at end of file diff --git a/rpc/tests/support/abci_query.json b/rpc/tests/support/abci_query.json deleted file mode 100644 index 933608a6c..000000000 --- a/rpc/tests/support/abci_query.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "response": { - "log": "exists", - "height": "1", - "proofOps": { - "ops": [ - { - "type": "iavl:v", - "key": "Y29uc2Vuc3VzU3RhdGUvaWJjb25lY2xpZW50LzIy", - "data": "8QEK7gEKKAgIEAwYHCIgG9RAkJgHlxNjmyzOW6bUAidhiRSja0x6+GXCVENPG1oKKAgGEAUYFyIgwRns+dJvjf1Zk2BaFrXz8inPbvYHB7xx2HCy9ima5f8KKAgEEAMYFyogOr8EGajEV6fG5fzJ2fAAvVMgRLhdMJTzCPlogl9rxlIKKAgCEAIYFyIgcjzX/a+2bFbnNldpawQqZ+kYhIwz5r4wCUzuu1IFW04aRAoeY29uc2Vuc3VzU3RhdGUvaWJjb25lY2xpZW50LzIyEiAZ1uuG60K4NHJZZMuS9QX6o4eEhica5jIHYwflRiYkDBgX" - }, - { - "type": "multistore", - "key": "aWJj", - "data": "CvEECjAKBGJhbmsSKAomCIjYAxIg2MEyyonbZButYnvSRkf2bPQg+nqA+Am1MeDxG6F4p1UKLwoDYWNjEigKJgiI2AMSIN2YHczeuXNvyetrSFQpkCcJzfB6PXVCw0i/XShMgPnIChEKB3VwZ3JhZGUSBgoECIjYAwovCgNnb3YSKAomCIjYAxIgYM0TfBli7KxhY4nWgDSDPykhUJwtKFql9RU5l86WinQKLwoDaWJjEigKJgiI2AMSIFp6aJASeInQKF8y824zjmgcFORN6M+ECbgFfJkobKs8CjAKBG1haW4SKAomCIjYAxIgsZzwmLQ7PH1UeZ/vCUSqlQmfgt3CGfoMgJLkUqKCv0EKMwoHc3Rha2luZxIoCiYIiNgDEiCiBZoBLyDGj5euy3n33ik+SpqYK9eB5xbI+iY8ycYVbwo0CghzbGFzaGluZxIoCiYIiNgDEiAJz3gEYuIhdensHU3b5qH5ons2quepd6EaRgCHXab6PQoyCgZzdXBwbHkSKAomCIjYAxIglWLA5/THPTiTxAlaLHOBYFIzEJTmKPznItUwAc8zD+AKEgoIZXZpZGVuY2USBgoECIjYAwowCgRtaW50EigKJgiI2AMSIMS8dZ1j8F6JVVv+hB1rHBZC+gIFJxHan2hM8qDC64n/CjIKBnBhcmFtcxIoCiYIiNgDEiB8VIzExUHX+SvHZFz/P9NM9THnw/gTDDLVReuZX8htLgo4CgxkaXN0cmlidXRpb24SKAomCIjYAxIg3u/Nd4L+8LT8OXJCh14o8PHIJ/GLQwsmE7KYIl1GdSYKEgoIdHJhbnNmZXISBgoECIjYAw==" - } - ] - }, - "value": "61626364", - "key": "61626364", - "index": "-1", - "code": "0" - } - } -} diff --git a/rpc/tests/support/block.json b/rpc/tests/support/block.json deleted file mode 100644 index 2a8bd2e7a..000000000 --- a/rpc/tests/support/block.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "block_id": { - "hash": "4FFD15F274758E474898498A191EB8CA6FC6C466576255DA132908A12AC1674C", - "part_set_header": { - "total": 1, - "hash": "BBA710736635FA20CDB4F48732563869E90871D31FE9E7DE3D900CD4334D8775" - } - }, - "block": { - "header": { - "version": { - "block": "10", - "app": "1" - }, - "chain_id": "cosmoshub-2", - "height": "10", - "time": "2020-03-15T16:57:08.151Z", - "last_block_id": { - "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "part_set_header": { - "total": 1, - "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" - } - }, - "last_commit_hash": "594F029060D5FAE6DDF82C7DC4612055EC7F941DFED34D43B2754008DC3BBC77", - "data_hash": "", - "validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "next_validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "A48091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "evidence_hash": "", - "proposer_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": null - }, - "last_commit": { - "height": "9", - "round": 0, - "block_id": { - "hash": "760E050B2404A4BC661635CA552FF45876BCD927C367ADF88961E389C01D32FF", - "part_set_header": { - "total": 1, - "hash": "485070D01F9543827B3F9BAF11BDCFFBFD2BDED0B63D7192FA55649B94A1D5DE" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3", - "timestamp": "2020-03-15T16:57:08.151Z", - "signature": "GRBX/UNaf19vs5byJfAuXk2FQ05soOHmaMFCbrNBhHdNZtFKHp6J9eFwZrrG+YCxKMdqPn2tQWAes6X8kpd1DA==" - } - ] - } - } - } -} \ No newline at end of file diff --git a/rpc/tests/support/block_empty_block_id.json b/rpc/tests/support/block_empty_block_id.json deleted file mode 100644 index f0396d701..000000000 --- a/rpc/tests/support/block_empty_block_id.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "block_meta": { - "block_id": { - "hash": "17E077714CE817C0DB3118D21EA060B2A16D9F07CB08AB603292F797FFD7F361", - "part_set_header": { - "total": "1", - "hash": "1ED5B68A21D82D091C25D535F52C2D47419162618245C60D69B162A366F97A45" - } - }, - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "test-ab", - "height": "20", - "time": "2019-12-24T11:03:18.276852105Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "part_set_header": { - "total": "1", - "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" - } - }, - "last_commit_hash": "4D58DEA6B78D344255F6A7B0756F18D98DDFDF870D930337E13B6C7236BD07B0", - "data_hash": "", - "validators_hash": "A3E1386AC4A481A2A9DEB063B4D85973F1B789A2ECB15730B7E77FFFC698EC01", - "next_validators_hash": "A3E1386AC4A481A2A9DEB063B4D85973F1B789A2ECB15730B7E77FFFC698EC01", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "98F00A4EA270197259504954450D5ED5FA878284920FCC08070385C06F9B6515", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "F18E6EE0D8AD707CED69D0606F30035B07E37DDF" - } - }, - "block": { - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "test-ab", - "height": "20", - "time": "2019-12-24T11:03:18.276852105Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "part_set_header": { - "total": "1", - "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" - } - }, - "last_commit_hash": "4D58DEA6B78D344255F6A7B0756F18D98DDFDF870D930337E13B6C7236BD07B0", - "data_hash": "", - "validators_hash": "A3E1386AC4A481A2A9DEB063B4D85973F1B789A2ECB15730B7E77FFFC698EC01", - "next_validators_hash": "A3E1386AC4A481A2A9DEB063B4D85973F1B789A2ECB15730B7E77FFFC698EC01", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "98F00A4EA270197259504954450D5ED5FA878284920FCC08070385C06F9B6515", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "F18E6EE0D8AD707CED69D0606F30035B07E37DDF" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": null - }, - "last_commit": { - "block_id": { - "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "part_set_header": { - "total": "1", - "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" - } - }, - "precommits": [ - { - "type": 2, - "height": "19", - "round": "0", - "block_id": { - "hash": "", - "part_set_header": { - "total": "0", - "hash": "" - } - }, - "timestamp": "2019-12-24T11:03:18.534146209Z", - "validator_address": "9ACE9BC3DC3455BC89427F53172077D84E54D5BD", - "validator_index": "0", - "signature": "1Go3/vHT/g9tplm3TtaiFupZG1tYYycLf4HXbVJvN3lWD91KwZA4SNKSfzRX5ccOQXy1QTqjLk1Zquc/4w00DQ==" - }, - { - "type": 2, - "height": "19", - "round": "0", - "block_id": { - "hash": "08150B2F0F9D873C5446D77BF10EF1FD33A6C3FDE03BB76CC99F3A047A7A93CB", - "part_set_header": { - "total": "1", - "hash": "EF93CDE980C98BD4720ADA7984121B4E0E153B004BB94E583809281C576FFAB1" - } - }, - "timestamp": "2019-12-24T11:03:18.276852105Z", - "validator_address": "F18E6EE0D8AD707CED69D0606F30035B07E37DDF", - "validator_index": "1", - "signature": "pE4CEh2HnXmZ8UfCcvuQ/3udpzoWTT9cxRzEv5XdTyV+WEQNna8oO2uflFc/5wORB/DoGmUjOlfS512HcfFuBQ==" - } - ] - } - } - } -} diff --git a/rpc/tests/support/block_results.json b/rpc/tests/support/block_results.json deleted file mode 100644 index d87d51011..000000000 --- a/rpc/tests/support/block_results.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "height": "1814", - "txs_results": [ - { - "code": "0", - "log": "[{\"msg_index\":\"0\",\"success\":true,\"log\":\"\"}]", - "info": "", - "gas_wanted": "200000", - "gas_used": "105662", - "data": null, - "events": [ - { - "type": "someevent1", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "ZGVsZWdhdGU=" - }, - { - "key": "ZGVsZWdhdG9y", - "value": "Y29zbW9zMW53eWV5cXVkenJ1NWw2NGU4M2RubXE3OXE0c3Rxejdmd2w1djVh" - }, - { - "key": "ZGVzdGluYXRpb24tdmFsaWRhdG9y", - "value": "Y29zbW9zdmFsb3BlcjFlaDVtd3UwNDRnZDVudGtrYzJ4Z2ZnODI0N21nYzU2Zno0c2RnMw==" - } - ] - } - ], - "codespace": "" - }, - { - "code": "0", - "log": "[{\"msg_index\":\"0\",\"success\":true,\"log\":\"\"}]", - "info": "", - "gas_wanted": "99164", - "gas_used": "99164", - "data": null, - "events": [ - { - "type": "someevent2", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "ZGVsZWdhdGU=" - }, - { - "key": "ZGVsZWdhdG9y", - "value": "Y29zbW9zMTBhN2V2eXlkY2s0Mm5odGE5M3RubXY3eXU0aGFxenQ5NHh5dTU0" - }, - { - "key": "ZGVzdGluYXRpb24tdmFsaWRhdG9y", - "value": "Y29zbW9zdmFsb3BlcjF1cnRweHdmdXU4azU3YXF0MGg1emhzdm1qdDRtMm1tZHIwanV6Zw==" - } - ] - } - ], - "codespace": "" - }, - { - "code": "0", - "log": "[{\"msg_index\":\"0\",\"success\":true,\"log\":\"\"}]", - "info": "", - "gas_wanted": "200000", - "gas_used": "106515", - "data": null, - "events": [ - { - "type": "someeventtype1", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "ZGVsZWdhdGU=" - }, - { - "key": "ZGVsZWdhdG9y", - "value": "Y29zbW9zMXFtcmNqenNrZ3Rsd21mczlwcWRyZnBtcDVsNWM4cDVyM3kzZTl0" - }, - { - "key": "ZGVzdGluYXRpb24tdmFsaWRhdG9y", - "value": "Y29zbW9zdmFsb3BlcjFzeHg5bXN6dmUwZ2FlZHo1bGQ3cWRramtmdjh6OTkyYXg2OWswOA==" - } - ] - } - ], - "codespace": "" - } - ], - "begin_block_events": null, - "end_block_events": null, - "validator_updates": [ - { - "pub_key": { - "type": "ed25519", - "data": "lObsqlAjmPsnBfBE+orb8vBbKrH2G5VskSUlAq/YcXc=" - }, - "power": "1233243" - }, - { - "pub_key": { - "type": "ed25519", - "data": "PflSgb+lC1GI22wc6N/54cNzD7KSYQyCWR5LuQxjYVY=" - }, - "power": "1194975" - }, - { - "pub_key": { - "type": "ed25519", - "data": "AmPqEmF5YNmlv2vu8lEcDeQ3hyR+lymnqx2VixdMEzA=" - } - } - ], - "consensus_param_updates": null - } -} diff --git a/rpc/tests/support/block_with_evidences.json b/rpc/tests/support/block_with_evidences.json deleted file mode 100644 index 030424352..000000000 --- a/rpc/tests/support/block_with_evidences.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "block_id": { - "hash": "649A276C615AD3B922A620ADBE5484DE9D87E2154469AE8F90DC40769350A52B", - "part_set_header": { - "total": 1, - "hash": "D2A0D52E67AAD464122612577AD80049D785BC4DB9D0A992FC143C276B2B65DB" - } - }, - "block": { - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "test-chain-y3m1e6-AB", - "height": "22", - "time": "2020-04-28T15:48:20.640286Z", - "last_block_id": { - "hash": "B5F14F439A73EBDF8EF5222C957CFE6E15C95EE825C8B22E423464E675278C47", - "part_set_header": { - "total": 1, - "hash": "C5A0FADCFFF5A69D088DE7BB6836C9C5DB7955B549509E548C296D2C099D2D5D" - } - }, - "last_commit_hash": "6494B45CF9B18F150FE20D77DBFC598592E4B2B559071FA1E7346274A5AA544F", - "data_hash": "", - "validators_hash": "8AE7D181D0574535850924934C0B1B5BBB5E82F29B99B37A4BA6EBC92F0D97C9", - "next_validators_hash": "8AE7D181D0574535850924934C0B1B5BBB5E82F29B99B37A4BA6EBC92F0D97C9", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "48685380CBC6D4C0B31D9A226912FA6D72B4F0C7B3EE84000222D5AE0469AA8E", - "last_results_hash": "", - "evidence_hash": "CBC5FBCE18AE8A6043B9C64F913F708D641E58B811CD1B5BA03D2F6D0054DA0E", - "proposer_address": "9642515585D8F27423CE1BDDB91CD076862AFC63" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": [ - { - "type": "tendermint/DuplicateVoteEvidence", - "value": { - "vote_a": { - "type": 1, - "height": "21", - "round": "0", - "block_id": { - "hash": "86EB9FCF52C4A81F2445157B0BF7AFBB107DF156D0853F38A019200F69465883", - "part_set_header": { - "total": 1, - "hash": "B8F7219F14CB9EAA167A4E56FC8D2D4F3545C93A04357B33C34121C801D7E4F2" - } - }, - "timestamp": "2020-04-28T15:48:20.368551Z", - "validator_address": "0F1F93CC25A6CFC083F54E4DA26F73B7F24DC85B", - "validator_index": "0", - "signature": "JDVzUjWVP9qWZJpKmN14FvmS4mXoLnwW7C1UjFtNQrVTQpL+ONg+IkYKGzVTDQtpOcGDbOLC2dbKvY/OToaWDA==" - }, - "vote_b": { - "type": 1, - "height": "21", - "round": "0", - "block_id": { - "hash": "B5F14F439A73EBDF8EF5222C957CFE6E15C95EE825C8B22E423464E675278C47", - "part_set_header": { - "total": 1, - "hash": "C5A0FADCFFF5A69D088DE7BB6836C9C5DB7955B549509E548C296D2C099D2D5D" - } - }, - "timestamp": "2020-04-28T15:48:20.354851Z", - "validator_address": "0F1F93CC25A6CFC083F54E4DA26F73B7F24DC85B", - "validator_index": "0", - "signature": "gT2fdleX4BUzbAuUDazkbJBJ99HX7YgSTml7rumzWAm4hlOWtBGPe9BmkUF6Ypy8kzgMU/0P0D96KxCts5tpCQ==" - }, - "total_voting_power": 0, - "validator_power": 0, - "timestamp": "2020-04-28T15:48:20.640286Z" - } - } - ] - }, - "last_commit": { - "height": "21", - "round": 0, - "block_id": { - "hash": "B5F14F439A73EBDF8EF5222C957CFE6E15C95EE825C8B22E423464E675278C47", - "part_set_header": { - "total": 1, - "hash": "C5A0FADCFFF5A69D088DE7BB6836C9C5DB7955B549509E548C296D2C099D2D5D" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "0F1F93CC25A6CFC083F54E4DA26F73B7F24DC85B", - "timestamp": "2020-04-28T15:48:20.640286Z", - "signature": "XMPZyI/KX9qTS6R3y4zz2tBwHFyII7VqqRj0D9vrLonIJffOsqU2m6Hk0mkcZmce9YUUi0BPHybfGn+li7goDg==" - }, - { - "block_id_flag": 2, - "validator_address": "9642515585D8F27423CE1BDDB91CD076862AFC63", - "timestamp": "2020-04-28T15:48:20.570401Z", - "signature": "jieW+dsiGgQUTAG7LjdJQqomvrPyQR707HzOhXlUHaZ73xXRQxSpWXNZvWcqP8LwcNF2+ho5yt6NoAmYoCWPCQ==" - } - ] - } - } - } -} diff --git a/rpc/tests/support/blockchain.json b/rpc/tests/support/blockchain.json deleted file mode 100644 index e78c47e88..000000000 --- a/rpc/tests/support/blockchain.json +++ /dev/null @@ -1,389 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "last_height": "488556", - "block_metas": [ - { - "block_id": { - "hash": "0BC81BF032E1251D2BF45FB7FAD70BA1333080FD6DC52FE8A18A09C3859DB99D", - "part_set_header": { - "total": 1, - "hash": "5E97E2B494BF58C02BE385AE80F08A7DDBFAE922ED0363C892D17DB549DAF4AA" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "10", - "time": "2019-03-13T23:08:45.915941777Z", - "num_txs": "1", - "total_txs": "2", - "last_block_id": { - "hash": "B6F22387BD2A7A012BFF88ACE131E871660A8D7CAD756D22B911FA408C9B9FB0", - "part_set_header": { - "total": 1, - "hash": "99043B16957F2BFF5C1A24B290AD44CBCD95B0DC164E18063FA566240B7B3AFC" - } - }, - "last_commit_hash": "483C77DD363242ABB481D474C5DA618D9EB715B3C464D813C844714C9DD16EED", - "data_hash": "37900B11A5BBF82EE275519DAA11BDEFD9A889F51D02A2B975AD506CF42A48A3", - "validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "next_validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "B50AA0AEA259C913680A50FF426F61B02E281E512F6941C7D933F566FB299E52", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "E800740C68C81B30345C3AE2BA638FA56FF67EEF" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "B6F22387BD2A7A012BFF88ACE131E871660A8D7CAD756D22B911FA408C9B9FB0", - "part_set_header": { - "total": 1, - "hash": "99043B16957F2BFF5C1A24B290AD44CBCD95B0DC164E18063FA566240B7B3AFC" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "9", - "time": "2019-03-13T23:08:38.954781954Z", - "num_txs": "0", - "total_txs": "1", - "last_block_id": { - "hash": "C1D3D762700AD5CDDCB724A55CA239B92FC934C4AD163FFDCAC476A42A97320A", - "part_set_header": { - "total": 1, - "hash": "C5FAA5B7738D7010CA712FBC2B2355605D388990DE0FDE731A854FE279325C1A" - } - }, - "last_commit_hash": "AE94F604694CDD4DF798A8B0FE06A14B7C094C3E867E5C7266EFDB9E9F979FF3", - "data_hash": "", - "validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "next_validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "A4DBDDF3CD1C274A1E0D2018F57B8EEA9E5CF6FE45896285B1E4BD9B19892C97", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "C2356622B495725961B5B201A382DD57CD3305EC" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "C1D3D762700AD5CDDCB724A55CA239B92FC934C4AD163FFDCAC476A42A97320A", - "part_set_header": { - "total": 1, - "hash": "C5FAA5B7738D7010CA712FBC2B2355605D388990DE0FDE731A854FE279325C1A" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "8", - "time": "2019-03-13T23:08:31.890373101Z", - "num_txs": "0", - "total_txs": "1", - "last_block_id": { - "hash": "954B81C860ABF508F272C2A402AC81BFBBDA8BA4B2A627A60730FA36915C53AF", - "part_set_header": { - "total": 1, - "hash": "842ADFA93717FDBE551BDAB96BED2E50D67FCA216421C97DE1A47BC61FF50E58" - } - }, - "last_commit_hash": "5CA6FCF16094FCABD00F456E282F1FFB5B12275E32D964EE362C067DAD4492DB", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "87DA6D0C99DEDEE69605561721821C7DF4170D39E45D68BC9BE54F96351563F4", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "F15C16B293EB09F4D95EE863D1CC49A18BAFA06578EC46CC0B8636F2A890C48C", - "last_results_hash": "6E340B9CFFB37A989CA544E6BB780A2C78901D3FB33738768511A30617AFA01D", - "evidence_hash": "", - "proposer_address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "954B81C860ABF508F272C2A402AC81BFBBDA8BA4B2A627A60730FA36915C53AF", - "part_set_header": { - "total": 1, - "hash": "842ADFA93717FDBE551BDAB96BED2E50D67FCA216421C97DE1A47BC61FF50E58" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "7", - "time": "2019-03-13T23:08:19.589587064Z", - "num_txs": "1", - "total_txs": "1", - "last_block_id": { - "hash": "A5873B845F3CD93203D8E1306F756F3BD93E1E3828A2343FD9B898D4DD66BD55", - "part_set_header": { - "total": 1, - "hash": "3E5A9C4ACC1C217DAEBD68E29B99B013603D2902BF974F9695FCA08E1E4E8867" - } - }, - "last_commit_hash": "D164CF0C566EEB93829EF72FE8C1921FA6EB2CFBFC578433F684B95FDEDAEFC9", - "data_hash": "E9734E910DFA6A6B806DC96E76E9D8D260E938E1E4B4B9D215C38422BF22AAB3", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "B48429AC69D3B1878D50F80D51EFD7085E9998B2570DF535A59E62FF1EE8F3DC", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "A5873B845F3CD93203D8E1306F756F3BD93E1E3828A2343FD9B898D4DD66BD55", - "part_set_header": { - "total": 1, - "hash": "3E5A9C4ACC1C217DAEBD68E29B99B013603D2902BF974F9695FCA08E1E4E8867" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "6", - "time": "2019-03-13T23:08:00.786335199Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "5EE242F6FF4EF8D2BD2EBD7428100848438E4D3FD0C9BF01109ACF2338352AD2", - "part_set_header": { - "total": 1, - "hash": "21ED492846DFF04D65E445A56C38AAAE6151F0099B09C9FC9498EF154C46A8AD" - } - }, - "last_commit_hash": "86707BE9A4BDD123101A2695DA73E0A99D11D69CE6196642DCA964DCF2ABA1E2", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "91B4964882D58F32E77EA93478AC8BBDCE905230718440DFFC48661D3B1350E2", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "5EE242F6FF4EF8D2BD2EBD7428100848438E4D3FD0C9BF01109ACF2338352AD2", - "part_set_header": { - "total": 1, - "hash": "21ED492846DFF04D65E445A56C38AAAE6151F0099B09C9FC9498EF154C46A8AD" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "5", - "time": "2019-03-13T23:07:54.139565804Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "C764D3F013CAFBF9CDCCB718DAFDF15C1B23C3D8ADC5EE811C6CC45E0711F04B", - "part_set_header": { - "total": 1, - "hash": "2B51E708767543A566AA1FDBC279E06FB59C3F7658D2389DCAF389A95242E623" - } - }, - "last_commit_hash": "F5D6303B6B99788DA89612C4B6110AF7EE990390201F32A48A94A3F712D17A31", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "380DA3186FE28DCDC765EEA59CE1A3C131709B5A631D70E9DDB9614EAACFA1E9", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "2B19594437F1920B5AF6461FAB81AEC99790FEB1" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "C764D3F013CAFBF9CDCCB718DAFDF15C1B23C3D8ADC5EE811C6CC45E0711F04B", - "part_set_header": { - "total": 1, - "hash": "2B51E708767543A566AA1FDBC279E06FB59C3F7658D2389DCAF389A95242E623" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "4", - "time": "2019-03-13T23:07:47.021138899Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "9E0DF66B93354C474987ED69ADEDD5B2B1DC557A71A391B002E8BEE558C397F1", - "part_set_header": { - "total": 1, - "hash": "529D1FFB543793F8B999AC4E801C8A14CA2DC6E873DC7759945C4B960CAC77DC" - } - }, - "last_commit_hash": "9FEA6AD9DAED8B067D59BB5A03CF81835D6FB719F463C32234028A06BEC40C43", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "C3C0EC26BB6DA5FD0935354B4CB513ED9D0D9829E37C45A6F95A61CE73C40F55", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "2199EAE894CA391FA82F01C2C614BFEB103D056C" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "9E0DF66B93354C474987ED69ADEDD5B2B1DC557A71A391B002E8BEE558C397F1", - "part_set_header": { - "total": 1, - "hash": "529D1FFB543793F8B999AC4E801C8A14CA2DC6E873DC7759945C4B960CAC77DC" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "3", - "time": "2019-03-13T23:07:40.055158729Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "F7888681D07FB5AEAF416D00C22E06CFD9A25DBD65519E97823F979206163CF1", - "part_set_header": { - "total": 1, - "hash": "3D4BB2D494CF343011AF2ADE01D6CC88BE6FE26CE5756840931507554BF64F0B" - } - }, - "last_commit_hash": "6A875DCD138D0A76B63E8BD6FF7FD2A4209755B66B5C841BEE913DC69D17C8AB", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "48731CCFBB44B3DD1BA1798D380FBF52F910B173BEB7C8C583FBC5DB80B55D84", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "064CF05857B556FED63AC32821FF904312D0F2C8" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "F7888681D07FB5AEAF416D00C22E06CFD9A25DBD65519E97823F979206163CF1", - "part_set_header": { - "total": 1, - "hash": "3D4BB2D494CF343011AF2ADE01D6CC88BE6FE26CE5756840931507554BF64F0B" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "2", - "time": "2019-03-13T23:07:33.018721592Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "0D9BB9FA6EB9D64E80CF920EB917B1124F298B12C92BE7FD5328564C6D85D087", - "part_set_header": { - "total": 1, - "hash": "E110DA5AEC7F6D8285F2F8A5CE732D8995E6B35C7B685BA819D3CBD903CB2330" - } - }, - "last_commit_hash": "D6359ED003DA81E68DD39588B40590F796B26A88F3B171B31758773D186233AE", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "95EA0FDE227F235284FCCA4D0B6A281ABC3E15A14B62E4E01E4E03F8135C2AB3", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "02A248C86C78ED6A824D510A8B7AA4C1D290D2DC" - }, - "num_txs": "0" - }, - { - "block_id": { - "hash": "0D9BB9FA6EB9D64E80CF920EB917B1124F298B12C92BE7FD5328564C6D85D087", - "part_set_header": { - "total": 1, - "hash": "E110DA5AEC7F6D8285F2F8A5CE732D8995E6B35C7B685BA819D3CBD903CB2330" - } - }, - "block_size": "573", - "header": { - "version": { - "block": "10", - "app": "0" - }, - "chain_id": "cosmoshub-2", - "height": "1", - "time": "2019-03-13T23:00:00Z", - "num_txs": "0", - "total_txs": "0", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "next_validators_hash": "50006FF803B9ED42EB8A3BAD658917FAD1472AD35C0560F05913F1144F07FEEB", - "consensus_hash": "29C5629148426FB74676BE07F40F2ED79674A67F5833E4C9CCBF759C9372E99C", - "app_hash": "", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "064CF05857B556FED63AC32821FF904312D0F2C8" - }, - "num_txs": "0" - } - ] - } -} diff --git a/rpc/tests/support/broadcast_tx_async.json b/rpc/tests/support/broadcast_tx_async.json deleted file mode 100644 index 8b9ee49bb..000000000 --- a/rpc/tests/support/broadcast_tx_async.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "hash": "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589", - "log": "", - "data": "", - "code": "0" - } -} diff --git a/rpc/tests/support/broadcast_tx_commit.json b/rpc/tests/support/broadcast_tx_commit.json deleted file mode 100644 index 232d6e35c..000000000 --- a/rpc/tests/support/broadcast_tx_commit.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "id": "3fb73994-55c2-44ba-900a-edaa93c24573", - "jsonrpc": "2.0", - "result": { - "check_tx": { - "code": 0, - "codespace": "", - "data": "", - "events": [], - "gas_used": "49776", - "gas_wanted": "150000", - "info": "", - "log": "[]" - }, - "deliver_tx": { - "code": 0, - "codespace": "", - "data": "ChYKFGNvbm5lY3Rpb25fb3Blbl9pbml0", - "events": [ - { - "attributes": [ - { - "index": true, - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMTd4cGZ2YWttMmFtZzk2MnlsczZmODR6M2tlbGw4YzVsc2VycXRh" - }, - { - "index": true, - "key": "c2VuZGVy", - "value": "Y29zbW9zMWxncm1xenFrNDR5ODlydWt1cHRuNG1nZnphM2o4ZGFzMDV6aHMy" - }, - { - "index": true, - "key": "YW1vdW50", - "value": "MTAwMHN0YWtl" - } - ], - "type": "transfer" - }, - { - "attributes": [ - { - "index": true, - "key": "c2VuZGVy", - "value": "Y29zbW9zMWxncm1xenFrNDR5ODlydWt1cHRuNG1nZnphM2o4ZGFzMDV6aHMy" - } - ], - "type": "message" - }, - { - "attributes": [ - { - "index": true, - "key": "YWN0aW9u", - "value": "Y29ubmVjdGlvbl9vcGVuX2luaXQ=" - } - ], - "type": "message" - }, - { - "attributes": [ - { - "index": true, - "key": "Y29ubmVjdGlvbl9pZA==", - "value": "aWJjMHRvMV9jaWQ1NQ==" - }, - { - "index": true, - "key": "Y2xpZW50X2lk", - "value": "aWJjb25lY2xpZW50" - }, - { - "index": true, - "key": "Y291bnRlcnBhcnR5X2NsaWVudF9pZA==", - "value": "aWJjemVyb2NsaWVudA==" - }, - { - "index": true, - "key": "Y291bnRlcnBhcnR5X2Nvbm5lY3Rpb25faWQ=", - "value": "" - } - ], - "type": "connection_open_init" - }, - { - "attributes": [ - { - "index": true, - "key": "bW9kdWxl", - "value": "aWJjX2Nvbm5lY3Rpb24=" - } - ], - "type": "message" - } - ], - "gas_used": "64054", - "gas_wanted": "150000", - "info": "", - "log": "[{\"events\":[{\"type\":\"connection_open_init\",\"attributes\":[{\"key\":\"connection_id\",\"value\":\"ibc0to1_cid55\"},{\"key\":\"client_id\",\"value\":\"ibconeclient\"},{\"key\":\"counterparty_client_id\",\"value\":\"ibczeroclient\"},{\"key\":\"counterparty_connection_id\"}]},{\"type\":\"message\",\"attributes\":[{\"key\":\"action\",\"value\":\"connection_open_init\"},{\"key\":\"module\",\"value\":\"ibc_connection\"}]}]}]" - }, - "hash": "EFA00D85332A8197CF290E4724BAC877EA93DDFE547A561828BAE45A29BF1DAD", - "height": "57649" - } -} \ No newline at end of file diff --git a/rpc/tests/support/broadcast_tx_commit_null_data.json b/rpc/tests/support/broadcast_tx_commit_null_data.json deleted file mode 100644 index 68ea8d138..000000000 --- a/rpc/tests/support/broadcast_tx_commit_null_data.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "height": "26682", - "hash": "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589", - "deliver_tx": { - "log": "", - "data": null, - "code": "0" - }, - "check_tx": { - "log": "", - "data": null, - "code": "0" - } - } -} diff --git a/rpc/tests/support/broadcast_tx_sync.json b/rpc/tests/support/broadcast_tx_sync.json deleted file mode 100644 index 62b2ff429..000000000 --- a/rpc/tests/support/broadcast_tx_sync.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "code": "0", - "data": "AABBCC", - "log": "", - "hash": "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - } -} diff --git a/rpc/tests/support/broadcast_tx_sync_int.json b/rpc/tests/support/broadcast_tx_sync_int.json deleted file mode 100644 index ce69fafb0..000000000 --- a/rpc/tests/support/broadcast_tx_sync_int.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "code": 0, - "data": "aabbcc", - "log": "", - "hash": "88D4266FD4E6338D13B845FCF289579D209C897823B9217DA3E161936F031589" - } -} diff --git a/rpc/tests/support/commit.json b/rpc/tests/support/commit.json deleted file mode 100644 index 659678325..000000000 --- a/rpc/tests/support/commit.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "10", - "time": "2020-10-01T13:39:16.446728262Z", - "last_block_id": { - "hash": "F039C21B34127537B56D653A108ECC847EA0178E65FE69476D2F97F044A69E1C", - "part_set_header": { - "total": 1, - "hash": "D31DCBFF294D3CEFA57EAEF7D411350FD6D700A1E9ED4F79711B5CC83F5BE5BC" - } - }, - "last_commit_hash": "4332A4CA94EA4F73C195640A1913654C086576BB43DDF0FF87B631A09F1F7E52", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139", - "next_validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C" - }, - "commit": { - "height": "10", - "round": 0, - "block_id": { - "hash": "EDEF6D800E431D29A2EEC727408F24540104449246A28A71AE335AED8E892D1E", - "part_set_header": { - "total": 1, - "hash": "1AA0DDA243CCC5FA0DC0C958DE5CBC12C1B91B9472BE2DF7C1D797C4BBA87436" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C", - "timestamp": "2020-10-01T13:39:16.96959972Z", - "signature": "wlPr5XjCfaX5u432QUpjnsTQmJkcNJ37R78QaIQNSv3NyzJMMW0jbeSlF2Bi83CKhrGDhGL7aq/mKaIZMrlfCQ==" - } - ] - } - }, - "canonical": true - } -} diff --git a/rpc/tests/support/commit_1.json b/rpc/tests/support/commit_1.json deleted file mode 100644 index 03971cb74..000000000 --- a/rpc/tests/support/commit_1.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "signed_header": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "1", - "time": "2020-09-30T15:53:38.3317756Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139", - "next_validators_hash": "7CEBEAF9DBAE9E3488A7468BC999E620DAB6395CBF80BC9BAAC1DF71EB816139", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C" - }, - "commit": { - "height": "1", - "round": 0, - "block_id": { - "hash": "14FE58148FBF37743B360D1B92BB8528ADA50E22BA219DA417B16379EEE306D3", - "part_set_header": { - "total": 1, - "hash": "F45A469B007676CC8A65DEB6C194D04A9166F4690F36ECA7C71E730E2F1D916E" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "DC30B689DABDCAAA92FF79FBAE619362AD97293C", - "timestamp": "2020-10-01T13:39:12.243358745Z", - "signature": "/PI3gfFri14erU4//7C16XXGZZVzldjVx14cBM+b2hRenLTBsn2dNGz33t+MFWEOBe/vGvURkApciVrID3ihAA==" - } - ] - } - }, - "canonical": true - } -} diff --git a/rpc/tests/support/consensus_state.json b/rpc/tests/support/consensus_state.json deleted file mode 100644 index 762174aaa..000000000 --- a/rpc/tests/support/consensus_state.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 0, - "result": { - "round_state": { - "height/round/step": "1262197/0/8", - "start_time": "2019-08-01T11:52:38.962730289Z", - "proposal_block_hash": "634ADAF1F402663BEC2ABC340ECE8B4B45AA906FA603272ACC5F5EED3097E009", - "locked_block_hash": "634ADAF1F402663BEC2ABC340ECE8B4B45AA906FA603272ACC5F5EED3097E009", - "valid_block_hash": "634ADAF1F402663BEC2ABC340ECE8B4B45AA906FA603272ACC5F5EED3097E009", - "height_vote_set": [ - { - "round": 0, - "prevotes": [ - "Vote{0:000001E443FD 1262197/00/1(Prevote) 634ADAF1F402 7BB974E1BA40 @ 2019-08-01T11:52:35.513572509Z}", - "nil-Vote" - ], - "prevotes_bit_array": "BA{100:xxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} 169753436/170151262 = 1.00", - "precommits": [ - "Vote{5:18C78D135C9D 1262197/00/2(Precommit) 634ADAF1F402 8B5EFFFEABCD @ 2019-08-01T11:52:36.25600005Z}", - "nil-Vote" - ], - "precommits_bit_array": "BA{100:xxxxxx_xxxxx_xxxx_x_xxx_xx_xx_xx__x_x_x__xxxxxxxxxxxxxx_xxxx_xx_xxxxxx_xxxxxxxx_xxxx_xxx_x_xxxx__xxx} 118726247/170151262 = 0.70" - } - ], - "proposer": { - "address": "D540AB022088612AC74B287D076DBFBC4A377A2E", - "index": 0 - } - } - } -} diff --git a/rpc/tests/support/error.json b/rpc/tests/support/error.json deleted file mode 100644 index 5cf520190..000000000 --- a/rpc/tests/support/error.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "error": { - "code": -32603, - "message": "Internal error", - "data": "min height 321 can't be greater than max height 123" - } -} diff --git a/rpc/tests/support/event_new_block_1.json b/rpc/tests/support/event_new_block_1.json deleted file mode 100644 index cf227f5ee..000000000 --- a/rpc/tests/support/event_new_block_1.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "06c893ae-2c80-4a42-8332-8380bf24fcde", - "result": { - "query": "tm.event = 'NewBlock'", - "data": { - "type": "tendermint/event/NewBlock", - "value": { - "block": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "1608", - "time": "2020-09-14T16:33:54.21191421Z", - "last_block_id": { - "hash": "D3B2CC7EDAFF87433A5DBCDCDF4077A56AACDE3606034262B0CDB120F62EB40B", - "part_set_header": { - "total": 1, - "hash": "3AB411EAFE9A3B7AC013B0214990E5653112A39909289E3EA9211F07B8CD6EED" - } - }, - "last_commit_hash": "47071B86EFC28BEC17543967975F35191BA9BEC9C2AD77E86F63B149528D71A1", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "next_validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3" - }, - "data": { - "txs": [] - }, - "evidence": { - "evidence": [] - }, - "last_commit": { - "height": "1607", - "round": 0, - "block_id": { - "hash": "D3B2CC7EDAFF87433A5DBCDCDF4077A56AACDE3606034262B0CDB120F62EB40B", - "part_set_header": { - "total": 1, - "hash": "3AB411EAFE9A3B7AC013B0214990E5653112A39909289E3EA9211F07B8CD6EED" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3", - "timestamp": "2020-09-14T16:33:54.21191421Z", - "signature": "orOooZN8Rjtf6Uwh6ZTRGLjAActgmgZtFXgBSSpKgPLz9EYhLpS4e8IwydrEY+6YeTVk48wiOjdWleYMYvmGCQ==" - } - ] - } - }, - "result_begin_block": {}, - "result_end_block": { - "validator_updates": null - } - } - }, - "events": { - "tm.event": [ - "NewBlock" - ] - } - } -} diff --git a/rpc/tests/support/event_new_block_2.json b/rpc/tests/support/event_new_block_2.json deleted file mode 100644 index 4eb94ded2..000000000 --- a/rpc/tests/support/event_new_block_2.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "06c893ae-2c80-4a42-8332-8380bf24fcde", - "result": { - "query": "tm.event = 'NewBlock'", - "data": { - "type": "tendermint/event/NewBlock", - "value": { - "block": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "1609", - "time": "2020-09-14T16:33:55.21191421Z", - "last_block_id": { - "hash": "F30A71F2409FB15AACAEDB6CC122DFA2525BEE9CAE521721B06BFDCA291B8D56", - "part_set_header": { - "total": 1, - "hash": "A514FF7C92EBDF19F8D9B953E4B4BAC8627A50350048BD885D22747CE7F5A01C" - } - }, - "last_commit_hash": "64581C6215ED498D77AB71A57DC3483528F914D95547513B93B4DF079243C11C", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "next_validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3" - }, - "data": { - "txs": [] - }, - "evidence": { - "evidence": [] - }, - "last_commit": { - "height": "1608", - "round": 0, - "block_id": { - "hash": "F30A71F2409FB15AACAEDB6CC122DFA2525BEE9CAE521721B06BFDCA291B8D56", - "part_set_header": { - "total": 1, - "hash": "A514FF7C92EBDF19F8D9B953E4B4BAC8627A50350048BD885D22747CE7F5A01C" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3", - "timestamp": "2020-09-14T16:33:55.21191421Z", - "signature": "WVwzp+WsEISBKqPag0xxos6RIpQ+XwCnKFbFVmRnK0opQwGwoVhSfV/56fGu6B2noWBw8rzzvJ/FeBklm1VeCg==" - } - ] - } - }, - "result_begin_block": {}, - "result_end_block": { - "validator_updates": null - } - } - }, - "events": { - "tm.event": [ - "NewBlock" - ] - } - } -} diff --git a/rpc/tests/support/event_new_block_3.json b/rpc/tests/support/event_new_block_3.json deleted file mode 100644 index 236449ee4..000000000 --- a/rpc/tests/support/event_new_block_3.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "06c893ae-2c80-4a42-8332-8380bf24fcde", - "result": { - "query": "tm.event = 'NewBlock'", - "data": { - "type": "tendermint/event/NewBlock", - "value": { - "block": { - "header": { - "version": { - "block": "11", - "app": "1" - }, - "chain_id": "dockerchain", - "height": "1610", - "time": "2020-09-14T16:33:56.21191421Z", - "last_block_id": { - "hash": "192C18392B93AE4C03F477C96D8B84C5390BB86E3E88662B336C9DE070ADF02F", - "part_set_header": { - "total": 1, - "hash": "ACD43137746F0AFF53A6EBCA7C8D03B80F9F96D5542E3679F65855A66FA76E2B" - } - }, - "last_commit_hash": "15119388771E0DFE6CD0B9C899A4EA41F669DF15664D04B020878A2D71D28BCC", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "next_validators_hash": "5E20520EC80B84044B64BA0C55B1C06D543BBD57955C27B8A9999EC526BF703C", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "0000000000000000", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3" - }, - "data": { - "txs": [] - }, - "evidence": { - "evidence": [] - }, - "last_commit": { - "height": "1609", - "round": 0, - "block_id": { - "hash": "192C18392B93AE4C03F477C96D8B84C5390BB86E3E88662B336C9DE070ADF02F", - "part_set_header": { - "total": 1, - "hash": "ACD43137746F0AFF53A6EBCA7C8D03B80F9F96D5542E3679F65855A66FA76E2B" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "C8657A30D20C3BAD414624A1A963373DD500CCD3", - "timestamp": "2020-09-14T16:33:56.21191421Z", - "signature": "5KBnWciO6dw29HrCikF6Fri/pLIoEXQSKiYXsMRFbSLwIV192hPeNYEOhjOk60sNBP2hTlHBOC482bRWTuFADg==" - } - ] - } - }, - "result_begin_block": {}, - "result_end_block": { - "validator_updates": null - } - } - }, - "events": { - "tm.event": [ - "NewBlock" - ] - } - } -} diff --git a/rpc/tests/support/first_block.json b/rpc/tests/support/first_block.json deleted file mode 100644 index e450dbe25..000000000 --- a/rpc/tests/support/first_block.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "block_id": { - "hash": "D00C415348A1FCA98A9F6E811804E69DE2C5865A2F057C275552C8F57B427052", - "part_set_header": { - "total": 1, - "hash": "5C67DA0F82C5D66C862808EFA9FEFA2FEF08F32DB5FE87EFF7B2C5A56F83AA07" - } - }, - "block": { - "header": { - "version": { - "block": "10", - "app": "1" - }, - "chain_id": "cosmoshub-2", - "height": "1", - "time": "2020-03-15T16:56:30.934369Z", - "last_block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "", - "data_hash": "", - "validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "next_validators_hash": "3C0A744897A1E0DBF1DEDE1AF339D65EDDCF10E6338504368B20C508D6D578DC", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "", - "last_results_hash": "", - "evidence_hash": "", - "proposer_address": "12CC3970B3AE9F19A4B1D98BE1799F2CB923E0A3" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": null - }, - "last_commit": { - "height": "0", - "round": 0, - "block_id": { - "hash": "", - "part_set_header": { - "total": 0, - "hash": "" - } - }, - "signatures": null - } - } - } -} \ No newline at end of file diff --git a/rpc/tests/support/genesis.json b/rpc/tests/support/genesis.json deleted file mode 100644 index 45b7b9619..000000000 --- a/rpc/tests/support/genesis.json +++ /dev/null @@ -1,19185 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "genesis": { - "genesis_time": "2019-03-13T23:00:00Z", - "chain_id": "cosmoshub-2", - "initial_height": "0", - "consensus_params": { - "block": { - "max_bytes": "200000", - "max_gas": "2000000", - "time_iota_ms": "1000" - }, - "evidence": { - "max_age_num_blocks": "100000", - "max_age_duration": "172800000000000", - "max_num": 0 - }, - "validator": { - "pub_key_types": [ - "ed25519" - ] - }, - "version": "1" - }, - "validators": [ - { - "address": "B00A6323737F321EB0B8D59C6FD497A14B60938A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "cOQZvh/h9ZioSeUMZB/1Vy1Xo5x2sjrVjlE/qHnYifM=" - }, - "power": "9328525", - "name": "Certus One" - } - ], - "app_hash": "", - "app_state": { - "accounts": [ - { - "address": "cosmos1000ya26q2cmh399q4c5aaacd9lmmdqp92z6l7q", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos100dejzacpanrldpjjwksjm62shqhyss44jf5xz", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos102ruvpv2srmunfffxavttxnhezln6fnc3pf7tt", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos103vxut865hpn6x0wjly9ds6dmdtgkhp9gjsj88", - "coins": [ - { - "denom": "uatom", - "amount": "10402000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1049ye8lese3s2a6rr2quh3des6pynmqp99zwqa", - "coins": [ - { - "denom": "uatom", - "amount": "2723000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos104fnttxcgxtrfvvqcqgwydgrf9wn0m9w3u3ekj", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1065smngmfh2fftdcj8xz7quh54ks4pfhmw93sh", - "coins": [ - { - "denom": "uatom", - "amount": "26306000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "26306000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos108jad2hgswv2vneynsjvasvpqckme27dgqhvxt", - "coins": [ - { - "denom": "uatom", - "amount": "15378000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos108r3ynz6rak56nznqf6ls37kxxjgnns2h6ymx9", - "coins": [ - { - "denom": "uatom", - "amount": "2711000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos109myyszkdktaq0qdfwnm208qy6pm245s0vfvnn", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos109v835fljyapuwryhqxy89gflhp2vjx56yhwrv", - "coins": [ - { - "denom": "uatom", - "amount": "221627000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10a7evyydck42nhta93tnmv7yu4haqzt94xyu54", - "coins": [ - { - "denom": "uatom", - "amount": "930790690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10e4vsut6suau8tk9m6dnrm0slgd6npe3hjqndl", - "coins": [ - { - "denom": "uatom", - "amount": "10000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10l3rfs5eya90utgm6g3lrtf6pzff3muc7l8y3n", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10mp0mt5ek4k8z7tqkfh7cmu29hc2jxmuzmwrre", - "coins": [ - { - "denom": "uatom", - "amount": "2051632000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10nsjrvfqdvqhra9uzyuaaclc5uqqlyauklzxgp", - "coins": [ - { - "denom": "uatom", - "amount": "9225600000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10ugq8d7yw0f0gcsd25c9wcryqpkxdcgz22t6uh", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10usg8tf3hhtarjmzs4ughrgkknhe58cylce7pf", - "coins": [ - { - "denom": "uatom", - "amount": "20353000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10wd6rhh4fh6a2axq4he54ll73rl8627n0rc30p", - "coins": [ - { - "denom": "uatom", - "amount": "13952690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10whs4lsz6yjc90nzs6t4re5jv6lj59qr6zuxf8", - "coins": [ - { - "denom": "uatom", - "amount": "355507000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10ygh5qkn8ra69nxrm5403rxeaz6dwd58xhqw3l", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos10yp5yw0rz2j7khfgmgwzs4fe4tsg72nge4f0ml", - "coins": [ - { - "denom": "uatom", - "amount": "10825785580000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos120nzke36a2s44w0f0dhndknndhu5ytyx9rz6yk", - "coins": [ - { - "denom": "uatom", - "amount": "7499000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "7499000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1249al7mnuq4g3k52n855xcx8nj57vzv0q2uvg9", - "coins": [ - { - "denom": "uatom", - "amount": "7689000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos124l86n9n9pg6p2rhpu857c8awmxmzcen39j7hd", - "coins": [ - { - "denom": "uatom", - "amount": "180000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos125pyl8p6ctvp842ce90gvlegwp53flcmeyefca", - "coins": [ - { - "denom": "uatom", - "amount": "34886380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos126luz90z8mundzfflcftm83k8arrzs6rdvkrz2", - "coins": [ - { - "denom": "uatom", - "amount": "494478190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12d7jwuwt08wwwuatzufnyet0zhzgap8qdjw0sk", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12dtspk5796vy7fqcjcwsnzxtlzredwehuh9cqg", - "coins": [ - { - "denom": "uatom", - "amount": "1279840690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12e0xvvw3e6ewng9qdx74vha08yshvmwcs4vg4g", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12e35ffmrt4eme0qqre5ump4njfg4mkkuafc4ch", - "coins": [ - { - "denom": "uatom", - "amount": "49552250000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12eedqrmxxsx4s26yzeqs36se5dwwg2tc75vm35", - "coins": [ - { - "denom": "uatom", - "amount": "15830000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12em6sewqxw25l9c02a6x88k7hezj6hv6qh0hup", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12fl8s9u3ftxpfxuapyg9x6wqdngqssqdh3r6kc", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12fpuvxnn5mxx30sxxhqefue2d6rxer7zx4d987", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12g8djmnre0l52mujgk2ref7ecugfltfwwwf4yk", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12hckndrdpwrnsuffvce7d6ssratle74pt6t6h2", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12kdrflk5ddskc8j666a2exst6zez6ctrctzusf", - "coins": [ - { - "denom": "uatom", - "amount": "3166000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12ku50gw846ekxxhn9n7qrktq3gahp2zzkrzgf9", - "coins": [ - { - "denom": "uatom", - "amount": "303000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12mnpnxjsy480ujxamclj8rvg87veg6m89e69pm", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12ntkpe8tehyh6ty7m6x79phnmx697xzmtchn35", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12pghteu99x784msy3ps5hltrxegaur5mndxkg3", - "coins": [ - { - "denom": "uatom", - "amount": "2584980000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12pr483dv5qd33x2yhv9lxkgje0njnkpgj0a9je", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12qvd909wn082yzhmyn42h8uwatqts4qcgxsvwu", - "coins": [ - { - "denom": "uatom", - "amount": "25525780000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12sn63d5jtfsv9evu2arag6h34ajavk7960fr5v", - "coins": [ - { - "denom": "uatom", - "amount": "100410000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12t7f7sh0ndyzhdkhxe06kr7kxfa5zx7c09lzp6", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos12usue8q9w5mmvuteh0k40h0zzutlm9k0s2fddc", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos12xkncrkjwywe4vwq67g4n36k5mycrp7a9gg5sz", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos130mdu9a0etmeuw52qfxk73pn0ga6gawkryh2z6", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos132juzk0gdmwuxvx4phug7m3ymyatxlh9m9paea", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos132nxt46shylwr23e7cdewa86htsyfmlvxhq6y9", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos132wwxvsye3amhnvs3f630e3uuyxpz6d22adfsy", - "coins": [ - { - "denom": "uatom", - "amount": "1154930000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1343vv986xal749dk2je566rkntwt3x7lrx9vla", - "coins": [ - { - "denom": "uatom", - "amount": "29685210000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13653whhw8c99dmap4h92reshhfs58e3970rfe5", - "coins": [ - { - "denom": "uatom", - "amount": "18092000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos136r8930vl5jdr42fehkclc68amkt7f5quvwjzp", - "coins": [ - { - "denom": "uatom", - "amount": "1385000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos138a2ulzndl7gezsd6symywvdpzes4awj9eypkr", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1399zgcq58j20jth3r0hnjq2lswem60jmjs7u36", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos139vgquqa2dvxxzpdtv5a8mcclhznc9hmprkhcj", - "coins": [ - { - "denom": "uatom", - "amount": "20156190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13a8q24rpwyjvsthw6x2gk74s0xma7tedeuhknx", - "coins": [ - { - "denom": "uatom", - "amount": "11753680000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13avdh7zs9uxwuyvp543n7p3zdkavz74fre0vt7", - "coins": [ - { - "denom": "uatom", - "amount": "14844000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13c25u0p4nwntkk2l7mry70ler4tzascvsrjv52", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13fxkvaqmgatzmmxne5czk6y8tws3dxgcuvjpeq", - "coins": [ - { - "denom": "uatom", - "amount": "104705690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13fz2d2cduwl8jepmp5cnyzk5298k90m3ahkqpe", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13gvqalusnmapjgp3e6gnk9q832qv3g3u6jytaz", - "coins": [ - { - "denom": "uatom", - "amount": "24876000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13h2s49rmyykemegd3gh0ml2sjunrcdxfkuv2rw", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13hfzclxsgzywxfyh5tvhxff3mnnr6jsky39sjs", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13jvkw96h2269pv7dgarjp2y6ev5k62l69eqlml", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13jwgjxl9nfvpcy5gv6nec9z9w6mwv6l0s4u8xy", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13jysux652pcwychuquzqn374l4uh4mpetvrlrg", - "coins": [ - { - "denom": "uatom", - "amount": "54140000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13lfwqjqfzfe2muq3j273y2l2tuzgkrp86s8zew", - "coins": [ - { - "denom": "uatom", - "amount": "46413180000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13ljx4j80w0p0d6527eylh67ngdthkwak8s7q06", - "coins": [ - { - "denom": "uatom", - "amount": "779536970000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13lte99fy0lqxu9pzsytafhlym0ncznsmncqkpa", - "coins": [ - { - "denom": "uatom", - "amount": "33922000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13m4eevru9jc8afdzh2kpgf4g9agl6h0d4p56qw", - "coins": [ - { - "denom": "uatom", - "amount": "2969690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13m92q3fyyuw57nv65deet8sw9xu7rekmv4h9y8", - "coins": [ - { - "denom": "uatom", - "amount": "5294270000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13meq2luhcz9dlxn6z6tsgwd5ha537xj8aetqhm", - "coins": [ - { - "denom": "uatom", - "amount": "2332950270000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13mp6etxn35ktemydsd82y2j7jy8r4jnmphczg0", - "coins": [ - { - "denom": "uatom", - "amount": "149222700000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13njcc8ah92x9wmfz0mvufz9qxz09sqpg2l5m8c", - "coins": [ - { - "denom": "uatom", - "amount": "63322000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13nr7ma9t97e5c2klyv0ku68ncmqj6farj2keru", - "coins": [ - { - "denom": "uatom", - "amount": "30711000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13pg04h95h968hmahq9dclwaf6ejt0nl9kkgywn", - "coins": [ - { - "denom": "uatom", - "amount": "135000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13qdh6c34um99ay72lujy56cf0n0auvwky7q3p8", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13rdh0y4fz47qhvy9crlax82403dk8e76mypj89", - "coins": [ - { - "denom": "uatom", - "amount": "5807030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13rqwctds7e5cgleey2vzz454t9l02nklrwvs9l", - "coins": [ - { - "denom": "uatom", - "amount": "67845000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13s3ju03wz7p6rxup20ptne0u9wshm3r2mmf5rs", - "coins": [ - { - "denom": "uatom", - "amount": "2972730000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13uus00dk300jg7n02rdh9dxzfkgfyj90vpn049", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13vr90q8r76gxzlyq0zr234qef4cslwasmv9gdl", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13vv6uxe5mx8wyva7s0qh820a57uxwkjr5zcm6j", - "coins": [ - { - "denom": "uatom", - "amount": "2939000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13vwzpmmada8aangxtjyfschf04fh7mfjz5kt3a", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13w57ennhf6mq76238ycstwvxqvtkk4m65rz092", - "coins": [ - { - "denom": "uatom", - "amount": "22412050000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13wddek9f98equjehldud0k87q2fhjw2ar626f4", - "coins": [ - { - "denom": "uatom", - "amount": "904600000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13xjrerteau5qrtr8a53zd0aj969xzw5qp5th0h", - "coins": [ - { - "denom": "uatom", - "amount": "60476060000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos13xvmkjdq3vd2zfk78ft607tjex8qjxhcjlyrz3", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos144tjhlagc0mks85ljzffv5986zw0ls8f3ly2wu", - "coins": [ - { - "denom": "uatom", - "amount": "350531000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14605ap767058cydlu9dywdwe7vz85wskp83q56", - "coins": [ - { - "denom": "uatom", - "amount": "39830000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos146l37udxpsph626spp5cdz4fnnttyyqgvpvhek", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos147n9qc39ms7detmqkdju5wjj97vp5uf62vmqxz", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos147ufwtj67wm8a0nmkjsutxaepp3vs2d680nxn6", - "coins": [ - { - "denom": "uatom", - "amount": "34868930000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos149g2tl9xakprzs5f854ntu5fthdgmuqd9ad0gn", - "coins": [ - { - "denom": "uatom", - "amount": "18605530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14az9dmutwtz4vuycvae8csm4wwwtm0au7lt5d2", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14d6d0m49c4hvvqc7mc9ktxvkyfll3ztk5pghfh", - "coins": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos14dmelcmvwq8sefu5tr4atv98u6ur9c20auhmzf", - "coins": [ - { - "denom": "uatom", - "amount": "17391000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14dycjypj98nvmx9w8ps8tdc9fgfkktfxp7g8v2", - "coins": [ - { - "denom": "uatom", - "amount": "4975000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14eucqq0vc07kfazl93lm562350vwt3pdu2mp9n", - "coins": [ - { - "denom": "uatom", - "amount": "22162000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14fqtpynvp6vcn4hwu5k6fw3rtxzp5yd55w29gr", - "coins": [ - { - "denom": "uatom", - "amount": "13116000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14hncmchnakqwgsfla866kztd2qmd6puarp3r5y", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14jg5e6ahcdsfr0hr9ql6gyut023zwwmh5ykhv8", - "coins": [ - { - "denom": "uatom", - "amount": "20433000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14kl66vhskfats6le7ucjsruec7a3xyj45t3629", - "coins": [ - { - "denom": "uatom", - "amount": "32113000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14kn0kk33szpwus9nh8n87fjel8djx0y0mmswhp", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14l0fp639yudfl46zauvv8rkzjgd4u0zk0fyvgr", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14lultfckehtszvzw4ehu0apvsr77afvyhgqhwh", - "coins": [ - { - "denom": "uatom", - "amount": "10000000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14n5qjt9lv58ug47swld8k2w3k36mxq8f9s8fkq", - "coins": [ - { - "denom": "uatom", - "amount": "70192000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14p5wpgcj4cmcva433dqw6thmdmk5ssjqtj0a4l", - "coins": [ - { - "denom": "uatom", - "amount": "9298690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14qyqets0c94u9hjmvrm4n8s2v5pgnk9kjh93ay", - "coins": [ - { - "denom": "uatom", - "amount": "139610690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14r9svgnadnm3ugnhpyz6369xpg98ug5sedplf7", - "coins": [ - { - "denom": "uatom", - "amount": "8495810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14sur0djjxka7n6vhkglyz0xh92lvdhumf589jv", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14tcxx9z6gtdslajzz5qjlxu3vl3v23djyl6tgh", - "coins": [ - { - "denom": "uatom", - "amount": "1163475340000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14tlwg7f4zjkfs7jg4dqzp0y7gsuxgzklzvldem", - "coins": [ - { - "denom": "uatom", - "amount": "465390690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14w6c55cm0lc5sthhmghuw59c62lf2y7s6zf0dy", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14xgdfdnpjtulj6p7rkc75ekxqjq8hc5c7x6hpd", - "coins": [ - { - "denom": "uatom", - "amount": "36184000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos14yu02qh35pqln6j0tdlzw43c275nhpvtjkhlnr", - "coins": [ - { - "denom": "uatom", - "amount": "2817000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1542lar7ctncwk4582emyryyx8jxkt4etmt8h3q", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15498qsjzr8qnn7fdcnp3l2el96awtteh5d09xf", - "coins": [ - { - "denom": "uatom", - "amount": "93070690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos155c0rxqvazlqz29q3kdp2c03h59np3zfrh4ns0", - "coins": [ - { - "denom": "uatom", - "amount": "12031000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15640fe3gjatury4ukzkpjl9uq22jers2rha3tv", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos157zu0weeafysgq5akhnn3w2p0723avlgnm2emf", - "coins": [ - { - "denom": "uatom", - "amount": "4975000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1589h7tesukedazlr2k2767rsrn8qgz40z0fca6", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15a5tj5frnnmme58up7ll537cy9fhnszs3wse0e", - "coins": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos15a84pmu5qa9pps40g7vyzqar0p77mg0e7k05t4", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15apyer7fpajkma6wsjue5k4nf5hfscma3qsvaq", - "coins": [ - { - "denom": "uatom", - "amount": "209420690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15edu5vwav305gd5xufgzt7p7canedwr3j5y88c", - "coins": [ - { - "denom": "uatom", - "amount": "5698000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15f6nvuqsun8ky9tz57dhphleta68hu3pym88qz", - "coins": [ - { - "denom": "uatom", - "amount": "1990000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15fg2xq8c7zt48kv35fq0pzf0ve8j7mhya3249z", - "coins": [ - { - "denom": "uatom", - "amount": "174515690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15hsjyah8c64l8fdywk5hhnu7hjwttu2kumuwpp", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15jk238qpc8se629rqng24g2uszchw4zkn426qw", - "coins": [ - { - "denom": "uatom", - "amount": "1156000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15lrq7w0fh8w4slej7e5qch2ksk7qtkesvn2u78", - "coins": [ - { - "denom": "uatom", - "amount": "1356000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15mt02vt236qxzxaju6artpzxd7kqx6qaemdt8r", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15mw9e2hwnh0um26595fdxtpfh8x7tqgjlpej46", - "coins": [ - { - "denom": "uatom", - "amount": "113000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15mwh7k9u5u6047f6lytkx8z9tfvshqk9wqw9f8", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15njsc4lap2h94xum2xatf9xmex4088u9jcmpv9", - "coins": [ - { - "denom": "uatom", - "amount": "5027000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15nz5gqx6f9nu3tf3dc8hyzwrrqkyxkznlfwdc7", - "coins": [ - { - "denom": "uatom", - "amount": "208058000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15p7e92cd3qeqvgfhw9cd7424rn4et6g5p9cv0c", - "coins": [ - { - "denom": "uatom", - "amount": "18499000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15q85hu222eest9d7mysq2jd7yffm5cywsm54gy", - "coins": [ - { - "denom": "uatom", - "amount": "6056000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15r4tc0m6hc7z8drq3dzlrtcs6rq2q9l2kc6z4s", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15t5u0vk50ujxqe3d4wqwyzn6umsdk3yewqhqrq", - "coins": [ - { - "denom": "uatom", - "amount": "40713190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15ta770k4kca7plh8gtyc94gekr8h3gmzjusdyx", - "coins": [ - { - "denom": "uatom", - "amount": "113029000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15u5luvsrzry8njes6l5kd98kmz9mnd7d22guk6", - "coins": [ - { - "denom": "uatom", - "amount": "142309000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15ukrvfdpmnl8dhvnfjudp7dezw3hmzdl2n8hh3", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15urq2dtp9qce4fyc85m6upwm9xul3049um7trd", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15vanqrcgxen0eunnfrkha0ewsyslhj7ktdj7u7", - "coins": [ - { - "denom": "uatom", - "amount": "293976000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15waw4v3fdgyhxhfv7h5fp0u3s0x3emcj2c44a7", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15wpkctst9nhk7q49622dn0vl9ym2qyxsjkntt0", - "coins": [ - { - "denom": "uatom", - "amount": "10037000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15yyv20r0hkxscpl6tw6jlgjh3589mpmtcz5zpj", - "coins": [ - { - "denom": "uatom", - "amount": "87253190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos15z6pz2tyzfupsup5xja3dc2sspf6tfvstkhdy9", - "coins": [ - { - "denom": "uatom", - "amount": "164659000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos160eegxaskfk5cyvl5rny65f0q3jxevje9czad3", - "coins": [ - { - "denom": "uatom", - "amount": "41566000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1634uur2zeh0q9kce8j7kyq486hm2wvdt5cee4t", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1648ynlpdw7fqa2axt0w2yp3fk542junlmhyevf", - "coins": [ - { - "denom": "uatom", - "amount": "1756875690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos164z7wwzv84h4hwn6rvjjkns6j4ht43jv9e3ljy", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos167w96tdvmazakdwkw2u57227eduula2cy572lf", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos168la4terfg7598ajhyet2dcjhe6v9m4d5wqlpv", - "coins": [ - { - "denom": "uatom", - "amount": "223390000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos169pk2vtg08k8dsvqmt52mem6u84ljsrd8k8mjp", - "coins": [ - { - "denom": "uatom", - "amount": "6811000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16d8d6ecv09p0vcz929njadk6ct9pwwmwu25gp6", - "coins": [ - { - "denom": "uatom", - "amount": "75618190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16gdxm24ht2mxtpz9cma6tr6a6d47x63hlq4pxt", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16gs3yutfffcskc48dux7262t66y8ylc95sr282", - "coins": [ - { - "denom": "uatom", - "amount": "1428210000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16heu2ax3ssxyhyjmy43earlc4n64w9awyvk3y3", - "coins": [ - { - "denom": "uatom", - "amount": "51184690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16kwean73rups2kl9t7dnmfwukvww52peduale7", - "coins": [ - { - "denom": "uatom", - "amount": "2896362500000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16m93gjfqvnjajzrfyszml8qm92a0w67ntjhd3d", - "coins": [ - { - "denom": "uatom", - "amount": "13624911290000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16na5gpcj80tafv5gycm4gk7garj8jjsgydtkmj", - "coins": [ - { - "denom": "uatom", - "amount": "466666670000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16pcypfvnhwquutclt0y284khtyfvlynr2nuv43", - "coins": [ - { - "denom": "uatom", - "amount": "104705690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16qafqaz50cphh4jluvv30apz3fjdd4hqurh6z7", - "coins": [ - { - "denom": "uatom", - "amount": "4296000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16qj60akpj9dvzfnm4c23qxfa69fkfler09qa6n", - "coins": [ - { - "denom": "uatom", - "amount": "407000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16r39ghhwqjcwxa8q3yswlz8jhzldygy6jhvt3c", - "coins": [ - { - "denom": "uatom", - "amount": "791534000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16r59uz69f3006gqwgzzem7n78mvfv4m80v582e", - "coins": [ - { - "denom": "uatom", - "amount": "8500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "8500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos16re42uxxlrw6ptgv3gpccv9ww0yvlhuluh638g", - "coins": [ - { - "denom": "uatom", - "amount": "2893620000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16sfwt5t6gk8j5rsx6anx9qvjxxarr68znwrfp6", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16sknqh6mfamcymz5pjc4pe9xg0zrl8pr5a0d92", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16t6u2fkfql9440gerty037e0d75h69jfzdk8jg", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16uwqfvgt29fxv3jv3gz09kra8rv2tqey7ysm2w", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16w9ugjqnju79vm33s8gte4lzc972fuswq2qqmk", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16xj9d3jsdp89qnkmgav4t5dhxr4mnpgzll4n05", - "coins": [ - { - "denom": "uatom", - "amount": "210584190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16xt45qxt5mm2z9dep4yrx4dxe7lelfuyxevjty", - "coins": [ - { - "denom": "uatom", - "amount": "54276000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16y860wllmfr8t45uj9zfegzfgwsyumu5mwnr8q", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos16yavjgx79knn5czkh0xv304p4q9lc0pjzv6cud", - "coins": [ - { - "denom": "uatom", - "amount": "474820000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos173v5nqwvttldamaawmtcn2qnr5f7d2pfpaqejr", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos174ca596awzt8u8w3kn2gr247kex8dmuph0yuc9", - "coins": [ - { - "denom": "uatom", - "amount": "814440690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos175n3650g909aag3xhmjqfdj3j8jp5da39td5xf", - "coins": [ - { - "denom": "uatom", - "amount": "113074000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos176m2p8l3fps3dal7h8gf9jvrv98tu3rqfdht86", - "coins": [ - { - "denom": "uatom", - "amount": "21842188810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "21842188810000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "1557788400", - "end_time": "1615676400" - }, - { - "address": "cosmos176w785udmwnq9swpgtmzl3vgldr5g8cqlycj2m", - "coins": [ - { - "denom": "uatom", - "amount": "3481190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos177yhnrfg63um7fmwv2x2kzlf3jw3rjlpus5zgv", - "coins": [ - { - "denom": "uatom", - "amount": "9950000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos178657tufcc8smgh5wd78k7j6w3amnazgvqxj53", - "coins": [ - { - "denom": "uatom", - "amount": "113000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17ajqzn97x4vjgwtcgh8ny3nk5tmzsm0zh2e56k", - "coins": [ - { - "denom": "uatom", - "amount": "53511690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17axtdgu8pc30s5j82v5f7t3sldnyfg4vp9lxm0", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17cdej4cyqcrx7d67c8y4y4sa0jp5lqhnnat6qt", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17dhmf3p7lrn7tccg65ljkk6396e80ww3epgj00", - "coins": [ - { - "denom": "uatom", - "amount": "24424000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17e9zmwe3gj2lmedhxeh473laaylknazaqzjgy7", - "coins": [ - { - "denom": "uatom", - "amount": "85032000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17etxqeq0s8eupvtppfspmk3rhfp7m9fhqe4p48", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17f2s4enn4kmhl3cc5wkys7xjg09uun6l8ss2wp", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17hcr54xe42f4qw9pllj20lzu2e0v7940rx0prj", - "coins": [ - { - "denom": "uatom", - "amount": "29078190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17hnhqra0xmferdjqz0ypkgj76t4fmx78u7x2hc", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17knx6xzq7l3sanrxymvpyep3nzumvmn6e4flec", - "coins": [ - { - "denom": "uatom", - "amount": "6500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "6500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos17mggn4znyeyg25wd7498qxl7r2jhgue8ep585n", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17n2de80m3mtz7yheygggqw2wnta5665t00u884", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17s3zkmz6d42rgvtxj3mxaqqtl6dtn4c75lwl4k", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17tj0c8eg9z9jxnuf4uqcsa9uxexd4m2dkk4mts", - "coins": [ - { - "denom": "uatom", - "amount": "3618000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17txgxvrqvh5w5k42d02z2g0tud8t4g6rknut3a", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17uj09xu5n47lxj4c63jckn9luj8mkytc0473z9", - "coins": [ - { - "denom": "uatom", - "amount": "877000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17vfjhvgqy2lpsh36rxuu9lknxvqv3gcgnpl5nu", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17vqcum09r9a3tqhjhzd9x595g7u5ytq3we8urm", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17vz69tgz6ld6m8c3dm4yvu2a8psvrjzvml5ksx", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17wjj4e4xjlk6qtdk3uw432vs3pmvkv0de6z7f6", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos17y0pkw9khjew0hjvzwd3gzz8rmvshnshys9yqy", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos180temxfldsrfa66aljp083nsru48q8829f6j6y", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18209hfrqcwvu9gufukf73v0y0kmwlzzevqvnrh", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos183cmyc8jkxcfu6nlv96pgx8kpznvdwyg35r9gd", - "coins": [ - { - "denom": "uatom", - "amount": "1658865310000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos183njknhc0swepfsk7pe3fl5a460flchngjadxj", - "coins": [ - { - "denom": "uatom", - "amount": "4621850000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1849m9wncrqp6v4tkss6a3j8uzvuv0cp7wcgvqa", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos187449y3w8dhknd2juecf6p36fa4h0puqcgqk57", - "coins": [ - { - "denom": "uatom", - "amount": "2479420000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos188n58739vj8l255e003geywxgxmlf2cvdts98j", - "coins": [ - { - "denom": "uatom", - "amount": "20091190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos189n8jcs42t56rzs7cur9wtz9pfz3sxacs5fcq9", - "coins": [ - { - "denom": "uatom", - "amount": "11669000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18aey0ctrk62clagpkx9g8gjl95y5nwcrp0wm5z", - "coins": [ - { - "denom": "uatom", - "amount": "45229000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18d7qc52nrtqs37z23lue5vkjhm4dsg6jz4nkuq", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18da7h02z3e46ulee5prg5zl6pr9va0ytv6w46k", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos18fg6lnzr2pa8fdgx59we6mjx8j9xazamnhahmr", - "coins": [ - { - "denom": "uatom", - "amount": "34035000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18fml63ahzjfksvm8xvzjrn2mwt5lees29ydzyd", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18h0d669kf2jray4tc9hmw6hhgedjht57czcaa9", - "coins": [ - { - "denom": "uatom", - "amount": "2315360000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18hlpxdl3qfqesa6elyt8ve5ajermylmt5re9mt", - "coins": [ - { - "denom": "uatom", - "amount": "18092000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18jjw9lhf9ukdkkpyzf4pnlt8u0jm2azynzq96e", - "coins": [ - { - "denom": "uatom", - "amount": "8317000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18mcq4np40nsaq8xz30ttydwkn4up6grdtxwxcj", - "coins": [ - { - "denom": "uatom", - "amount": "13342000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18mpuylanyjgmn93qhpf32hl8zwctg3tc4z5pj0", - "coins": [ - { - "denom": "uatom", - "amount": "67473690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18msk2v9uc07qawxmpn3esqwfw7q3pu6scvjs3u", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18npp0s2tffdx29qc0wrw8d48xrgcx2apw6dmv4", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18p0pre4n0v443v63uhqzsq7dd89p3r6xpqlk40", - "coins": [ - { - "denom": "uatom", - "amount": "9136000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18ptg027t5cumqzkhpn726uhdqdadh88ss7ytv3", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18t9m2k2k4uvstya9395k9ksh77q6ea7qp4j4cn", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18tsmk4temy707cdm24a3nvsl93zwhfelx44qzz", - "coins": [ - { - "denom": "uatom", - "amount": "29392000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18tzqax6f8hzzee2lq5xxszqn9dfqkj2jhup4tu", - "coins": [ - { - "denom": "uatom", - "amount": "20353000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18uqr3vkuvdjf7h429r5pg7wlxhfrefpp5y399k", - "coins": [ - { - "denom": "uatom", - "amount": "361840000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18uyeklnyra8l490dgd5cwqt9gapldt6ludg5jq", - "coins": [ - { - "denom": "uatom", - "amount": "197785690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18v9z53lxlwzc2mq0e4h45cmr64gu2g6w6yd4fx", - "coins": [ - { - "denom": "uatom", - "amount": "24521930000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18vpv7ah7fd6uyza4sfvmtjyl8jyvn29p00dudt", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18xynl3ttqus798h9swq4m0zh6ydtggu6jfs0pz", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos18y0lmghlznvzsvc0shgyhx4crpfw8gzdr6mk5q", - "coins": [ - { - "denom": "uatom", - "amount": "9943760000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos18yejf5zqwdlyltgggl5w59pfjgsak9tcf4kqsg", - "coins": [ - { - "denom": "uatom", - "amount": "40703880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos192seuxmvm9q6ffxc3gwphrfrsy4hjexnvcuszg", - "coins": [ - { - "denom": "uatom", - "amount": "77117000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19324cndnlqnjh5mzmg6kfccw8em6x488cqmgtu", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19326pupkn08hesezwz4wq84p7uw9arlsmtr0v6", - "coins": [ - { - "denom": "uatom", - "amount": "31661000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos194nez388h7mf9ncs4m8kaxyg23l5pgt9nftqxt", - "coins": [ - { - "denom": "uatom", - "amount": "42968000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1967cxqqs02p2zg0ea42tp0yr96hwdlxx2nn3x9", - "coins": [ - { - "denom": "uatom", - "amount": "8718000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1978ntmxhx5mq3ek8tua5354qlg04e7rdp7rvxv", - "coins": [ - { - "denom": "uatom", - "amount": "23293000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos197fx7exczhnxy5t5qc2q7z3c4ph3yc567tgytw", - "coins": [ - { - "denom": "uatom", - "amount": "13952690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos197gw9ztm6vznn6u2f4k6spg8zzcqyee220sup2", - "coins": [ - { - "denom": "uatom", - "amount": "206248000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos198a3unr79svl8xhwjxf6q3fpytdwl2wqc8naqe", - "coins": [ - { - "denom": "uatom", - "amount": "4975000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos199843dmw5r4nkt6ld00y0wdm0rnnwump4lgs30", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19c08vkd2qr6trpjt38yktr8yv93fu635qarmwk", - "coins": [ - { - "denom": "uatom", - "amount": "2899440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19et5tu2zamw20aeppxh0v9kdxzqvxypczv0x9f", - "coins": [ - { - "denom": "uatom", - "amount": "316000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19gnlu9qg0h5zhxf58lmpyegyjp6em5wh0pgd35", - "coins": [ - { - "denom": "uatom", - "amount": "226602000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19h4ngd2y80mp9ud66len698n88qq56dz6wcw7f", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19hgskf0cfpsn5dx9m2wpwem600d60wyqtjdjmm", - "coins": [ - { - "denom": "uatom", - "amount": "5427000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19hv3h65nlvpqfum4jgugct78ak8wfemjfeyygj", - "coins": [ - { - "denom": "uatom", - "amount": "27119000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19j2hd230c3hw6ds843yu8akc0xgvdvyu83c6xl", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19js2k5v45js5ezxmtts8mgnrz558zfk2cxzwju", - "coins": [ - { - "denom": "uatom", - "amount": "223390000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19jt06nj50nv59w3w39y2fwuw2j4g9jgzkju0uu", - "coins": [ - { - "denom": "uatom", - "amount": "3916000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19kwwdw0j64xhrmgkz49l0lmu5uyujjayrfzmuq", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19kxfw669usn8lv3fshw24cr9vczv5lrz9w57ng", - "coins": [ - { - "denom": "uatom", - "amount": "20353000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19lnlh0uhzyeuufgja68m7vw4962zlwz6vpkwru", - "coins": [ - { - "denom": "uatom", - "amount": "1763000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19mvahxc84g2kkjfe9f746v325qj03hnw3z0sv7", - "coins": [ - { - "denom": "uatom", - "amount": "639906380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19npgxaxnl6jp307pj672amxm3w9m6wlwuhl8gr", - "coins": [ - { - "denom": "uatom", - "amount": "9091000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19qc25l2nwztml9nvhqpg7y55420uvg59yur42v", - "coins": [ - { - "denom": "uatom", - "amount": "11668740000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19qde837rqx64kcvnazzywrdhx460dvah0nw9q3", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19w55ez8454gzl2z2ffr37asns4vc3pg58yxv8l", - "coins": [ - { - "denom": "uatom", - "amount": "7192350000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19wlk8gkfjckqr8d73dyp4n0f0k89q4h7xr3uwj", - "coins": [ - { - "denom": "uatom", - "amount": "2260000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19wnt5h3ae6953k2xlayxdwytaddt0fss99vshs", - "coins": [ - { - "denom": "uatom", - "amount": "79152000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19xk778d40u60w0jt7x6jchmha9fr726xpeqcxh", - "coins": [ - { - "denom": "uatom", - "amount": "19846660000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos19yp3j6zm9g82afwh8wqz07p4zmpxf0udk0rz2f", - "coins": [ - { - "denom": "uatom", - "amount": "23267840000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a0l4p968xx6z054n4z9l7kqsncw7zjyf8fq6kn", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1a2404s0kwanud0gu0d0tg8zw4e0hp595m9z9an", - "coins": [ - { - "denom": "uatom", - "amount": "1085520000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a4eeuuk38z45wqxpc2kxzrnpvlnrrjg74lj76x", - "coins": [ - { - "denom": "uatom", - "amount": "5226440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a55nuwfqa66hz5f6c6f8ehmwh9dfmnku6dvttm", - "coins": [ - { - "denom": "uatom", - "amount": "11758000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a5exrzmtda036c7vwnrnj6lycagsxgyzpn4hpd", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a5rsatuv2gqcwmzfd5w8texgzlms5vh4r0wk4w", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a5v8jyh23j4vzgdra00xyxwpc99zn4lz52uvvk", - "coins": [ - { - "denom": "uatom", - "amount": "362981130000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a6kfadt24cgm9fy8z564jrglc27vtfz9kuphjf", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a835w4qv05epzaezl6mlhmwrfek3fxergp8pjt", - "coins": [ - { - "denom": "uatom", - "amount": "1154190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1a9l4dq6s44k7dk4lx0us6g7xsunartz8rscnx3", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1aaxx3hwch6g32258s07a57tx9vd26f8nagwt8e", - "coins": [ - { - "denom": "uatom", - "amount": "32783000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1acz4u36dwj8sufz3kettxad3ukpel2skquvelz", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ad32hmndh6g3a9pj99cq6guqereyg84j7ke99j", - "coins": [ - { - "denom": "uatom", - "amount": "6750860000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ads4ttzyv2xgtesg4q78h56s8stdndhyf7fnru", - "coins": [ - { - "denom": "uatom", - "amount": "67845000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1afzj42vde5yae8uht4qqxhw747w8k4dd05x5eq", - "coins": [ - { - "denom": "uatom", - "amount": "20726640000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ajhsgsx3hs2ph5wcfmus539hrsset7vam8vw6r", - "coins": [ - { - "denom": "uatom", - "amount": "10022064000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ak0henvtfcvgeztfuwdxk4m5dzyvympedkpnc3", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ak0v68rxfdug9tdkalxks674gm2hrn0lzh47cj", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1aksvus854fr2kss97lvqnnkmv906yfnx07tyyq", - "coins": [ - { - "denom": "uatom", - "amount": "90007000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ammw6wexx4uzhy9akkdvtdxrn9x7yerf9nsuax", - "coins": [ - { - "denom": "uatom", - "amount": "678000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ap5m3nw7rd3f5pfc38cg3vwau5wz98adqvr956", - "coins": [ - { - "denom": "uatom", - "amount": "122628000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1apvnx0qxfvccx87sx0cdva9wj587txamw6rs7u", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1aq4j6gz0tcj039nn74pdfefgksnqlld030lkhf", - "coins": [ - { - "denom": "uatom", - "amount": "26751190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1arzft4x9l030g8u4d90x0p5lng348w2tqavvx7", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1atceykap8x00pyyfhq86ju9q3avkm4zq23yw09", - "coins": [ - { - "denom": "uatom", - "amount": "31661000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1avy9rn9nr08xsm0c46lm8avqdfe4wdyyc26ydx", - "coins": [ - { - "denom": "uatom", - "amount": "12556490000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1aw99lzepmhwlt3d3dy4qp55kjr75d0e3v6vmth", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1awk0u59cq3667pdxm7vchwwe7fg27caf5ega6t", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1axf80dwgpdwxjfmy08pu94q27kl6qguxmpt9vj", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ayx28ayl80skzs207xcydtfx5s75p09fwysrlm", - "coins": [ - { - "denom": "uatom", - "amount": "11029980000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1azeer78z96rsv495e7rge4vzts0l9hwg9qdqfx", - "coins": [ - { - "denom": "uatom", - "amount": "7236000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c0829zzzlm7lujdf8nn3mrhmg9zjugqnrrtzdg", - "coins": [ - { - "denom": "uatom", - "amount": "995060000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c3f2nwrvgmp2hnat67xunh06gr0vn5mw9u89vm", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c3ynnn0ra95ehaakss2ultxf7tsw79j9yh8e3d", - "coins": [ - { - "denom": "uatom", - "amount": "22250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "22250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1c4f2cd42ttmx5ehntddlc7g6cj3cpwtmsqk6um", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c6n05ya4s3z8tws4spxfzzvefj5h9qquc0dvud", - "coins": [ - { - "denom": "uatom", - "amount": "10321000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c777qqzngczeq3r4nl9sd4dy33c8smzekm4uzv", - "coins": [ - { - "denom": "uatom", - "amount": "4522000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1c8md8kv77089p9ww3aeq8s9f5vfmthyzekwuyp", - "coins": [ - { - "denom": "uatom", - "amount": "3827090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ca2vjnl75ew97xkm9wdps4lcexflzeucupg3wv", - "coins": [ - { - "denom": "uatom", - "amount": "338757000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cakgyd9pwshggsf4rysl7kuv2z94k7plkq456x", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1carjumua0ut4xugapz0qptvdz0pxs2jy0ur3z5", - "coins": [ - { - "denom": "uatom", - "amount": "6356810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cawhs2t43pvp9rstva6fceg6nzgr6g8mfmrjnn", - "coins": [ - { - "denom": "uatom", - "amount": "2250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "2250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1ccz8r75ktu2g3c39l3yjyx45g22y5mzctp7tpk", - "coins": [ - { - "denom": "uatom", - "amount": "5217130000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cd9ra2h8r2flmkm3fpek4hpgjkaxvsey36d5s4", - "coins": [ - { - "denom": "uatom", - "amount": "221054530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ce2gkxuug6g388qd535tk3p70ej2xkkvf5jm6r", - "coins": [ - { - "denom": "uatom", - "amount": "269767000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cf9yqlamxgeza4nsn7y08vpkcs7qqjp4lzw9ac", - "coins": [ - { - "denom": "uatom", - "amount": "135690000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cfz907vjr334a3k0r2sxveeu3fa2uz4hnlta82", - "coins": [ - { - "denom": "uatom", - "amount": "104705690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cg37yfw5dkyj8xpa0mpqmdkr905srspcrvfmz9", - "coins": [ - { - "denom": "uatom", - "amount": "180920000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cgdwmxhp9ry6gzghr89kgd4gpjemq4e6894c8r", - "coins": [ - { - "denom": "uatom", - "amount": "21257000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cgh5ksjwy2sd407lyre4l3uj2fdrqhpk84m04f", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cgnkhljjjylg2k3399xzug6accr3h2cgq8j4ka", - "coins": [ - { - "denom": "uatom", - "amount": "452752000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cgr23u765dxxh066t39ds9xl2rrk4mdqtywa3y", - "coins": [ - { - "denom": "uatom", - "amount": "13116000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cj7u0wpe45j0udnsy306sna7peah054upxtkzk", - "coins": [ - { - "denom": "uatom", - "amount": "11081350000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ck7h62s26z4xtuqgtdxesw5axjjcmaw2g0c0ht", - "coins": [ - { - "denom": "uatom", - "amount": "8135190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1clpqr4nrk4khgkxj78fcwwh6dl3uw4ep4tgu9q", - "coins": [ - { - "denom": "uatom", - "amount": "2163429000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cnc0m7dj95rxz0s8y30yxnyd4kzjm0gw5hmem9", - "coins": [ - { - "denom": "uatom", - "amount": "6342690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cq5de34d4ylcdwg7mllhrzk7n0ut4mkr5c2e7w", - "coins": [ - { - "denom": "uatom", - "amount": "18665810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cql9ska0xl2rkg6gcv0np4333gn6fygs3qf90r", - "coins": [ - { - "denom": "uatom", - "amount": "447001690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cqqdwg3sqx67z5thv8e94a0vhr8c2dhj7uexf3", - "coins": [ - { - "denom": "uatom", - "amount": "858465000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cs22ajqnf7vy020rzyhhxrmssltpgdqmkvkfm0", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cuj93ht7jgnhj9w95p50avflxs54vzwerlp26v", - "coins": [ - { - "denom": "uatom", - "amount": "51184690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cwpk832c06tktzk3hlezvecnrvg3pvgsvzl29v", - "coins": [ - { - "denom": "uatom", - "amount": "8125880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cwzdvwm3swqt8l45eh92luyfjlxsttg84ctgxe", - "coins": [ - { - "denom": "uatom", - "amount": "213132000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1cy7jye9jkg6k4h9wcurdcx7q4ld03m4853my3u", - "coins": [ - { - "denom": "uatom", - "amount": "26233000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d09xxsg6dg7kn33jf7edv88uhytqpq7p8hxjz3", - "coins": [ - { - "denom": "uatom", - "amount": "50021190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d0aup392g3enru7eash83sedqclaxvp7vkr0y9", - "coins": [ - { - "denom": "uatom", - "amount": "232260200000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d0syacm2y4dv6265z3wr0790gg6s4r4f467mer", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d6ymsqmtrmfw3dmwn7mgfkflldg9q8rkyv7r4f", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d7g8nr79qhm8n2l0hysfnfwazwmpvl3kglwklq", - "coins": [ - { - "denom": "uatom", - "amount": "5421000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d8mzdtl4eet2zhy9d4fttx92thrl6at4q60wvz", - "coins": [ - { - "denom": "uatom", - "amount": "36184000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1d9ql5ny5vas8fgtu3m6ua78ky8ygrss8v3pp99", - "coins": [ - { - "denom": "uatom", - "amount": "243795000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "243795000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1dafhhp2a5dmud90r5r5ws5fmh4hkptkt7szm02", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dany3yuj5qzcyl33qjcxwc6m478a3wftv347sh", - "coins": [ - { - "denom": "uatom", - "amount": "26000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "26000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1dc9zkd4ssrlnvktx8k97yz7hr2x6ewj6ju7zak", - "coins": [ - { - "denom": "uatom", - "amount": "500295690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dcjfpgrhkws5pudchn57vacelm6qzch6elxuqt", - "coins": [ - { - "denom": "uatom", - "amount": "248765000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1depqpgtsj23yd7d43hrt8l0965v29ktxmcf7xj", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dfhdn08a4f999nhk0yh7vdjtn92x2vlgljalfy", - "coins": [ - { - "denom": "uatom", - "amount": "1154190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dh25cx369a26phe0vfr7742rnvumkvqa9humf6", - "coins": [ - { - "denom": "uatom", - "amount": "9065990000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dh9g0lze0spa3zwx7ug673e4l98hxyyss7aa70", - "coins": [ - { - "denom": "uatom", - "amount": "22250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "22250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1dnapr4ckuajc6dajnm9th32jz5uw2auk2smfwj", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dp780ugw75g4l70ghgxl2qqxh8mjat6nslcz0q", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dphn9lt2pz4ulh8q9xw00n25g09lsd72762a4h", - "coins": [ - { - "denom": "uatom", - "amount": "11043940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dtq0y9reqst7d99fd3c7x6dflh4eazm4ha8qqh", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1du246y64t906m3gnd3l9zqdx4zfzkzmk95j846", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1duza60r8w3vl23xkzpk33anenj8kzejvxa8srh", - "coins": [ - { - "denom": "uatom", - "amount": "1151860000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dweyhr49jt0c3napejxknl36regjhv6jzxvgp5", - "coins": [ - { - "denom": "uatom", - "amount": "696927190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dwnxpdce69kyyfyfh0myygg46ka5egst60f45s", - "coins": [ - { - "denom": "uatom", - "amount": "62500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dydep8eafk3yxwvdqkr0fupfrga3x7cfjk7tw2", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dyptg9vsj92w5l9xn60kgw6ue4e6f9kh9mwrvt", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1dz6wztnz84a505ht25970w7htlp7ek7fjsycwf", - "coins": [ - { - "denom": "uatom", - "amount": "16463000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e2fyddrp9mxng9lk8kpqs38hcusrsnwel0cqkq", - "coins": [ - { - "denom": "uatom", - "amount": "36048720000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e52gjsd2r7rxuetvce9jygdhrzt77swvssnryv", - "coins": [ - { - "denom": "uatom", - "amount": "63797030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e5h4hqp298z6m0mm9ycnaawacmspgvujncqyyt", - "coins": [ - { - "denom": "uatom", - "amount": "8141000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e5mnjg4d6qprkash7vuseahgk2grrj43nk56sj", - "coins": [ - { - "denom": "uatom", - "amount": "23509680000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e6m4qmhyzj8v8j2yfdcz04qnewna4npsa3rvh5", - "coins": [ - { - "denom": "uatom", - "amount": "75986000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e873vumcqx00swf69wjqlkp22tww4jemdcmkkw", - "coins": [ - { - "denom": "uatom", - "amount": "6288690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1e9jlmhjnhv0z5wj64gz0dwn6q523xyxexne9dq", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ea3exnxgkmwgjjd74ran5434humf6kd8arr57s", - "coins": [ - { - "denom": "uatom", - "amount": "14021000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ec3p6a75mqwkv33zt543n6cnxqwun37rxqj2vl", - "coins": [ - { - "denom": "uatom", - "amount": "6500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ec95g0hxhxey9pen8wtqeggxce8r2wj59qskz3", - "coins": [ - { - "denom": "uatom", - "amount": "4062940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ecxqsd0mt5mrc3649zy42kff5ethtrrgua0fkw", - "coins": [ - { - "denom": "uatom", - "amount": "19937030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ed32ulmk32n079m9hx7sankadlf7wrdg5wql65", - "coins": [ - { - "denom": "uatom", - "amount": "1899000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eez6ks7upkjf8w3eaz0vah7x3d8zkade206xa6", - "coins": [ - { - "denom": "uatom", - "amount": "11624530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eh5mwu044gd5ntkkc2xgfg8247mgc56f8pycyz", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eh6l0lzaw29rvkwt5wcazhddhfuq4qt8jyq8q6", - "coins": [ - { - "denom": "uatom", - "amount": "166481000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ehkfl7palwrh6w2hhr2yfrgrq8jetguceek792", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ehmcn2t856kn2ls2kpsr4lj6ev3unxrwf8zr7r", - "coins": [ - { - "denom": "uatom", - "amount": "290877170000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ehs0p8tlq2mnvef4wx2hfprwamfrauxy5y3yp8", - "coins": [ - { - "denom": "uatom", - "amount": "333333330000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ehwjr5rym9lftlfhgaelre5pkynjhtalctrxpz", - "coins": [ - { - "denom": "uatom", - "amount": "14788190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1elwl77g7uzxfmpdg54m7s3mx8gtm5et0d6maqm", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1emaa7mwgpnpmc7yptm728ytp9quamsvuz92x5u", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eq9dymmd8x04khj8a8qd6xmtp2yjna0v236waw", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eqaeazuat8cpzs2fy79mkpf5j00axq59zey5c5", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eqltfeluftz2r4xa86vnakvqzq2nkdmzdfycra", - "coins": [ - { - "denom": "uatom", - "amount": "572440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1erynlmy8crgpgvkgy2su2r7e6p5dlkfq7v32mg", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1et93zj3z539acj3vzrfaysh9qs6lx883cwwxtf", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1eva437c5hw4kx9wd8wya7ykpkrktypu8d9kz9f", - "coins": [ - { - "denom": "uatom", - "amount": "17833870000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ewmayyze0svkhhsq7gs5yc9gv8uezn3tlrekqv", - "coins": [ - { - "denom": "uatom", - "amount": "29399000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1exmthnluucpdk9qjewm0de0chhyuvfpmjmu78v", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ey69r37gfxvxg62sh4r0ktpuc46pzjrmz29g45", - "coins": [ - { - "denom": "uatom", - "amount": "29500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "29500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1f0kwe42k9xdmlxt939m6nq7h9shj0rygnldusg", - "coins": [ - { - "denom": "uatom", - "amount": "217104000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f0zwrlfjjl8twrsyxv22p8jdqtym9njaksfs2y", - "coins": [ - { - "denom": "uatom", - "amount": "217352000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f2r27aau0kaa69mjqvacuzdmutly0k87399jg7", - "coins": [ - { - "denom": "uatom", - "amount": "75081000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f2w8yef59ptjwh0lygs75vlezhd0s6lulmhydt", - "coins": [ - { - "denom": "uatom", - "amount": "58282040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4anxz5sphpxcuq644h5hvxf6wsalz36ac454m", - "coins": [ - { - "denom": "uatom", - "amount": "119620000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4l4najn30la6gytsfrzenyxuxnjgpsx3vwqd7", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4p03grrcvr9catgnguwx4gpksmyxxx25gqquj", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4s6960hvjhxkhlzs9h90ehuzg3qm5j3csftzz", - "coins": [ - { - "denom": "uatom", - "amount": "24311000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f4uneac5gaqlzt8vfv5fxz0dfz2zhpppwfkkw5", - "coins": [ - { - "denom": "uatom", - "amount": "5927280000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f63lrmnn4upu722kxdhw04taxa6w50lnchnjp4", - "coins": [ - { - "denom": "uatom", - "amount": "30304000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f70nsqtq0wcd0kymq79ca2p0k5napnm6yqc94x", - "coins": [ - { - "denom": "uatom", - "amount": "944802440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1f7sa4nr5nhlt57vy5553tqzs5dlz7x6jx6uxw5", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fa87w4w5yezm42jph2cuku983wes8379junyhj", - "coins": [ - { - "denom": "uatom", - "amount": "46528360000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fcyx472u3r2cg90zufv9pludp8r6scfwu2hnhx", - "coins": [ - { - "denom": "uatom", - "amount": "7236800000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fdc28n58lqannhd587384pqcahusmscxdumlkg", - "coins": [ - { - "denom": "uatom", - "amount": "981010000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ff0dw8kawsnxkrgj7p65kvw7jxxakyf8kqnyy4", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fghgwhgtxtcshj4a9alp7u2qv6n2wffqj4jdl9", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1fgmzta85ud989ksqrch98v4s99mx3u04pjmvxz", - "coins": [ - { - "denom": "uatom", - "amount": "567665860000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fhejq5a3z8kehknrrjupt2wdl4l0wh9y2vayhr", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fj8u0refnfry3y2w8m799txwatzdrkgd22yqxt", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fk8whxged3s54s0850m7se79nlm5d9c53w4lfu", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fnf34rnxl4u3u8fu6z2qzf49d74neteg77zd40", - "coins": [ - { - "denom": "uatom", - "amount": "90007000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fnt8q5k70flcwgwsazz8gd3vc7lmw3qnjq6mu5", - "coins": [ - { - "denom": "uatom", - "amount": "22162000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fshyfd0z0rhqcrf0jjd9yu63um6q5ajl3zq8qc", - "coins": [ - { - "denom": "uatom", - "amount": "60214480000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fujmd6kpgy4az4y6rsduwap0s6sazgd0sndu2e", - "coins": [ - { - "denom": "uatom", - "amount": "31661000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fv0n3e4uww6u2l30ptskx9rgjqklm53l5xsxhw", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fvq93ef35a04an9kpz6rjqryg9ecmvr2xc3zrf", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1fw06varlctvyjuc6884kvjnavq26qpmq4f4tle", - "coins": [ - { - "denom": "uatom", - "amount": "255934450000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g0y2xpyzz4we4zwlafus9vvpd3tey76mhp0pw7", - "coins": [ - { - "denom": "uatom", - "amount": "472401220000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g29wu5nm7hfke3an9uzv9d3upv3zvk5t7hggj9", - "coins": [ - { - "denom": "uatom", - "amount": "34891040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g5435cjhlm4s2nlmwln6ess9x4lc4qgdfep2l6", - "coins": [ - { - "denom": "uatom", - "amount": "52014000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g5c2w65svkcxxat72nscc0mwqj2gsrhrem3cpk", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g5c490lh0syrnq4xqyc83e9sdg7l63emjy6dwj", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g665548pcf7x70avextvkxm5rlk5ekrtegafdp", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1g8622z29zmgsh9cmf56uzq5zyvvt4fnsn295pm", - "coins": [ - { - "denom": "uatom", - "amount": "402094000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ga6hy630ejh2s8p2kvql4jxjt6fcnj0nl5vjqu", - "coins": [ - { - "denom": "uatom", - "amount": "944802440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gdlk85s7dzan6zf7857smkgsdccde5lq9ndnn5", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gdv7kzg2lvx6k5w6nxq84q8r9z2ujpve0krhkm", - "coins": [ - { - "denom": "uatom", - "amount": "29851000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gedwk4nn8d3ge3efjcq54lj8p9r8mq5hlx5m09", - "coins": [ - { - "denom": "uatom", - "amount": "112622000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1getk0gxldkqnphlv7g8pl7xn79v8akwxek6yxf", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gfnd3dq4qaeklznfw6aqkw9rjg9uymqefmh9gw", - "coins": [ - { - "denom": "uatom", - "amount": "53099000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gg3vkw8hp034wer0k7p47pehag3jvnqh62h4v8", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gg5tynt57lf9d69crj0vzf3m6rsqelz46xntp8", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ggvr6v6cnkmlx4efqcn3ycwjjswkruvyfvnzz9", - "coins": [ - { - "denom": "uatom", - "amount": "76438000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ghykl3xtrum0znvuqdk084hyfywqcqjqmwcs8j", - "coins": [ - { - "denom": "uatom", - "amount": "100410000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gj3zlw8nze9wftanatrj7fneq0ud8y86ftm4un", - "coins": [ - { - "denom": "uatom", - "amount": "40708460000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gk6py8fukt8dnaad00atemjqjlhjlwv9rgw6qz", - "coins": [ - { - "denom": "uatom", - "amount": "90505000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gle4fkzf6wrfzwl3hawd4pg27fcsnh4f7nacdk", - "coins": [ - { - "denom": "uatom", - "amount": "500295690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gp6drj8tmg2hxe70rpdlhqdeamgyjp2gpnvd82", - "coins": [ - { - "denom": "uatom", - "amount": "10402000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gq9yqlhvhtu6a00vydyt8wztx66yvpjy7a862g", - "coins": [ - { - "denom": "uatom", - "amount": "8819000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1grgelyng2v6v3t8z87wu3sxgt9m5s03xvslewd", - "coins": [ - { - "denom": "uatom", - "amount": "1467495660000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gse07606lxxyrgpm0yh0rxqjv3cqhx6jsc04yf", - "coins": [ - { - "denom": "uatom", - "amount": "231178140000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gtquva5nww59ejc3hjvnchslqlsvsmw8wjvgtx", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gttnelxpkehyglfz8ns85j72rm25nvf4gw0drr", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gtzfw4n8m6cr0f42f4psjmngkqm6jfwaukm9dh", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gu0mkhx3w76wz3v2pd0vscsm94zu3htgnmjku8", - "coins": [ - { - "denom": "uatom", - "amount": "62500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1guxp99wf5q7dnh7jc6s7wx4zwqm8z7chwts3nk", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1gwuzsm5cccy97gtjze2lzk2jyya8y3xrlgcme2", - "coins": [ - { - "denom": "uatom", - "amount": "54274000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gwywmna0jky46mcj3wvc336qgyk9u2n3c74az7", - "coins": [ - { - "denom": "uatom", - "amount": "70089980000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gxe38pdkz5g2h3g07pwa96zunsyugkgxa7cym8", - "coins": [ - { - "denom": "uatom", - "amount": "8716940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1gzuqry88awndjjsa5exzx4gwnmktcpdrxgdcf6", - "coins": [ - { - "denom": "uatom", - "amount": "10855000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1h40lfv50fmdnge9xy57wgyy985xrwjpmu9t2h7", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1h8t0vx9kl8vvkldqafct2gw6gehka8y9ks6znu", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1heeama0c774937c85vu4sxxnz9hlqppa8lgdzc", - "coins": [ - { - "denom": "uatom", - "amount": "2311870000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1henglqj5c59wrhezdas8ldwu578a0xs5e74csc", - "coins": [ - { - "denom": "uatom", - "amount": "2894000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1heqh3s79g9c4atf7pmnyhxk20nw2c7j7lmau32", - "coins": [ - { - "denom": "uatom", - "amount": "144283000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hgev2wqdmncqwc6w8nxechk32n8kpahgu49avy", - "coins": [ - { - "denom": "uatom", - "amount": "8135190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hh8dfz9jcvferdkxl8qf9swv3ps4l9p2qnzsxj", - "coins": [ - { - "denom": "uatom", - "amount": "121180000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hj3j4c4728gkznevtzz7n2ageyf94z6kgdg59w", - "coins": [ - { - "denom": "uatom", - "amount": "81429870000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hjct6q7npsspsg3dgvzk3sdf89spmlpfg8wwf7", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hjykmlfysrzyw43nqwc89eyg74q5apuntnqsps", - "coins": [ - { - "denom": "uatom", - "amount": "36183000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hs39xzk0qn73crxgv5vwu884lxn7z99ryrzmrh", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hy7sg2r2apyx7nftljcrt3aaxdha6d0v7pvpk0", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hyup7rv2vqlmzpu3mg34knepfxpnt2yrk8vspz", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hzdne7xvvs8unp497t6x0g32lpz6m5mqk9zq7d", - "coins": [ - { - "denom": "uatom", - "amount": "26292000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1hzzkqn4kpqcvzauhdzlnkkkmr4ryaf8rj6rhkj", - "coins": [ - { - "denom": "uatom", - "amount": "2000000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j0vaeh27t4rll7zhmarwcuq8xtrmvqhughud6h", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j26c4k2jj9tv95whdhva3e8v2fcm4s3dpt77r6", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j2ec43eha7u0nqwd3f7fy4ufehlnh2k5u7c599", - "coins": [ - { - "denom": "uatom", - "amount": "6300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j2yz3qt0589jfffu44djaamj23gvjmt8me5ff4", - "coins": [ - { - "denom": "uatom", - "amount": "1356899000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j468a986hzugntgdf7f95ag2m5part4ngclgmz", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j4mk6l3emyncu84f5fcxgn9n3vdjn23jcnlkdt", - "coins": [ - { - "denom": "uatom", - "amount": "88835550000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j5n75yls5aun28eu02w2hdthmtx29pvesya0gh", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j7u72t4jfwxt5z04uwvf3s68zmaaxqxcxpz6zm", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1j82fa8tkvdr2pjgn3hm367l0z8v2hj738f4fvc", - "coins": [ - { - "denom": "uatom", - "amount": "6903000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jcuur4r62sak3gjv7cj2sdawtyw64hkdaj7tgg", - "coins": [ - { - "denom": "uatom", - "amount": "45297000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1je2h4pjr8tazzmse2lue86lharxktxg466g5c8", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jf0nkx6s8r480kpr084xz3fsj597k6c2czhhk7", - "coins": [ - { - "denom": "uatom", - "amount": "18422620000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jhnz3se4uax336rlku7tpk7kv28n69n6vj7465", - "coins": [ - { - "denom": "uatom", - "amount": "24876000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jhtmsepzh85p355dht204uxqdu7h5d8e5v5g9x", - "coins": [ - { - "denom": "uatom", - "amount": "217104000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jpjacusjyym9txdp6pqug88rcq6tk05ckmc05p", - "coins": [ - { - "denom": "uatom", - "amount": "479360000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jqnqx7gq7gn89r0ysjufnnat85n5f9e5axywfz", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jsdwaf0enwmgl64y200n8pg9w3xs7g9cl2wj38", - "coins": [ - { - "denom": "uatom", - "amount": "62990880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jsgsm6zuwefc6pvmvl8495az4psq7gs7dedqgc", - "coins": [ - { - "denom": "uatom", - "amount": "86337710000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jsu8kqf8pv6pf2rcwylulvp73a453q382wep43", - "coins": [ - { - "denom": "uatom", - "amount": "63983190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jtrpj3aza5myet2vauveehk4nt4e4dgq4pk3md", - "coins": [ - { - "denom": "uatom", - "amount": "31661000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1juhegqg2wltwwlh0gur5p3rlkcm00fpr498p4g", - "coins": [ - { - "denom": "uatom", - "amount": "11094000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jw5gc0jtlmhjqmmjey0kshd5xn967xw3ulpeyj", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jxv0u20scum4trha72c7ltfgfqef6nscj25050", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jy2cq6zdyzwtj2ujdcxpzudwdaenersnl4k77d", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jy2q22yw290efhfsrwlfqanaq52vq59dz0hyke", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jy6mmuqdwaawjc8qlwf3r9ml3zlqxa68azgl4r", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1jymtql33ej852ck06nmxxds8cqlwqws95622yj", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1k6496vg8vd507aukcqrr55nhwxjqmpjsq56mvd", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1k6ddn5mzggf5f87pt70kyk3mkqd7r9fv97pawy", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1k9a0cs97vul8w2vwknlfmpez6prv8klv29tea7", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1k9sjll9g57mw3unhepv50ctfwt5c2743m5vt2m", - "coins": [ - { - "denom": "uatom", - "amount": "1748790000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ka5tua6d6l570vxtttrzhr2jux5uhe2gwe7l4z", - "coins": [ - { - "denom": "uatom", - "amount": "2080000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kckhyem9suhzhah62z2kwzqk5apjtct5w5gawa", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kcy04c0qe8a6h2fuf3f788e6mp34avlhg7efnh", - "coins": [ - { - "denom": "uatom", - "amount": "135690000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kelcz0n9hash8zxcngavehwyzt0c7073655skd", - "coins": [ - { - "denom": "uatom", - "amount": "90229110000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kezzd8q3lc8wek2ks48e36cv57jvtsr74l9uf4", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kfd4x65lanps28wh8dtr39g0uxzqu7wdccxesw", - "coins": [ - { - "denom": "uatom", - "amount": "20933690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kfzj0sr07drru6gpd84qrq2h0d68pkd4mqp3hr", - "coins": [ - { - "denom": "uatom", - "amount": "62417000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kg99k8wd67r0ffxwavgnxup7yk46rvttrvqy7d", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1khlqhj8vkmj5hkap47740xcwmspz7ydpkxtuxn", - "coins": [ - { - "denom": "uatom", - "amount": "85484000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kj0h4kn4z5xvedu2nd9c4a9a559wvpuvemr0vq", - "coins": [ - { - "denom": "uatom", - "amount": "33250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "33250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1kjhdx3nkh6krdhryvjzkq33xwh6wsyy785fsga", - "coins": [ - { - "denom": "uatom", - "amount": "17187000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1klmc0xh37pu5ajt53z7l3aekmej39s06ccfgqd", - "coins": [ - { - "denom": "uatom", - "amount": "3362510000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kq5yvze3vx6f2gxdyv3s3c3js72ssf0f5kkqj0", - "coins": [ - { - "denom": "uatom", - "amount": "4520000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kq7fnx7qv93fs9w38e24hkp7jzmrxl9f956ywn", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kquk63vg0c7ugpd4n9l2hfemys9kgywwl67vpf", - "coins": [ - { - "denom": "uatom", - "amount": "290865690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1krfmhqvfzmxex5uw5atjwfs9xpqel6hvqajkyt", - "coins": [ - { - "denom": "uatom", - "amount": "184302910000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ksnnpj9x33hvakuzt02gq0aufacg72w7u5kv3w", - "coins": [ - { - "denom": "uatom", - "amount": "9950000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kucpygly3ynswdf77ersas9ejdlp5erucprymf", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kv7kh4tt9uq728f9rw68dnvjfgvgt8dq0yc296", - "coins": [ - { - "denom": "uatom", - "amount": "107040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kvy9pqu3ul0x9263cgl3x58g3jccqyf2jdu00x", - "coins": [ - { - "denom": "uatom", - "amount": "472401220000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kw3tzazwumt2rhpjg76ud0z2gvuzwmj5ylaf08", - "coins": [ - { - "denom": "uatom", - "amount": "5296250000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kwstysea0p8stxe349hru6hfxc78zsjnekexxn", - "coins": [ - { - "denom": "uatom", - "amount": "20250000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "20250000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1ky7se9m7mpfg638m0sjtd79marsfgkj3vchkza", - "coins": [ - { - "denom": "uatom", - "amount": "13686740000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kz72mcgym3wwcjcqcz05e6uue2842w2npa2t2v", - "coins": [ - { - "denom": "uatom", - "amount": "31986940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1kzzwlps38rgv7gwyye7dy3ppymsrze65vep6qx", - "coins": [ - { - "denom": "uatom", - "amount": "15830000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l0whphamp06f9envh55juf5k8z25h9ju5fpzyu", - "coins": [ - { - "denom": "uatom", - "amount": "1148370000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l2lvpakkxs6dcg4t9kdeyutwyxkaeglx5dj4p2", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l39ln38tehqg2k7ujhalgylz9qk2gr90r5njsz", - "coins": [ - { - "denom": "uatom", - "amount": "36606040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l45lk6uc0vkz3n9ljynnuge29fprymes98036k", - "coins": [ - { - "denom": "uatom", - "amount": "237061000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l4d8nle9eztwsqf5l9mv7exsxe0rlfsp5fjvjz", - "coins": [ - { - "denom": "uatom", - "amount": "630506000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l4tdmtdndhhjae4lkt05vk9t2gx2m742ts7e3m", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1l5e7lk6cj553jzfv4x9k3scnyxzz70vc4222ka", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l6gz5zk8k8s87emf4q5jlr84gp3wq8x3y6lw7t", - "coins": [ - { - "denom": "uatom", - "amount": "7500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "7500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1l72ggdcp99y6z56g4g775a07ff8f3dx4a60ugx", - "coins": [ - { - "denom": "uatom", - "amount": "135690000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1l7knghep9aerjsj6z76wcn2up5p5m6r2quhrcs", - "coins": [ - { - "denom": "uatom", - "amount": "2495196090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1la4t7jee73a4zqg9ccs2acjt462qjs5xkls4n7", - "coins": [ - { - "denom": "uatom", - "amount": "198147000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1laqefwck8mkxt44jfn7fnpynfv9f2utyw55shy", - "coins": [ - { - "denom": "uatom", - "amount": "1017675000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lcech8j0wnzxh8v7eeyp9jue2m3vy7d8wp62uy", - "coins": [ - { - "denom": "uatom", - "amount": "70099600000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lcsjy2d5s33h0sddd8lpuqvwyz5ruz7jsfj43h", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1lddgsstcvk0myvd77hhl7quxlyzy62qh5twpzl", - "coins": [ - { - "denom": "uatom", - "amount": "5798880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ldp79s287ycz8faf30c2dwllmx27py593yegdh", - "coins": [ - { - "denom": "uatom", - "amount": "2145490000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ldzd5tlpe66vpuc9267uknwrlr7fdw7xjkjykw", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lem6pqkt64ge7yyfs5l2yxxrg78uvvju8afwlr", - "coins": [ - { - "denom": "uatom", - "amount": "90000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lenvpq48ehp83x70nxuw797949twzhcycrucv4", - "coins": [ - { - "denom": "uatom", - "amount": "54241000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lgpsaas2nmgrdtuhhgg7q8fxvlvw3nkp02pptl", - "coins": [ - { - "denom": "uatom", - "amount": "9045000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lh4gmzrpr84rv37jgc7l3jf4zz33l92zscmzaq", - "coins": [ - { - "denom": "uatom", - "amount": "65583000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lh76pvy2ew873hxxnvl5gqpsgwzm53qpf6x78y", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lhpdp3nasvc66nxx7lnq604usfvjxlsm8h6v3l", - "coins": [ - { - "denom": "uatom", - "amount": "17433880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ljfjvdg0hps4ysqtckmx87w3hrwv54kn92waqr", - "coins": [ - { - "denom": "uatom", - "amount": "174514530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lktjhnzkpkz3ehrg8psvmwhafg56kfss5597tg", - "coins": [ - { - "denom": "uatom", - "amount": "1000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "1000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1lkznpljvglyfehzngujl93l0d3elfvua5kdvy9", - "coins": [ - { - "denom": "uatom", - "amount": "67845000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ll9zujtlpzym6m684hyh5hnwn4rnpz4v5fh660", - "coins": [ - { - "denom": "uatom", - "amount": "69800690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lmg2wqnkynmjyszn8vtze6q0082c9sjlplga80", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ln7hw9nk4rreyazuu0fuh63t962xyjddf3rs49", - "coins": [ - { - "denom": "uatom", - "amount": "12663000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lny7p8uw6tcvlnmw2yu0xcqkd32rgunwpqr47k", - "coins": [ - { - "denom": "uatom", - "amount": "568856000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "568856000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1lrkg4yx0sc92z7wsdvtg9kktu9jc55fukq5hkc", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lrkzz8aanx975lrqqzg0cmxyh027qzatu3s2az", - "coins": [ - { - "denom": "uatom", - "amount": "119277000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lsx4x2fdx4vhxz49t9sed8j5untc8yyllmfs4m", - "coins": [ - { - "denom": "uatom", - "amount": "572440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lt83tymrlkcg7jtfrzv5370z9uthttpvhf4jd7", - "coins": [ - { - "denom": "uatom", - "amount": "694280000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lujhkwkpwnsems37697fr9t0aja5gd0sjsxtaf", - "coins": [ - { - "denom": "uatom", - "amount": "90458000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lyc3dacgdsq9mlardxze4883w6uy0yw27txv7n", - "coins": [ - { - "denom": "uatom", - "amount": "18606690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lyqw63pe03ymaccav329g6xg8fxc0l3lg0gx32", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1lzef80fkrqlj02am55yhasas4np8cmtrt0jyv5", - "coins": [ - { - "denom": "uatom", - "amount": "465479120000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m06fehere8q09sqcj08dcc0xyj3fjlzc2x24y4", - "coins": [ - { - "denom": "uatom", - "amount": "7236000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m5a8up77kweeynzu0yzpfdczycfvrl4c0fmsf5", - "coins": [ - { - "denom": "uatom", - "amount": "23966440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m6svdnu0x4jsnmglk7g8jcucqn5guleuffuzlm", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m8c39v2pwmnx0tuucnyn06wf73ex9qazsygh38", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1m9fk67fjcfukfdjajr9dmf56u4twuwuj6d9vr6", - "coins": [ - { - "denom": "uatom", - "amount": "19675000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ma02nlc7lchu7caufyrrqt4r6v2mpsj92s3mw7", - "coins": [ - { - "denom": "uatom", - "amount": "3614756800000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mamljwqhnsk0z6vv8v0deq5ezpelm3py9hc0nm", - "coins": [ - { - "denom": "uatom", - "amount": "437050000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1matv39l58yuz0wugunzrxeshfp959r7yvm0png", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1md398keg7plc5g3jtzapxld9scmwue5rqu7ca6", - "coins": [ - { - "denom": "uatom", - "amount": "2241000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mgzx4ps4anyuguwqnlw28ak5wr8c25qpce6v76", - "coins": [ - { - "denom": "uatom", - "amount": "221627000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mh74w0gprseer9p7jnp77tpwjzc9e4ur9wzmya", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mhgrudqv6uy3vdwelztu2vmqqqz23wpu76jydr", - "coins": [ - { - "denom": "uatom", - "amount": "87253190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mjal8r2etj7px00469uj53snszng8fayz8y4f4", - "coins": [ - { - "denom": "uatom", - "amount": "40707000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mk8kvqsnge6e3edpx38dqnpn39zmqlsw46fcve", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ml3ajeqj5rhkhzw6ycqvx9r0yq79vg8585av80", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mlvmhj8z78965neevc4akynec0q5ln29a7ryzx", - "coins": [ - { - "denom": "uatom", - "amount": "485450000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mm0pznu93ckr3tfepz77v70pkvgf80w092vhey", - "coins": [ - { - "denom": "uatom", - "amount": "17187000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mmtur9t5y4twz8uhcw4nfqfug2vs9rggw90kph", - "coins": [ - { - "denom": "uatom", - "amount": "23254650000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mn4s582hcktej3xqfm6kmnkruvfn3nd4j4xklg", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mn7gqqweth02pvu73anyqhxt529upvn8c6x8gt", - "coins": [ - { - "denom": "uatom", - "amount": "4522000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mp6n3gay6uae5clywzjjczxakwzykw7yfa9d44", - "coins": [ - { - "denom": "uatom", - "amount": "22162000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mrkn3uug9dm32hyp9tcxs5dmmuspt7nezrdmhz", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mszqfjrh2af5k3jr4r3deukgrzdylkr2sc8pg2", - "coins": [ - { - "denom": "uatom", - "amount": "10430080000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mt9msx5q8wlcmt2qgl6qltk8fgtl995x3pnt7q", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mvvwfnfagp60j25dvqdc4ntslu4nef5cgc4x5k", - "coins": [ - { - "denom": "uatom", - "amount": "3481190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mx7uw3jw3dgky6ty67lgyrstfgte9nrvklws52", - "coins": [ - { - "denom": "uatom", - "amount": "13564000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mxksrhkyqyfathyz2ktv8e8738fygk0yj48a8c", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1mzw42ehfw4md7yn49h329qss04qeq5rgzgkn95", - "coins": [ - { - "denom": "uatom", - "amount": "66940000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n0jpnal3nq2qpep8nh70gmtvqwzzhdqrs0yj6h", - "coins": [ - { - "denom": "uatom", - "amount": "2873000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n2l8pw5zxpa00w6ylrwk2nzgswq6xtpzs86sqs", - "coins": [ - { - "denom": "uatom", - "amount": "27138000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n5ewzhjwhg0j2ay3x7hv0zluqn8hgamz2w0l8s", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n5pu2rtz4e2skaeatcmlexza7kheedzhzf70tu", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n67u3kym9zh02yw9su36a5y8vp4fkpkzu3yhfd", - "coins": [ - { - "denom": "uatom", - "amount": "4517000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n76cq858ywc8nxmzhw0xew2y8uz9ce6a74xtna", - "coins": [ - { - "denom": "uatom", - "amount": "11614060000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n7ty7m0u8vwhg88jflw43wmvz7catru2n5ru4j", - "coins": [ - { - "denom": "uatom", - "amount": "139610690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n7vrughkxs2td00gjvfv2rrz8epu8ssqm6wp22", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n8dzlhvpk689az6hj9ert05hp86lznmuezdvrf", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n9dl7pmfdxae3zfytltd6hw2nn39luvpd8z7rl", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1n9juyach9xvnsnkeale4kc4kjgaedvsaydqe9z", - "coins": [ - { - "denom": "uatom", - "amount": "174515690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nckqhfp8k67qzvats2slqvtaf3kynz66ze6up4", - "coins": [ - { - "denom": "uatom", - "amount": "14874180000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nclw22ywv5l0sng323q2ddxzvwjgn3z4lx76fh", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nemlw7n0engcdlypkp6vsmsrvq8c0me6fhq300", - "coins": [ - { - "denom": "uatom", - "amount": "40707000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nf7ysaj73qfq4hm586zy6np2h9a2vkpz7lfgct", - "coins": [ - { - "denom": "uatom", - "amount": "11262000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1njt7e57gdsej95qqajw5hrkchwe96n354tvzpu", - "coins": [ - { - "denom": "uatom", - "amount": "4954680000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nkq7w53n70c03njwxdxpvr28yh5c5g2z4yhssu", - "coins": [ - { - "denom": "uatom", - "amount": "24914000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nkrsk4e8jlfaprmn282zulhfvw00gagyd7k80r", - "coins": [ - { - "denom": "uatom", - "amount": "81435690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nkwj47xhgwee208uqjzmcuyp6e5pjrsh8xf4gj", - "coins": [ - { - "denom": "uatom", - "amount": "12657000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nmwsvgu0vzmt078sec7c0wsj925ndpsdj6c7tn", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nnha965g72e6hclmdqr0kqnzswa4lx4t0jhchh", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1npu2yuldsgxvg9a7gp9zfszx4rqw4q4p72fdfs", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nqeu6cz8rc0a9sk7ett9ews32pmhcejv0nwlae", - "coins": [ - { - "denom": "uatom", - "amount": "872615690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nrdxgccjqddjg0a8p3xsarmw8fveak6sylqlph", - "coins": [ - { - "denom": "uatom", - "amount": "1151846380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nse3tw56jdxxgn5tkedy5racut3janmwyu3x82", - "coins": [ - { - "denom": "uatom", - "amount": "1130750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nu8wvq4kj6qdwwx77d6dcmfnu3ut8m42xt30d0", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nv9j4uycfhqq278ku6tjam23q2fpc82g3k2hwk", - "coins": [ - { - "denom": "uatom", - "amount": "18092000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nwpde46ud3sthsvs09nj0z6p4s4d3gyqnhxmad", - "coins": [ - { - "denom": "uatom", - "amount": "113029000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nwyeyqudzru5l64e83dnmq79q4stqz7fwl5v5a", - "coins": [ - { - "denom": "uatom", - "amount": "349040690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nx3z56kpyk7xmpt4e8df7gsmd3lerj5t2lltzj", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nysdqwr87tn3znjpygx9g5qcd8wmkunfln9kzr", - "coins": [ - { - "denom": "uatom", - "amount": "81435690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1nyvz6jl826yknlpre8mfsehu96xld46n2t58x7", - "coins": [ - { - "denom": "uatom", - "amount": "17648000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p0c0d7faqjlhw5y07kxwppatahu22wdf2mwn7f", - "coins": [ - { - "denom": "uatom", - "amount": "3931470000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p22hhezk9pevxmluq5kvzkumxk0jwrt7xqu7rz", - "coins": [ - { - "denom": "uatom", - "amount": "12549000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p2de78j5nk3cj480pzeka3unltede3nm0zjpe9", - "coins": [ - { - "denom": "uatom", - "amount": "349040690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p35nu7mzhkrumeyf3evwkyyg37gyvfl6ew752h", - "coins": [ - { - "denom": "uatom", - "amount": "28961840000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p54pu56t3h2r4ecxs863u9xpxwp28x8famg2yp", - "coins": [ - { - "denom": "uatom", - "amount": "4999000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "4999000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1p56ryxvkcmxsxx4ewwqm4gwe86qxtkhakxw358", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p79cw4nehzz469mqdul7dgpn3h8h82rphmpxew", - "coins": [ - { - "denom": "uatom", - "amount": "29078190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p90k8m3vmp3eqv3pc77q5fqsxaa6q7282veacs", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p99fp2s0kfmnx62kvzgzw6jjmzdx3elpjsx3ad", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1p9qh4ldfd6n0qehujsal4k7g0e37kel90rc4ts", - "coins": [ - { - "denom": "uatom", - "amount": "2626020000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1palj9927mttgl7a79vh0et7xarrf5sl7n68lnd", - "coins": [ - { - "denom": "uatom", - "amount": "23545750000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pcf3jd9fevxtayq4hmkqdh7vlqmggymtkpeeaf", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pcm7sjpt8tu85v4hdkk5l3fh96ya9zm87lqvqe", - "coins": [ - { - "denom": "uatom", - "amount": "1842980000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pcp8rz54agefg7pyc8z6330x2k4syl8k8xg4em", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pd6xvv94p2env7laycms2u9a5p6vns3tys0tyx", - "coins": [ - { - "denom": "uatom", - "amount": "5163000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pdracc6yfmdfymy5g0kcfs3rgv3nxn322f8qw0", - "coins": [ - { - "denom": "uatom", - "amount": "572440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pe9um64z55xr0m9kqqkg25k6sfdx5agfyvsduc", - "coins": [ - { - "denom": "uatom", - "amount": "881000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1peq96jqmp9anxft7plu9qp4cpz4yr2k2zc28kk", - "coins": [ - { - "denom": "uatom", - "amount": "11624530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pexrxk6s9aznl8ap2g8jr87ktc3a7dd8ramv8p", - "coins": [ - { - "denom": "uatom", - "amount": "499296240000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pgnnyps08ul0t88sys4ujxj9p3ynkpu2dcdxpa", - "coins": [ - { - "denom": "uatom", - "amount": "11043940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ph3gaf93e5gqrkhp03lzsda480ns0gtlpkzfqp", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pj9e89gc8dkvv72wh5qdsxwrnwzev8tv8h9x3r", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pjmngrwcsatsuyy8m3qrunaun67sr9x78qhlvr", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pjyl4u9wa6kd0uf6rd3v8t24thce07xds5hjs6", - "coins": [ - { - "denom": "uatom", - "amount": "45220000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pmftv9ww3lxsjthrg6jx6ufy0fnr3ktsdupder", - "coins": [ - { - "denom": "uatom", - "amount": "510194000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pqcmhfe2w2nfxrnewytvftmxdvyx4qyrmcmjjh", - "coins": [ - { - "denom": "uatom", - "amount": "14383000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pqn5dkf40pl076j6nlyjxpwugy70fys9u84qn8", - "coins": [ - { - "denom": "uatom", - "amount": "1431990000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ps7dmygt4wm72t8l9kdjetelhggsv8w7m0ezaz", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1psrctylgxcljnznqadmadcer9cww2dwcw7da4x", - "coins": [ - { - "denom": "uatom", - "amount": "6060000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pthu4mfl387qmuw78p4mf3q2e53cfhntjr9jk3", - "coins": [ - { - "denom": "uatom", - "amount": "22609000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ptvxv7mrc2j3d838dqzex6y79muyemgfasdwzg", - "coins": [ - { - "denom": "uatom", - "amount": "18601960000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pun5csgup6utufjcnamcasdksn07sj7pfr23v0", - "coins": [ - { - "denom": "uatom", - "amount": "3618000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1punelxh7ddptn3l7y66ap7jkma7wwucktuky69", - "coins": [ - { - "denom": "uatom", - "amount": "81490190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1py8pz0eqh9jj99dxtxg4tw72hta7j3laks0rys", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pyjq68qvtjknvya00w5lthmpax2rv49veqp5ec", - "coins": [ - { - "denom": "uatom", - "amount": "113073000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pywfvze6804ex9fqn76esgngg8pln2rqmdnncp", - "coins": [ - { - "denom": "uatom", - "amount": "16578250000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pz6yu5vdxfzw85cn6d7rp52me4lu8khx7lpkzd", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1pzvc7f2kyyu308ymmccyjc0qk8rev04rz4ef4t", - "coins": [ - { - "denom": "uatom", - "amount": "984810000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q0856f9c8wap7a9lgc7a8f8zpe8qp9ltqw4uda", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q2whngssgsaar9hepyneca25f8du3qpvd7wvk6", - "coins": [ - { - "denom": "uatom", - "amount": "608648960000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q4jlqdxsd2r0ch9k8e5m0wt0r2lgyjq8s72auf", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q7fqlrrds6dsnz3qgrar9ewfx70cpd6a48qksm", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q7rlfnh2kv8d3cf6jfn857434tmdyax3dkktm5", - "coins": [ - { - "denom": "uatom", - "amount": "20353000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q8zznpjplw28lyl9a4nkelywx2dsc5c6k7zl0y", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1q9jn2rmzvylgd3m7pevnltw25l2na3ym88ktcp", - "coins": [ - { - "denom": "uatom", - "amount": "31770070000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qcgc3qddheqtwapjux77g65zl95mwfdrdxqe8k", - "coins": [ - { - "denom": "uatom", - "amount": "312087000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qd432aem98lvzpjcq78gvzqputgcs0906tltef", - "coins": [ - { - "denom": "uatom", - "amount": "40010000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qfeq0du5mul8xeru8kzrsr9k3dhdcaw5cruy7a", - "coins": [ - { - "denom": "uatom", - "amount": "10000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qhq9k9nze2qj2ssgcqvn2p9dss8gde74dwgv3y", - "coins": [ - { - "denom": "uatom", - "amount": "2108260000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qhutftnqgkgct4gwwugf2flpk5xqhw37zxvw6j", - "coins": [ - { - "denom": "uatom", - "amount": "2974760000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qk93t4j0yyzgqgt6k5qf8deh8fq6smpn3ntu3x", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qltk6ax7knwm2w35heldnh2ac50mwvjucdn3r3", - "coins": [ - { - "denom": "uatom", - "amount": "38445000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qmrcjzskgtlwmfs9pqdrfpmp5l5c8p5r3y3e9t", - "coins": [ - { - "denom": "uatom", - "amount": "127974530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qnjpy999uhmvn99ql45206gxed7j0fz5k33gmv", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qp7mt75j9g3vtq238gkytjc70zpzkz783hhyl2", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qp8danhdx66c9mhnlmsfk9zj45e0yju82r5a7h", - "coins": [ - { - "denom": "uatom", - "amount": "1134000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qq2c4klc6q3cu6nay4y08kxpxz7lx6w22f9vfe", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qqp837a4kvtgplm6uqhdge0zzu6efqgujllfst", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qr37tv743eeagr97qzdy2p26m5gfh34upgx2gk", - "coins": [ - { - "denom": "uatom", - "amount": "271380000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qr5dttjyacpzv9jadtljxumqfxt3n2xz24nlm2", - "coins": [ - { - "denom": "uatom", - "amount": "7088040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qs5jvg0y038dclggauk680ew3dzzjfatkzy4u2", - "coins": [ - { - "denom": "uatom", - "amount": "100775000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qs8tnw2t8l6amtzvdemnnsq9dzk0ag0z37gh3h", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1qtg904z3ewk64dqrurwfy3z5ml2yy7lfntuwlz", - "coins": [ - { - "denom": "uatom", - "amount": "1696000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qus2wghpxqqjmeez9reepxp0f4cpeay446c74c", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1quzyy8gg59p9epvrlp3ac26y7vmu8snxatlw92", - "coins": [ - { - "denom": "uatom", - "amount": "64226000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qv5u4lpujwzyk5t5dp7plm0vceke4680zdaxad", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qw4wqnpa6dg4lhx37l66zpk9ahxege2jgfrhsl", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qwl879nx9t6kef4supyazayf7vjhennyjqwjgr", - "coins": [ - { - "denom": "uatom", - "amount": "55000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qx2r2hfs6d5pmqrv5ysgpg6ekjy052ucv2hl2q", - "coins": [ - { - "denom": "uatom", - "amount": "4954680000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qx7e97ucf9lgxuymvnrgvgveh35hkls5w0jl5r", - "coins": [ - { - "denom": "uatom", - "amount": "5220380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qy54a0n0qca3mc20ahcazg0fvq7td9sz2nzrx4", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qz9k9tyz5yar7lpwmwashscs9ug3muwpgrlrj0", - "coins": [ - { - "denom": "uatom", - "amount": "17442030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1qzny67usplncefpwpy29pa34vjasw76t2rlwhz", - "coins": [ - { - "denom": "uatom", - "amount": "56537000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1r3xvguuhwvlk34esxclvrh3g7ycmcqqc2kcn9v", - "coins": [ - { - "denom": "uatom", - "amount": "1005010000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1r69aysu2evn03y8cmmj4hjpjy76yvx4l0nhxm3", - "coins": [ - { - "denom": "uatom", - "amount": "54276000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1r8kyvg4me2upnvlk26n2ay0zd5t4jktncnrz2j", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1r99ewt8lfm8ukqy9l5mnwzahklcc9sr7hpx49n", - "coins": [ - { - "denom": "uatom", - "amount": "19167000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1racgy2z2rn20gsllpudhehnrxsvkfh5ekums9m", - "coins": [ - { - "denom": "uatom", - "amount": "90000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rcp29q3hpd246n6qak7jluqep4v006cd4v7r6v", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rd03uq9lgw0pzq7j6fe48pf5gwxqmkv2dwmtqw", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rfpar0qx3umnhu0f6wjp4hvnr3x6u538qdmsep", - "coins": [ - { - "denom": "uatom", - "amount": "243860290000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rg5k9w2yfe44nxh9vzvnta7mmkhp5cxmyu6ye8", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rghlnnl4kx0773sjvglt69az6qp0n8yfnf0kv9", - "coins": [ - { - "denom": "uatom", - "amount": "5798880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rjptzea522cy83xkxk7rqrdtdr4n9j570kjetd", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rkf3ppe369h4lhkpsezxy8d4tjtk3xkd8frmcm", - "coins": [ - { - "denom": "uatom", - "amount": "1402000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rlw94njeqhtqd2hq90stlfzd7s37am0f6nqamy", - "coins": [ - { - "denom": "uatom", - "amount": "271380000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rn7nwwys7823d79pguzg2y0hu94e83d5chllg7", - "coins": [ - { - "denom": "uatom", - "amount": "27590000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rpgtz9pskr5geavkjz02caqmeep7cwwpf29g2p", - "coins": [ - { - "denom": "uatom", - "amount": "1163490690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rqq5xpqnlsrjthylt3slqceeae9uqds86ra8rr", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rrn636u3vc3qvuu9lyg8eef7yqemn2t6ytuk3t", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rwh0cxa72d3yle3r4l8gd7vyphrmjy2kydpnje", - "coins": [ - { - "denom": "uatom", - "amount": "203535000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rwy66drn0kqxy55g9f25at895twg83tpxhs8nq", - "coins": [ - { - "denom": "uatom", - "amount": "2201340000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1rzwuwnwnwu7j8qtw2c8qynygfluzlz5he634v3", - "coins": [ - { - "denom": "uatom", - "amount": "3975257000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s05va5d09xlq3et8mapsesqh6r5lqy7mnr69mg", - "coins": [ - { - "denom": "uatom", - "amount": "19770190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s0aywgc6rucfscng07fnw0fj836mhz6m8rvxdt", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s0pwsadgef938vydcjt054udf9npjm6nhsaqt8", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1s24ht39ea9pquwa2ry3zwd4ahlq5zlj5pgakzr", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s2husgn2kge2tzzghjjs64cq6y3td6nz3n97ew", - "coins": [ - { - "denom": "uatom", - "amount": "20351940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s33lvg063nt89wfwzfr39enhukz0f5nzq43hwd", - "coins": [ - { - "denom": "uatom", - "amount": "610821350000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s65zmn32zugl57ysj47s7vmfcek0rtd7jd2mp2", - "coins": [ - { - "denom": "uatom", - "amount": "3000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6fa7qfsddlgyjvyp34c8ess04knzsvc5dxu0x", - "coins": [ - { - "denom": "uatom", - "amount": "93070690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6g7nh629lkgz4merqa2fs4dmz3mt3k4eqa0xp", - "coins": [ - { - "denom": "uatom", - "amount": "44552740000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6mjam9nzl0wrm4n4hdalhafzqf6mj92q3htvx", - "coins": [ - { - "denom": "uatom", - "amount": "8839410000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6t3wzx6mcv3pjg5fp2ddzplm3gj4pg6g996zm", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s6x9fy4wc49wj9jx4jv6czredqsmp46hmc8rxn", - "coins": [ - { - "denom": "uatom", - "amount": "203539000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s7jnk7t6yqzensdgpvkvkag022udk8429exc87", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s7lvr6csak9w727z0kqs49rk3c9scvxmspflvz", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s7nxav9fmfd0ssygpwjgcg8w9wngauhrk5c77d", - "coins": [ - { - "denom": "uatom", - "amount": "105295000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1s8l4s0yzael6l0nah84epxh5yz5cf76u89ytdw", - "coins": [ - { - "denom": "uatom", - "amount": "2899440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sawg4pzgggemd7c8r2clqnxvad9wn4zgwrpsen", - "coins": [ - { - "denom": "uatom", - "amount": "13569000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sc5tqjr3nj9tag26esellrq5lv8hkjcpuj959g", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sdf80g92at333j0r3hfh3ksuqgpg4f07y22d88", - "coins": [ - { - "denom": "uatom", - "amount": "69791380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1senvv2u54yrsvkq9yx6hcyuvztnxrsvkuzdenh", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sf3c52je20nlsjdv52e0z5lazhq0qfdwpxyjln", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sg3fl5xfzws0qy9vumwxjmh39etytarm03jh88", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sgfw5kye6gt3rd54l9tad35sretmerqd08u7t3", - "coins": [ - { - "denom": "uatom", - "amount": "11637330000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1shnytr97ayetf0jnfagzevg6eukxrt387dsz0w", - "coins": [ - { - "denom": "uatom", - "amount": "440992000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sjllsnramtg3ewxqwwrwjxfgc4n4ef9u0tvx7u", - "coins": [ - { - "denom": "uatom", - "amount": "20000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sjnp34784gv5umtzh738vzges7rd5w7pzeq82t", - "coins": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "14750000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1skv2quty6zavcqfrnq746ll2pmyvj2739yy4gp", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1sm0huqu76wjug6cwkf3szft00v9v7jmgthlcqz", - "coins": [ - { - "denom": "uatom", - "amount": "284949000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1snkhgrjm7psup3stcls2w05zagkdgznjuyy6kj", - "coins": [ - { - "denom": "uatom", - "amount": "255960690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ss2mv7my5wfnu44dlf6l6twvwa7as02ex9338k", - "coins": [ - { - "denom": "uatom", - "amount": "477724170000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ssm0d433seakyak8kcf93yefhknjleed4psy4g", - "coins": [ - { - "denom": "uatom", - "amount": "1000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "1000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1st2m8wtzue48np8s23dde9l4k48ysxq6q2u38y", - "coins": [ - { - "denom": "uatom", - "amount": "134887040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1stdsvfck3f57sket7ctgu2t7ttv8fryd8prxa9", - "coins": [ - { - "denom": "uatom", - "amount": "17675890000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1stgjr5njfle7l7n6dfz7mp57qlh7szaa8fuksl", - "coins": [ - { - "denom": "uatom", - "amount": "21258000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1stzck6a0k43pl9ejnk5tr43w608sxrmasfnz3t", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sxt8m2p2utvk6l4eujw9stw4v66vg6etr4dqq7", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1sxx9mszve0gaedz5ld7qdkjkfv8z992arw3rr5", - "coins": [ - { - "denom": "uatom", - "amount": "15000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1synyl86cpvgdulaema06q0fpgyyl6dhfqflgly", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t089vcqvwj8zjvjsgcs6536d2mnrsy35kdzdpq", - "coins": [ - { - "denom": "uatom", - "amount": "40254000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t2l9gzea970hv6t76yplde6p5hy439uyajnkl4", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t3k2fuwz3st27dhdxylp9l2wkuwyhwupsvg58h", - "coins": [ - { - "denom": "uatom", - "amount": "2783090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t4474v5qw68n0aqepvv604vv2pya7cawg04arf", - "coins": [ - { - "denom": "uatom", - "amount": "633000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t4d3puws6ekq3ea04hvl7xezktwm9vsdj6y2xx", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t4vumykc5a6pqh9ccx9p3s97jkdnwgs86ncp0w", - "coins": [ - { - "denom": "uatom", - "amount": "500017000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t5yzs5976z4jt4pqw6fugdavduplj3u0l6ur8u", - "coins": [ - { - "denom": "uatom", - "amount": "8716940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t65vwu5cfm2hkg0dypfum3yqvra7nl4k9fv4ph", - "coins": [ - { - "denom": "uatom", - "amount": "1081000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t6sa50ndrz86n5capmykgulq2sdjjnx4r2exsa", - "coins": [ - { - "denom": "uatom", - "amount": "9498000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1t8axgkx2gr823z2yqw0k7plp9w5juse0glfg26", - "coins": [ - { - "denom": "uatom", - "amount": "349492000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ta4h8d3nmf26jnmterl9a0m3xjvfdl48aqhjwg", - "coins": [ - { - "denom": "uatom", - "amount": "23609740000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tafzj3shqtft48t76pr6zmf4a90qh898fc5sqd", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tamutt3kjme06pz37jgm2x6rnrkhn0drz3dh92", - "coins": [ - { - "denom": "uatom", - "amount": "7236000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tdzsht8v3q5jnl2w7shq95ftlnqw7ny3a9c4mj", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tf9s77gwa8ad9xu3spxu2lw9v0ax88g2fe5ksn", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tfu7cuvzqnfw5tkk2mvl9vufah3tckw90s6zhl", - "coins": [ - { - "denom": "uatom", - "amount": "4985210000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1th5psrspfm9sam0k0d2tvsg4gkufccm9tzpr3g", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1th5r9ln0w7mcfcf4dst20qq3spyqqamerruc6x", - "coins": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "11000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1tj7hxdkt02ueu7qu3gr9djnslduv4pqzeq7d8f", - "coins": [ - { - "denom": "uatom", - "amount": "1895000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tj8llq623cux08lu6cpw5nqfrrmhj2khgl0p4u", - "coins": [ - { - "denom": "uatom", - "amount": "1149450000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tk22p4e2uvce5y4m5swvc3ll70xenrt8x0sf37", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tk45julzpkclj3ff7khx368f2fph0lrk3gstj0", - "coins": [ - { - "denom": "uatom", - "amount": "5807030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tlmk432tny2aca5hjunkyqpx4mulunj293u290", - "coins": [ - { - "denom": "uatom", - "amount": "5105000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tlrwaqseh9rkwv0hswseu859w5uca3ve32ehnf", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tlsky8ega2e0xvnzl0j6hsmch7ygz22qq250e2", - "coins": [ - { - "denom": "uatom", - "amount": "452300000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tm7ju9fa42e2lwszpcasshgx39arftpqrjxewx", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tml59gl7qflpaju52mtemexw0ss0q0fnnze0ag", - "coins": [ - { - "denom": "uatom", - "amount": "50011880000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tphkrxqtm7j9pqzvdklnapc9jqp3l5yn78nagm", - "coins": [ - { - "denom": "uatom", - "amount": "2493000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tpnyr6y9ayn3kte0pum2cj8mhl0dk2uv73qadn", - "coins": [ - { - "denom": "uatom", - "amount": "308440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tr5var87ga3fyy9d0r76uurpmkfm05rg52jg5q", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1trqsnq9jkugpslstnf0y3rpl0qwzs0zfp46fr2", - "coins": [ - { - "denom": "uatom", - "amount": "432820000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1trtdsqckllr0lyszm0c0v4rz8qxjhjvhjwaphv", - "coins": [ - { - "denom": "uatom", - "amount": "4514000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ttj5h6n4kpmhda8m08qeugppzglf33z6y2h7k0", - "coins": [ - { - "denom": "uatom", - "amount": "8593000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tumrwcmgtz8sj7yvux457cwv95g4n4wz9ykdpk", - "coins": [ - { - "denom": "uatom", - "amount": "497077000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tvqhaznwr8vc8e746esugcet4sk6p5ptaf8yut", - "coins": [ - { - "denom": "uatom", - "amount": "34890150000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1txqn8qm8cj3964j28guffxlcpcrydcpce5v80e", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1txugpka5zzffaau7hlqqgxye2qk4ekyzkl0t3m", - "coins": [ - { - "denom": "uatom", - "amount": "8500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "8500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1tysr6zanywwwqq2t23ajvu3qv6vfluz7fpayw6", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tysu7n60waa24lsr5t6qpn5qs59tpqgh094jlf", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1tzkmqgpwtv24xjjwjrp005z96jptrlv3gpu7l9", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u2w2c7qj6p2xellxmqd6gllc8ly6dcunvgw7r9", - "coins": [ - { - "denom": "uatom", - "amount": "2899440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u3vw6awaxhrhzg8t2f2tqgscuej2rl99e63mm7", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u60synv0qpup9jr0nmlzwgpan3gvaw6w3g9zfr", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u6ddcsjueax884l3tfrs66497c7g86skk24gr0", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u6f8zgdrvyj793ahpzgnz69uxl9say23xuhh9q", - "coins": [ - { - "denom": "uatom", - "amount": "113075000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1u9km7tuma5w9tg4lpz0zw97jy7n6ey9p9z7kxg", - "coins": [ - { - "denom": "uatom", - "amount": "5807030000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uafmj8ygu0m8hec0e30uztk005x4mjyu7lu4hw", - "coins": [ - { - "denom": "uatom", - "amount": "95427000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uan2eh7lqapfjj8aze84lgc72skvtle9dk4gmz", - "coins": [ - { - "denom": "uatom", - "amount": "46530690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1udqmh9zttxerhht8m9cf0xpntyqdmjafdq3y2l", - "coins": [ - { - "denom": "uatom", - "amount": "136110000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uevc8wcnzq29ma0apnmanwaun7ulerj8x7n8a5", - "coins": [ - { - "denom": "uatom", - "amount": "4620260000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ufs8s3ttfy99m8fns6mf5uk7rumwkufwq59kjg", - "coins": [ - { - "denom": "uatom", - "amount": "22388000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ug4p9pyeqnfd2kvtvgl5ulu2h7k428sywsvrra", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ug6gutaanays5x2yglxwdth205n4auu6k3jj3c", - "coins": [ - { - "denom": "uatom", - "amount": "119243620000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uhnsxv6m83jj3328mhrql7yax3nge5svxcw7kt", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ujqvs49hfldegaygjhsu3zc6g2n5vpwleg6uh0", - "coins": [ - { - "denom": "uatom", - "amount": "4644690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uketaldk42ddqk5l476r5n52005thvuqsjaxvv", - "coins": [ - { - "denom": "uatom", - "amount": "59090830000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ul2me6vukg2vac2p6ltxmqlaa7jywdgtz5203m", - "coins": [ - { - "denom": "uatom", - "amount": "1020388000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1umc5pztqz8qrnjrvlkaka0esasgcwdem5hl6mj", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1unc788q8md2jymsns24eyhua58palg5kc7cstv", - "coins": [ - { - "denom": "uatom", - "amount": "6083156550000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1upa3etjxpjr2j39p7h2fpxs02mlkuwkk58uhtg", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1upxh3pgpvfs43jav04e5st8p5htyyff6ejv6cs", - "coins": [ - { - "denom": "uatom", - "amount": "104705690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ur3fagntpk0fq8jk37pz9sdzqky6527gk7uphg", - "coins": [ - { - "denom": "uatom", - "amount": "232687540000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1urde3ce4xxvg79fav0aarquhdvavy2dlmwn49l", - "coins": [ - { - "denom": "uatom", - "amount": "81414000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1urtpxwfuu8k57aqt0h5zhsvmjt4m2mmdxmxfwm", - "coins": [ - { - "denom": "uatom", - "amount": "12680290000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uv26ytrnmydyctq0s58ve2k6wn2p653m9yn69g", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uwdfjpacp89yv66h995klvmyw25s0kx3zuqx2w", - "coins": [ - { - "denom": "uatom", - "amount": "1130000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uwgts6wgmqj2l702dkd5kc8c429ntr26fzzc8h", - "coins": [ - { - "denom": "uatom", - "amount": "3316910000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uwvxkzvcy4p2t5aq07dzkyze2p3e2rkg8w03jj", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ux99fvzsve0dzfrjj3p8nwemjkph3xutjufk67", - "coins": [ - { - "denom": "uatom", - "amount": "2260000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uxh465053nq3at4dn0jywgwq3s9sme3lc9ek2f", - "coins": [ - { - "denom": "uatom", - "amount": "15378000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uxs50xa9s0fcqjhkuyhn52qng5pjl07nkhse58", - "coins": [ - { - "denom": "uatom", - "amount": "147860000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uyvpffp3skd84s7jfcnlwpjfp8g32luxpl27jw", - "coins": [ - { - "denom": "uatom", - "amount": "818000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1uz4wtx83k6vaj666tnc7jg6hd3gmgsd962qst9", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1v0zu2hd2z2tr7q3gdrqw9jdh84tp407wdeluu3", - "coins": [ - { - "denom": "uatom", - "amount": "10855000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1v5s04rfryjd2606q3deauz4jlar3p4vcddzgjq", - "coins": [ - { - "denom": "uatom", - "amount": "34890960000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1v60nl7wzelzush0c0vqata60pjffc0rxe7xkfj", - "coins": [ - { - "denom": "uatom", - "amount": "5879000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1v864d3j7gagyud93a5ywnzk30mhm5ud4gf0l0c", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1val86306r2s4pdvax0nfs44u8vv6f08eekc8mv", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vam7f3edpkgn8nh8zxdvf47lwhgem0qqu4n36u", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vcqgjz8dgu4n28rr7yw74dzjcjhaesep0kyrtr", - "coins": [ - { - "denom": "uatom", - "amount": "512573800000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vgd0w955mvvgluhhywewz6g04nyfdkf2mnp7r0", - "coins": [ - { - "denom": "uatom", - "amount": "17443190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vjhuhye9eq389298vm0guya0n28z7xerte6pyq", - "coins": [ - { - "denom": "uatom", - "amount": "12077690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vjqault583hwktfj63k2hh7r02sj2a66v0chv3", - "coins": [ - { - "denom": "uatom", - "amount": "2261500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vjrx0lks65yefnsz4xk92vugda2z25esym5ypp", - "coins": [ - { - "denom": "uatom", - "amount": "639915690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vjsrfv693ng3f7jafduqdljmh6ynunwgsl4j8w", - "coins": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1vjz9ddg0dppsrkk73wuc4qjuqpkj8647zfkgd7", - "coins": [ - { - "denom": "uatom", - "amount": "6106000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vk6n2u902vd3keafeanppp6rgj5apdz89yu6rk", - "coins": [ - { - "denom": "uatom", - "amount": "13848000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vmex3mcg43fcp7skpqg3s4ucuq5xwh4q597xkm", - "coins": [ - { - "denom": "uatom", - "amount": "45139000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vp8w0ayytg5hkqwafggn8sg7m86dylc5hm3vv2", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vpwnq5sfxwgl94tmxvshjvwmgcnl3yku484pxm", - "coins": [ - { - "denom": "uatom", - "amount": "3825000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vrl8z2t4sh28l052zw09x5f6yuxuaqnz5ngx5c", - "coins": [ - { - "denom": "uatom", - "amount": "678000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vrlt99wgwwdpukhu9nf5yaps0yc4khqn33uktr", - "coins": [ - { - "denom": "uatom", - "amount": "1130750000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vsa3xfa4w46ysvvm5a4qtpsuev9f38k6r9agnj", - "coins": [ - { - "denom": "uatom", - "amount": "4062940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vsw4244aesg3u2ekygxtkmhv6v09ja24wszz06", - "coins": [ - { - "denom": "uatom", - "amount": "996420000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vt9n9ccueagv5ye6pdenfteseuctchut89cfzt", - "coins": [ - { - "denom": "uatom", - "amount": "452000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vu5uw0447u6d7a8cntnlyn5d45qqh2xdpvs240", - "coins": [ - { - "denom": "uatom", - "amount": "7981610000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vudtpjyplxrau4822u4uu9kfkavdfxg4gzms7a", - "coins": [ - { - "denom": "uatom", - "amount": "18092000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vusvp7jl4qkrg8ump6lppknv9vjd6ynhvvzdag", - "coins": [ - { - "denom": "uatom", - "amount": "21242140000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vuxqxymmpa2csgv4sdz9uw2ctxmxhp6txvalgl", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vvc7x8zv8tpqtuwyt0e2ct938r3yjwp5px6dd2", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vwcjdfgz8fqweapnzmwqutzntxuxdqslza6kzl", - "coins": [ - { - "denom": "uatom", - "amount": "666666670000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vwedycp8u53pywr7q03rzsrtc3jr9nzvj9nfhg", - "coins": [ - { - "denom": "uatom", - "amount": "151245690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vwtv6ryr49usqxckhd8awk4yl6ghhfkcjzag4r", - "coins": [ - { - "denom": "uatom", - "amount": "135690000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vxh2hsg7qmnljw23t4u4nfmdfp60kfhlletcw6", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vxkye0mpdtjhzrc6va5lcnxnuaa7m64khj8klc", - "coins": [ - { - "denom": "uatom", - "amount": "1266440000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vxn96csepjh44zn9994zjr5m2yvlhz00v2m0ee", - "coins": [ - { - "denom": "uatom", - "amount": "10428450000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vymppkgus2ez4xy0xuuh82sehc9vz85htjfr8l", - "coins": [ - { - "denom": "uatom", - "amount": "471975000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1vzj0lluc43k64gagvy9wsygh33dk84h07a3rsu", - "coins": [ - { - "denom": "uatom", - "amount": "393486390000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w0494h0l4mneaq7ajkrcjvn73m2n04l8mx7xuc", - "coins": [ - { - "denom": "uatom", - "amount": "110523190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w0wd6wqg5h05ma2jlnn8vpgmgylkwlj04xn4kh", - "coins": [ - { - "denom": "uatom", - "amount": "22615000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w2dnvs7ea7xh0z8mda4s8a5rrw2jtxmwgw9xs0", - "coins": [ - { - "denom": "uatom", - "amount": "10113140000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w42lm7zv55jrh5ggpecg0v643qeatfkdqf5ua6", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w4w5zkxs6yvqc2qrvfyzpgdew7weupzlmdwat8", - "coins": [ - { - "denom": "uatom", - "amount": "1154190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w4yjwj3xkfhxpmleen09r43a8x5flple06f24q", - "coins": [ - { - "denom": "uatom", - "amount": "8716940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w5cun0sk4h9qznqvp9n04jr5gtryt585jhpg97", - "coins": [ - { - "denom": "uatom", - "amount": "94000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1w7r7juymfdfk5gwjrn4m9ed8c6t7z0mv2j2tdj", - "coins": [ - { - "denom": "uatom", - "amount": "500298570000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wak4cqy6xe0e7qg48awmrx6hy2pcakpel6lvm7", - "coins": [ - { - "denom": "uatom", - "amount": "1141647140000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wctg56a2sry7y0s0q9hrps94pydpp3s6dc40z7", - "coins": [ - { - "denom": "uatom", - "amount": "250442210000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wdl73a63fpazz2yu5kt2043ttssssdwwuh5xgj", - "coins": [ - { - "denom": "uatom", - "amount": "45682000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1we6knm8qartmmh2r0qfpsz6pq0s7emv3um0vsa", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wejum9vngzlpaxjpa70f9w4jrs5rscx8cm7j2n", - "coins": [ - { - "denom": "uatom", - "amount": "69800690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wf3sncgk7s2ykamrhy4etf09y94rrrg43cdad7", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wg4hsxrhxzh5zc7d6nh0rydlchtjqpe6jls03w", - "coins": [ - { - "denom": "uatom", - "amount": "40707000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wgxc064ufumuk4d0yeg88t35lu36shey0m236y", - "coins": [ - { - "denom": "uatom", - "amount": "58165690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wk30uz6drwuz7vkjrml5jthn0c0m3yhdqruu6t", - "coins": [ - { - "denom": "uatom", - "amount": "35225000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wl34gmc5taa5h8dcr8rs3cmjdu7h0cy5cm2e39", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wqyzk3w0u50jr8c4ywdjrc7zc7rasdgmuhjtse", - "coins": [ - { - "denom": "uatom", - "amount": "823869600000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ws4uldqhet3td5mvn8p67f2m4dc9hd0gg6mr7f", - "coins": [ - { - "denom": "uatom", - "amount": "45348580000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wtv0kp6ydt03edd8kyr5arr4f3yc52vp5g7na0", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wv22tswlg3ll44zv33qvtktlra3dzf2q2tp6sa", - "coins": [ - { - "denom": "uatom", - "amount": "13481470000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wvyvy6xjcsmc7z7dxafsahyh8vzkx9cmknw42r", - "coins": [ - { - "denom": "uatom", - "amount": "235816600000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wxwt28758hs0efju99y7h74gkr4p9nn5yps04y", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wy5wm52aetuz0zlsgczducvat4rt3klmenddnd", - "coins": [ - { - "denom": "uatom", - "amount": "27137000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1wz5hhslzj2zh7jspspyzs80l5tc72t9crw89z3", - "coins": [ - { - "denom": "uatom", - "amount": "6784000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x2eu920g3j8lr7uk3j36mlx3wgr94y5w9urw8s", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x3aysmuw5aay9cwfpchacnhh9kqazec8uc0alv", - "coins": [ - { - "denom": "uatom", - "amount": "8000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "8000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1x44ehmsaf8tpw6jsexxhgp04zg2fmz8v05x4yz", - "coins": [ - { - "denom": "uatom", - "amount": "1377580000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x53k8gwzy9nvrsrlf4pxhl76wy9efmhhrqqdgn", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x87epck7c83fhmpwfpr0cwd9ytptlp87r6shvj", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x88j7vp2xnw3zec8ur3g4waxycyz7m0mcreeaj", - "coins": [ - { - "denom": "uatom", - "amount": "271380000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x932mup5wtkrgmmrve4d93q2r2gvywe8gz02qa", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1x9au3m6xwp6u3wrvl64jrxd9tdq5mwk86f0vf3", - "coins": [ - { - "denom": "uatom", - "amount": "34893360000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xd8mwh3gjwqmpzsh2gu64j9vqdl2qz7v5kq99u", - "coins": [ - { - "denom": "uatom", - "amount": "11759000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xdq8z0f04857d585pt5qusu0vah4akghq06fw6", - "coins": [ - { - "denom": "uatom", - "amount": "11624000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xgfc763f5mt3283ahu7ajjhks8vtg2nhsv3xfs", - "coins": [ - { - "denom": "uatom", - "amount": "10000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "10000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1xkaurjjuyskmwlss9dpdd44vuf3j4agv64y94y", - "coins": [ - { - "denom": "uatom", - "amount": "499242540000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xkr952sj2f4xnhcq785w0ujj5yj5s50wfj9tvc", - "coins": [ - { - "denom": "uatom", - "amount": "34895690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xl6453f6q6dv5770c9ue6hspdc0vxfuqtudkhz", - "coins": [ - { - "denom": "uatom", - "amount": "116340690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xlql2yz8jw96c66m693pldzhqw36hzeq88urh0", - "coins": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "110000000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1xn58cd3dth3sjtsukm8j4tar2yverjk9nkrzfw", - "coins": [ - { - "denom": "uatom", - "amount": "11594390000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xnh9rtnq2fwhkrjvak93346a30kmatk0lpzqp8", - "coins": [ - { - "denom": "uatom", - "amount": "9051120000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xppn98w0gg6wl0q2g2nasmkqlf2elwpkl7fc5y", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xtd2tgzj8tkeduj7fne64rwc6rs40x8m95rv6l", - "coins": [ - { - "denom": "uatom", - "amount": "1809000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xu5c29muv8dxk63ya6h3xfqhqnzrxdqpmc0kmp", - "coins": [ - { - "denom": "uatom", - "amount": "2713000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xum25ncl3svu8sptzqkr45gkrmd8jr7ksdmz0q", - "coins": [ - { - "denom": "uatom", - "amount": "101617000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xx3aqk6cel64jr5cmz8am4asyrffgyp6cpu64z", - "coins": [ - { - "denom": "uatom", - "amount": "11397000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xxpgxrhf7wtc462zpx7f57umcm45fnqj4334q0", - "coins": [ - { - "denom": "uatom", - "amount": "219817000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xxwvuvjvwzm60y5d79ju4aez2ullwxuw6qy3ps", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1xz0n6fp570p23txzs0kex79tjhtymsghlwtzjf", - "coins": [ - { - "denom": "uatom", - "amount": "232690690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y0neqnxfpdekxkhegkgvztzckq8rhyumx83k6t", - "coins": [ - { - "denom": "uatom", - "amount": "98888190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y2q70f9jmdj8857nwz02xa7zyjd7a33v3eqlu7", - "coins": [ - { - "denom": "uatom", - "amount": "30584000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y32l54dp5huuv7mx8t7xefpe4vy3gqa77uj4yh", - "coins": [ - { - "denom": "uatom", - "amount": "180920000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y4jjwr9d4w0dg8wve6fn9wfgrgr3armjv2d3p2", - "coins": [ - { - "denom": "uatom", - "amount": "257217270000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y5v9twn4pypaudmhkf4p0hzsl4plgvgyvkagmv", - "coins": [ - { - "denom": "uatom", - "amount": "1333333330000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y5y7tutmzwuplxt63pw5s5weafl9vjvkecw4ed", - "coins": [ - { - "denom": "uatom", - "amount": "5556530000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y740a2v76mlnydq0kez9vvfh3s3xhw84spxey8", - "coins": [ - { - "denom": "uatom", - "amount": "2311870000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y7arffhms3jhh955a647fvdst375fmfl655438", - "coins": [ - { - "denom": "uatom", - "amount": "13921240000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y8h0gzrdhfc3ptluavpq3v74vj9dg8478x9632", - "coins": [ - { - "denom": "uatom", - "amount": "66940000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1y9yu4vvxshxqzy904qgscvlvph5xh5ksmnp77n", - "coins": [ - { - "denom": "uatom", - "amount": "11614060000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yahqdasye5d79uqyq6rdk8q2vtrq24w6pjuuny", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yazk9957eem97zcy3hq9aqjexnh3vy2khfjz5c", - "coins": [ - { - "denom": "uatom", - "amount": "232681380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yc3sw5kj867csny2t23py8j6c2ne2n3xpl7935", - "coins": [ - { - "denom": "uatom", - "amount": "35361090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ycf7umr5vj9qmhgvpwy5r9vv564fdcgxnyc8n2", - "coins": [ - { - "denom": "uatom", - "amount": "1130000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yct7yameeejv8ljy959vy4v5ywl93ataasfdks", - "coins": [ - { - "denom": "uatom", - "amount": "90000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ydesvs9m0aqg8gsfcwc2f6dfya2xar6crf65zw", - "coins": [ - { - "denom": "uatom", - "amount": "3172430000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ydewfzrdlx83qcl5xzta2x04duru8vgc39e97g", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ydsqs2p3r529rrp5rpsn54flv7lygw28kq43ku", - "coins": [ - { - "denom": "uatom", - "amount": "2668000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yef6dalq4amrrlaumd9uy4jq2j6ym8xjrplmp4", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yenask6kcrdkadhnwhterzj5agsmd3qp9ns2lx", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yfjealyy4svdsktws79nk2rrk0xtnfwjff2s33", - "coins": [ - { - "denom": "uatom", - "amount": "5317190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yglfznjlrdwq3n2wtsf0m2ekrjmvg0hylkh79d", - "coins": [ - { - "denom": "uatom", - "amount": "93070690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yh8gzq85gculfv4pq6h7dyjxjy4ljdep6vpysn", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yjp9yeqkcjzhucc2vwghq3nzwtv56f5y05xg2d", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yju626npdhx6lyfk80p0jmkk3rp0veldafnl9p", - "coins": [ - { - "denom": "uatom", - "amount": "598495090000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yl6l479x8sxg4naf0uxlta6tutk3qt7glarpmk", - "coins": [ - { - "denom": "uatom", - "amount": "34630190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ylz6tqpgz0flpl6h5szmj6mmzyr598rqe3908y", - "coins": [ - { - "denom": "uatom", - "amount": "5000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ymq7v8rqu2c4tmljrp6rtuyqtd9tgcza8r7ug0", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yng9j50r23j4nvmqdg6tyjmk4clnrq9d8yyqzw", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ypca4duq4atmfde35cpf9hzd8aa3nputvlrfxz", - "coins": [ - { - "denom": "uatom", - "amount": "337410000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yq579wvfak45g3mdvrj2a4pmsmmejwew33ggak", - "coins": [ - { - "denom": "uatom", - "amount": "4499000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yrt3mu0ryc3425tcvytfqvadvdq675wjma8td5", - "coins": [ - { - "denom": "uatom", - "amount": "45230000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ytef32w0uaz3z0vgkvp3rqslxtnlt9453rxr5l", - "coins": [ - { - "denom": "uatom", - "amount": "3604000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yuyzaal450k3mmdkwwqg5k3x3mva73g0pkrljs", - "coins": [ - { - "denom": "uatom", - "amount": "32568690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yvjx84cumayq9vpg76czm8ad33eq27t9xteerh", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yy7vsp09r4ejaymszul5whufu750m725kcw7sw", - "coins": [ - { - "denom": "uatom", - "amount": "9046000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1yz77vz7k2jf8z8wyeu7fh4rxvs02x0ua3rm4f6", - "coins": [ - { - "denom": "uatom", - "amount": "572440000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z0lzrc83s7uszl8camqs23xtd3z43wud9effa9", - "coins": [ - { - "denom": "uatom", - "amount": "90460000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z0ssgfj0khzf8fc6x2j28mysgalug8aeq6qnef", - "coins": [ - { - "denom": "uatom", - "amount": "7236000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z3qfattrhkxxra9mnxgpegh0q7l8jj86glk9e2", - "coins": [ - { - "denom": "uatom", - "amount": "107040000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z4zz489uuz8jasrwhhtxpzv0e6g20ya6gemxx5", - "coins": [ - { - "denom": "uatom", - "amount": "4523000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z8mzakma7vnaajysmtkwt4wgjqr2m84tzvyfkz", - "coins": [ - { - "denom": "uatom", - "amount": "14194031940000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1z9vvzlmce95ph8zm7g3zmd28tsgypu9g5wzcam", - "coins": [ - { - "denom": "uatom", - "amount": "6454580000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zahpv7wpr8xezu2mgqw7nfqc6zvzrp6lnr3ygz", - "coins": [ - { - "denom": "uatom", - "amount": "18996000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zded29cyakc0t9s5thjkm8404g3vesf4au43aw", - "coins": [ - { - "denom": "uatom", - "amount": "2798831000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zeuwy2zd3ww66luhzpsvqjstj77383wtwkm7hr", - "coins": [ - { - "denom": "uatom", - "amount": "19027160000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zexgegsg80lpyhk0anscets32eskcvs59vtl8m", - "coins": [ - { - "denom": "uatom", - "amount": "3618000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zfkep87pvq8grgkf7dslu4j3adpk5s4czj4gt5", - "coins": [ - { - "denom": "uatom", - "amount": "23260690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zg7q48ujrc5yvdc7egxx5wjdacth6mlew4rhz8", - "coins": [ - { - "denom": "uatom", - "amount": "860990000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zg8e4th5yhdnyc4reg4ynlquryqh6y6ul7dqv7", - "coins": [ - { - "denom": "uatom", - "amount": "11625690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zh6xxv0smkd3uszdltlxvcgr2ar6ax0gnm7p6g", - "coins": [ - { - "denom": "uatom", - "amount": "3868640000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zjsxej47y34srzyldvgunq6jx2uqtt7ha2jc5d", - "coins": [ - { - "denom": "uatom", - "amount": "174506380000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zksx3dj68w397hj02n64taxsqsp0jle64nmy4w", - "coins": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": [ - { - "denom": "uatom", - "amount": "18500000000" - } - ], - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "1584140400" - }, - { - "address": "cosmos1zkwwyvzqapxzvew7dyjza2mpj5t68zlur2wp3r", - "coins": [ - { - "denom": "uatom", - "amount": "18001000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zm7llltwd2cdap8f4gp7qtnrufp865sfmyg3hp", - "coins": [ - { - "denom": "uatom", - "amount": "22597000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zn6awjea0zd499vk8rkhhav0cjyy4jt349vpy6", - "coins": [ - { - "denom": "uatom", - "amount": "904000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1znjfq796hxmaj85sjmp7tvy0e50v8g8ghh6zlz", - "coins": [ - { - "denom": "uatom", - "amount": "226150000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1znww7wjy3qq8hqf9fg49qln7lmdgdpmqulxmjk", - "coins": [ - { - "denom": "uatom", - "amount": "2317690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zp6kg7qlmztyw2km2af4z5ruz5vn04cpq84vjk", - "coins": [ - { - "denom": "uatom", - "amount": "1000000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zqgheeawp7cmqk27dgyctd80rd8ryhqsltfszt", - "coins": [ - { - "denom": "uatom", - "amount": "1500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zr7aswwzskhav7w57vwpaqsafuh5uj7nv8a964", - "coins": [ - { - "denom": "uatom", - "amount": "6784500000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ztfk3dglwhskqyktms2ts4n8dgq62s46ug6s97", - "coins": [ - { - "denom": "uatom", - "amount": "10176000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1ztrlkfdx7e20quxahyhftvcvul82c2sxknxhf5", - "coins": [ - { - "denom": "uatom", - "amount": "6971690000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zu5twe54gddsz9drlv9s0jprhfl73dnrf0cqde", - "coins": [ - { - "denom": "uatom", - "amount": "5296250000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zvrhk7jxhdg4y2alpslswnfphg520wytz9e0at", - "coins": [ - { - "denom": "uatom", - "amount": "2261000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zxcxurm8gwp43n4efqms6484gkdnnq763w03t6", - "coins": [ - { - "denom": "uatom", - "amount": "34890800000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zxt0a26csdu4rzlegfz2mg4lfxru3l2ln568dk", - "coins": [ - { - "denom": "uatom", - "amount": "397920000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zyk2s4mguxej7chvf9aglrd29qmen0mxqt6gw8", - "coins": [ - { - "denom": "uatom", - "amount": "11307000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zyqm8gmermk5mfncpvkdapaa6az4yy7kyjwgau", - "coins": [ - { - "denom": "uatom", - "amount": "70106000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zyqxtvzqfadl8l7nksvtfs6letxkzhl7zf64kd", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zza99afg3y0vzcpqxcuqrxxnmhdk87yhhsfrs0", - "coins": [ - { - "denom": "uatom", - "amount": "5808190000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - }, - { - "address": "cosmos1zzumx3n287tkauya4dvm4lhzhhvtca6v57yz9v", - "coins": [ - { - "denom": "uatom", - "amount": "180919000000" - } - ], - "sequence_number": "0", - "account_number": "0", - "original_vesting": null, - "delegated_free": null, - "delegated_vesting": null, - "start_time": "0", - "end_time": "0" - } - ], - "auth": { - "collected_fees": null, - "params": { - "max_memo_characters": "512", - "tx_sig_limit": "7", - "tx_size_cost_per_byte": "10", - "sig_verify_cost_ed25519": "590", - "sig_verify_cost_secp256k1": "1000" - } - }, - "bank": { - "send_enabled": false - }, - "staking": { - "pool": { - "not_bonded_tokens": "236198958120000", - "bonded_tokens": "0" - }, - "params": { - "unbonding_time": "1814400000000000", - "max_validators": 100, - "max_entries": 7, - "bond_denom": "uatom" - }, - "last_total_power": "0", - "last_validator_powers": null, - "validators": null, - "delegations": null, - "unbonding_delegations": null, - "redelegations": null, - "exported": false - }, - "mint": { - "minter": { - "inflation": "0.070000000000000000", - "annual_provisions": "0.000000000000000000" - }, - "params": { - "mint_denom": "uatom", - "inflation_rate_change": "0.130000000000000000", - "inflation_max": "0.200000000000000000", - "inflation_min": "0.070000000000000000", - "goal_bonded": "0.670000000000000000", - "blocks_per_year": "6311520" - } - }, - "distr": { - "fee_pool": { - "community_pool": null - }, - "community_tax": "0.020000000000000000", - "base_proposer_reward": "0.010000000000000000", - "bonus_proposer_reward": "0.040000000000000000", - "withdraw_addr_enabled": false, - "delegator_withdraw_infos": null, - "previous_proposer": "", - "outstanding_rewards": null, - "validator_accumulated_commissions": null, - "validator_historical_rewards": null, - "validator_current_rewards": null, - "delegator_starting_infos": null, - "validator_slash_events": null - }, - "gov": { - "starting_proposal_id": "1", - "deposits": null, - "votes": null, - "proposals": null, - "deposit_params": { - "min_deposit": [ - { - "denom": "uatom", - "amount": "512000000" - } - ], - "max_deposit_period": "1209600000000000" - }, - "voting_params": { - "voting_period": "1209600000000000" - }, - "tally_params": { - "quorum": "0.400000000000000000", - "threshold": "0.500000000000000000", - "veto": "0.334000000000000000" - } - }, - "slashing": { - "params": { - "max_evidence_age": "1814400000000000", - "signed_blocks_window": "10000", - "min_signed_per_window": "0.050000000000000000", - "downtime_jail_duration": "600000000000", - "slash_fraction_double_sign": "0.050000000000000000", - "slash_fraction_downtime": "0.000100000000000000" - }, - "signing_infos": {}, - "missed_blocks": {} - }, - "gentxs": [ - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "ATEAM", - "identity": "0CB9A4E7643FF992", - "website": "nodeateam.com", - "details": "Node A-Team promises to provide validator node operation services at the highest quality." - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "5000", - "delegator_address": "cosmos14l0fp639yudfl46zauvv8rkzjgd4u0zk0fyvgr", - "validator_address": "cosmosvaloper14l0fp639yudfl46zauvv8rkzjgd4u0zk2aseys", - "pubkey": "cosmosvalconspub1zcjduepq7jsrkl9fgqk0wj3ahmfr8pgxj6vakj2wzn656s8pehh0zhv2w5as5gd80a", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A6WjB8Rb39iqfkPqTU+2oNa/EFzhzCqo4MPNFiMgNQHQ" - }, - "signature": "pQAaAGR1XjxWsm+jKuKkSDwmjcr2pKKSahxf4sJ48UIDODvQb66bH3+ANa/LibPg7aGjyD4jwNU3xDdWrmMYew==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Auberdine", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.170000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.200000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos1vzj0lluc43k64gagvy9wsygh33dk84h07a3rsu", - "validator_address": "cosmosvaloper1vzj0lluc43k64gagvy9wsygh33dk84h0mf9ku0", - "pubkey": "cosmosvalconspub1zcjduepqfqhyah5dlxlnpwr8s3dmt7td8w5sug0vpfmmnkh9wuyymcuhh5zqfxqgg0", - "value": { - "denom": "uatom", - "amount": "21000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ai017zYj1UVWQKSvcSBv861jUmKYOdeyTcUpnRbOwkwA" - }, - "signature": "D6GB0XEU3qm7mrn5Bbj7+wV964B109XZ/g/aeDaf2Vh4e/JJor8eePON48+hds9QJCIuk9XefF2i2oQHoqPUQw==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Bianjie", - "identity": "A6DFF8A48236A5C7", - "website": "https://www.bianjie.ai/cosmos", - "details": "Core developer of IRISnet, active contributor to Cosmos." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.020000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ssm0d433seakyak8kcf93yefhknjleed4psy4g", - "validator_address": "cosmosvaloper1ssm0d433seakyak8kcf93yefhknjleeds4y3em", - "pubkey": "cosmosvalconspub1zcjduepqrgyyjxpe0ujefxwnkpmqz9m0hj03y09tdz9lwc0s7mvy469hulfq69f8sd", - "value": { - "denom": "uatom", - "amount": "1000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AnJHwzfg3FEcviT+CFXhNpxiP5msBLZXJG2D3eK3dAdR" - }, - "signature": "vk32Ye5g0VlXclScjLJWAJyUvA5AGfAYUAT5XdIVm6ttrWT9G/ezK3wm+uuu8j5S6QbqXsjC8CBZG4X0i+ijvQ==" - } - ], - "memo": "3e54abe1133a7c61a0732098dcd4d4998d38d2be@cosmos-sentry.bianjie.ai:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Blockpower", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1rpgtz9pskr5geavkjz02caqmeep7cwwpf29g2p", - "validator_address": "cosmosvaloper1rpgtz9pskr5geavkjz02caqmeep7cwwpv73axj", - "pubkey": "cosmosvalconspub1zcjduepq04y0dtylyed2f8drc9t78dmptfuta7l6xyujwmsgrqefs0sxpgjsnzpsj6", - "value": { - "denom": "uatom", - "amount": "50000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AsmAoZJSg2Y6OPffgfB1zgMkLxjozbg2LXShEVnwf/kf" - }, - "signature": "judY7OkDn6wdRduwTmPZBmcA6HBVQ17FqA07Pn23K1Bx3N2E+LrhH1DAwYUj1DXbjlFdWnvpJgu8ztfz3YSgIg==" - } - ], - "memo": "d0f26063f5e44f361897e448f81ff0953d7ed2f2@cosmos-sentry.blockpower:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "BouBouNode", - "identity": "", - "website": "https://boubounode.com", - "details": "AI-based Validator. #1 AI Validator on Game of Stakes. Fairly priced. Don't trust (humans), verify. Made with BouBou love." - }, - "commission": { - "rate": "0.061000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1eh5mwu044gd5ntkkc2xgfg8247mgc56f8pycyz", - "validator_address": "cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fz4sdg3", - "pubkey": "cosmosvalconspub1zcjduepq8hu49qdl5594rzxmdsww3hleu8phxrajjfsseqjere9mjrrrv9tq35mll4", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AoAsj4KOrkiwIV2WZasfD+lekYHj7uIjYTanDjT6i9w/" - }, - "signature": "614bt6iFO0QigPFN5fsfUUWXVOSLAW4iYBjnimyct+48YhUTiVehxhXfUvWP4gbtpwKEa8LIR7/wUzO7b+pYQQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "ChainPool", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1cf9yqlamxgeza4nsn7y08vpkcs7qqjp4lzw9ac", - "validator_address": "cosmosvaloper1cf9yqlamxgeza4nsn7y08vpkcs7qqjp46k6s3t", - "pubkey": "cosmosvalconspub1zcjduepqh743r5du0f53zazrztdu3zj2twp38y7em55lmaeuxdlmna78argqw2s95s", - "value": { - "denom": "uatom", - "amount": "100000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Awyy4qzKg2GKO9KU611j0dusfruU0S/5mEnG6hpcfsPN" - }, - "signature": "C04Q2qlhl1xIIaHRixhEpT+k42CL1xuxkWgMy9b0Bg9LuE9o1E/lQw64a1yprVKql7YHUkrs8uQcF/7WUOM1Bg==" - } - ], - "memo": "e4a6bd1744a029b87bf530e983da30ea58ac50f5@38.143.1.26:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Coinone Node", - "identity": "", - "website": "https://node.coinone.co.kr", - "details": "The more, the easier. Coinone Node manages your assets securely." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1pz6yu5vdxfzw85cn6d7rp52me4lu8khx7lpkzd", - "validator_address": "cosmosvaloper1pz6yu5vdxfzw85cn6d7rp52me4lu8khxmt4rw7", - "pubkey": "cosmosvalconspub1zcjduepq562qtt42wsqmmmhpj5vmgp3dprpeclzc5u57hdvkpq762nthr3vqh8yaf7", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AwTiHwim/dD3CZzUodiZ70trDOLbrKlNuCs8st5jItBK" - }, - "signature": "mOUNQJaxBJupeg2Vn7xAW01QdHFqIIryL/i7pFwBdC44DAaxB1fa9BB0ex8rePVuVmlN67hS2Onz6zx4PpPCXA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Compass", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ff0dw8kawsnxkrgj7p65kvw7jxxakyf8kqnyy4", - "validator_address": "cosmosvaloper1ff0dw8kawsnxkrgj7p65kvw7jxxakyf8n583gx", - "pubkey": "cosmosvalconspub1zcjduepqu08f7tuce8k88tgewhwer69kfvk5az3cn5lz3v8phl8gvu9nxu8qhrjxfj", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A8kyShNhoxSGVQq/8l4HDqtM8bCaIJFGZq/2aLT1u8Q3" - }, - "signature": "itEhxkOBaZ2/U464Soa90Sw61e/ANyyADAUM4TTvTXM9FDc7XCh96i1cDU7WxSvk2D3qCd+bQnA3aU2v2m49Rw==" - } - ], - "memo": "629ced1ee45898a7684bb4e1732f8685d37f490d@172.31.20.234:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Cosmostation", - "identity": "AE4C403A6E7AA1AC", - "website": "https://www.cosmostation.io", - "details": "CØSMOSTATION Validator. Delegate your atoms and Start Earning Staking Rewards" - }, - "commission": { - "rate": "0.120000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos1clpqr4nrk4khgkxj78fcwwh6dl3uw4ep4tgu9q", - "validator_address": "cosmosvaloper1clpqr4nrk4khgkxj78fcwwh6dl3uw4epsluffn", - "pubkey": "cosmosvalconspub1zcjduepq0dc9apn3pz2x2qyujcnl2heqq4aceput2uaucuvhrjts75q0rv5smjjn7v", - "value": { - "denom": "uatom", - "amount": "30000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "An0yrOygz23oiJQZg63gJSbg4nkrWmHBC02/6Am2oDrS" - }, - "signature": "6l0B/lTVJxiKoNmo3F4qH5bRPmA9uh2dL43b9w5beUdODGYEXNSe2DG+rSfjg1JBrBvhFKYTt7Rl/5PpdlgKgg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Cryptium Labs", - "identity": "5A309B5CA189D8B3", - "website": "https://cryptium.ch", - "details": "Secure and available validation from the Swiss Alps" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1kj0h4kn4z5xvedu2nd9c4a9a559wvpuvemr0vq", - "validator_address": "cosmosvaloper1kj0h4kn4z5xvedu2nd9c4a9a559wvpuvu0h6qn", - "pubkey": "cosmosvalconspub1zcjduepqvc5xdrpvduse3fc084s56n4a6dhzudyzjmywjx25fkgw2fhsj70searwgy", - "value": { - "denom": "uatom", - "amount": "100000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeyMultisigThreshold", - "value": { - "threshold": "2", - "pubkeys": [ - { - "type": "tendermint/PubKeySecp256k1", - "value": "AlHMIiMT4+ubmUFOJswrv9fwUJ33cWolv2e5ddzm51P9" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "ApYO482K2n1xA754WsviWNSRZ9IyA9zodACZKCSedq10" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "AiRJtkfOtRkVHpB/4edZmTi/AKTNq+jPQjFWb0X3Hn22" - } - ] - } - }, - "signature": "CgUIAxIBYBJA79FZoB4WSa1b7jxsyoSp0iYuWcRGQuJYGp3x2jJQI78v6mvypi1Wa9VMllH5xdnNPHD/5sfhmKx0V+f4Eh1swhJAP+nHIWbVq2DxIV7XBJD/QU5HbOp8suIK9YpqHPRSx2glRHMwWOvV4lG0Z7H6ZS31YSON+Tta/sZVXFHc0sqS6g==" - } - ], - "memo": "89e4b72625c0a13d6f62e3cd9d40bfc444cbfa77@34.65.7.199:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Cypher Core", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1pjmngrwcsatsuyy8m3qrunaun67sr9x78qhlvr", - "validator_address": "cosmosvaloper1pjmngrwcsatsuyy8m3qrunaun67sr9x7z5r2qs", - "pubkey": "cosmosvalconspub1zcjduepqcdav5ylt2zst90qmuh8e5w07xmxv9y6wufp5k9ngzmx7v9qewqtqkcq4z8", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AlX825sr2FmvR8R/sizJMm2zuY74AxBrL+tbgrGPG+JN" - }, - "signature": "me9a7TbytgR4O8qH3gdDkU/RNJHIIxM0/IYHdQH/9tQ1a5zkxJZHVciaQqWU6JqKMjy832TruxhNBReUAZAl1A==" - } - ], - "memo": "58aa4b7ebb241b3a87e3a0a965b8ac076566de62@45.76.225.89:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "DokiaCapital-ION", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.150000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos14lultfckehtszvzw4ehu0apvsr77afvyhgqhwh", - "validator_address": "cosmosvaloper14lultfckehtszvzw4ehu0apvsr77afvyju5zzy", - "pubkey": "cosmosvalconspub1zcjduepqp0j4vum7ryt6nl6zsgq9ar347afmq2c5z6jmzeavv2p2ns6m0dgs5zmg4z", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "ArSpHTTpHAZ17Co4dsgfY0fuF5RAA5OZtxnmZLA2Z6vI" - }, - "signature": "ujZakKBUNg3w3OmaUSD4usC3evYt3LK4ZgBlrgOEIqU+/65UF56nuxzkLCv6tPO+dK+atrJLUX5OlH/LbbLdUw==" - } - ], - "memo": "51da73aaf1280016998efada239b2fd59ccc4116@--node-id:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "DragonStake", - "identity": "EA61A46F31742B22", - "website": "https://dragonstake.io", - "details": "BlockChain Technologies" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos15r4tc0m6hc7z8drq3dzlrtcs6rq2q9l2kc6z4s", - "validator_address": "cosmosvaloper15r4tc0m6hc7z8drq3dzlrtcs6rq2q9l2nvwher", - "pubkey": "cosmosvalconspub1zcjduepqjcp9ez3dzmvsdfcw2h5kllmqvjgqnhtlvhad4q9wzcqf34gf6ewq6zl5mm", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A28+XBwoLf8Q40ivs5UGkBidWs+wkg3VBs1gzriPtmuX" - }, - "signature": "O0azW4WNvLnHLaFSl/hoec2B2X9HEEWzNUm+GWQxDgsb81jrZQuAQKu/rIK0vp3/DRX78X6X1RoQxsGucTZkhg==" - } - ], - "memo": "7c4bc7818858487674e6b532d0ba1640ae675ea3@1.2.3.4:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "F4RM", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos14az9dmutwtz4vuycvae8csm4wwwtm0au7lt5d2", - "validator_address": "cosmosvaloper14az9dmutwtz4vuycvae8csm4wwwtm0aumtlppe", - "pubkey": "cosmosvalconspub1zcjduepq59t2nm3ph5k6uc804w0n7ey69ul8ntee2dy47d7u53q248ud822sunv93j", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "ApA4WPGwNrJs7QX96kS20y1TbPIuX2ZyMbKHFN24UOOR" - }, - "signature": "GkrExkLIrtZiOn1zHC2p181vyx7HgzqAqSKRpc0O6Epo3x41J8FsSyKPWVFJdptuZcVr4oa2jWwEvxekJfpHWw==" - } - ], - "memo": "F4RM@0.0.0.0:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Firmamint", - "identity": "", - "website": "https://www.firmamint.io/", - "details": "The FUTURE is at STAKE - Proudly Canadian - Holder of the Game of Stakes NEVER JAILED Title - By delegating, you confirm that you are aware of the risk of slashing and that Firmamint is not liable for any potential damages to your investment." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.030000000000000000" - }, - "min_self_delegation": "1500000000", - "delegator_address": "cosmos19kwwdw0j64xhrmgkz49l0lmu5uyujjayrfzmuq", - "validator_address": "cosmosvaloper19kwwdw0j64xhrmgkz49l0lmu5uyujjayxakwsn", - "pubkey": "cosmosvalconspub1zcjduepq668g4epaumjtx35rk3ucz2nlm7l7zuewkt0kzutg9hha859zjxmsvl2v67", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A95wHrbxhpQ91P2+0HV4uN2E9dKO+a87iNSceBuu1w+Z" - }, - "signature": "/hxfCtPF9s2WcN1nDaSSlNT/4bOSrWekR6380pUnsasUcBhTf/dXhdxxICP5AWGC24ehbaCYJHOqsG1b2s2pSQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "HyperBlocksPro", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ul2me6vukg2vac2p6ltxmqlaa7jywdgtz5203m", - "validator_address": "cosmosvaloper1ul2me6vukg2vac2p6ltxmqlaa7jywdgt8q76ag", - "pubkey": "cosmosvalconspub1zcjduepq0cet8ez89wj4yz8uencych7aldc5wyyrpx6jvh6n6kxxslumln5sxkq922", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A870fEa2W+PInGJCjSTyhjosx0gL2TyQqqtKx2FtUrr+" - }, - "signature": "9oCPJFo4WyUzrZUU6+Tp5XiJ64//mrdCjr1DBdBQBbE5X3u/OalCUEgH2oOSHFvOZ9Pfa2rKKKkYLy8HIXePnw==" - } - ], - "memo": "override@override:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "KalpaTech", - "identity": "6A0D65E29A4CBC8E", - "website": "kalpatech.co", - "details": "KalpaTech offers integrated blockchain solutions for proof of stake networks" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ehkfl7palwrh6w2hhr2yfrgrq8jetguceek792", - "validator_address": "cosmosvaloper1ehkfl7palwrh6w2hhr2yfrgrq8jetgucudztfe", - "pubkey": "cosmosvalconspub1zcjduepqvmmhug9hcmm26ce7we0n3esavn4c6tfcfd6zgnuj732ls7khjq4srpg0ft", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AowlwmoBjAAw2DUilvPuu5GuPePi1w0l9zsR1JfMr8tb" - }, - "signature": "ZeWGlnpTJdIPBhiNJQB3t2vKAg8l/siYxD3OG8G+evcJIz5ygJJjEhcu7hjOOeRS8lNo2sVcX2xt2ye/27JQSA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Mythos", - "identity": "2E9FDF34351A5112", - "website": "https://mythos.services", - "details": "Staking and validator services for crypto networks" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1w42lm7zv55jrh5ggpecg0v643qeatfkdqf5ua6", - "validator_address": "cosmosvaloper1w42lm7zv55jrh5ggpecg0v643qeatfkd9aqf3f", - "pubkey": "cosmosvalconspub1zcjduepqz679nxu2dkfd6y9hytqwvf2z4yuevraqykkm2464ag4e6z278h3qdq92xu", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AlCWhRIIBlQOV2OuT4Fxx9qbbnafyrSpD2ra8F6s5tOa" - }, - "signature": "lQ9o0uU0KGbWw+hMPIOUI/rIwmZYKpeT0+VhGfYU6s4EvGEBOFcV4usVKpOugS6Xk8OnvvGAUW6rYmPjexe13w==" - } - ], - "memo": "4eb6ef5af7bf1e6c27825f72b1f22ea16213ba50@192.168.0.178:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "P2P.ORG - P2P Validator", - "identity": "E12F4695036D8072", - "website": "https://p2p.org", - "details": "One of the winners of Cosmos Game of Stakes. We provide a simple, secure and intelligent staking service to help you generate rewards on your blockchain assets across 9+ networks within a single interface. Let’s stake together - p2p.org." - }, - "commission": { - "rate": "0.080000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos132juzk0gdmwuxvx4phug7m3ymyatxlh9m9paea", - "validator_address": "cosmosvaloper132juzk0gdmwuxvx4phug7m3ymyatxlh9734g4w", - "pubkey": "cosmosvalconspub1zcjduepq9xu9z6ky3nz3k544ar4zhupjehkxdlpmt2l90kekxkrvuu7hxfgslcdqwy", - "value": { - "denom": "uatom", - "amount": "4900000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ahq7wODVSvcGba3EsI9KgH9e9uE9/M15J0klT5uUsous" - }, - "signature": "phh3TZySvLK5vTHVdlVM3xglJvIaLs7rymdL9JmN79B4LMAYYRV3ccyAm8TpM/B32svtfaFTbn6Dfvu1QILcOg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "SNZHolding", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1s6x9fy4wc49wj9jx4jv6czredqsmp46hmc8rxn", - "validator_address": "cosmosvaloper1s6x9fy4wc49wj9jx4jv6czredqsmp46h7vnk2q", - "pubkey": "cosmosvalconspub1zcjduepqfkkyuexns2l7rw2mx2ms988heah0rjv42e9q88scc3ms5hzg45psycrvr4", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ap5WX8/zhs4cyHtUSruBuYi77o3zv/aKqHQfnEbi/6Nd" - }, - "signature": "+Qcgb5PXFsxsdAU2A/jmGKco7B31mDpbo1mi7+pIY/VGly0HslwkGhx8vb+UjxEMr2AE3FVyMRjuUNpyOI0YTQ==" - } - ], - "memo": "f7e106f5db9f10bde1f89d177bf0fe12d593f993@10.0.32.24:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Simply-VC-Validator", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1vjqault583hwktfj63k2hh7r02sj2a66v0chv3", - "validator_address": "cosmosvaloper1vjqault583hwktfj63k2hh7r02sj2a66fmvzqz", - "pubkey": "cosmosvalconspub1zcjduepqduk3drqxx5g8s2vtvlpz97pq06u67ewn5wt7r2wgvtnewfymy9gs0lrzrl", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ah2SOnyRtwfHRT/Y1CERA7MiLIdkx37DEOwEu3IOQbCU" - }, - "signature": "JSOY7O6BijCI/MfokfkShlWnMaNLFlpzNdHMl1T1tpFq0fKcJiQOy/bzX9nJOFfPma3+fZAl4PEcCOd5FKsiAQ==" - } - ], - "memo": "MemoryLost@Was.Here:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Skystar Capital", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1uhnsxv6m83jj3328mhrql7yax3nge5svxcw7kt", - "validator_address": "cosmosvaloper1uhnsxv6m83jj3328mhrql7yax3nge5svrv6t6c", - "pubkey": "cosmosvalconspub1zcjduepql42t7mstnewp5rgweteuw95hawzystll7mq8dl24n5yh0th7q2jqetcy07", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Amz9q7DWeRFuItDxfaAyEcW8mLfF5zmhqsv3qZ/x1mjN" - }, - "signature": "bAcqw/EYSCD+KufZavFQntExIW8kKUzaJ5KA/wljCs1xJAM0yIedSFjNklb4FV6+wNRpoGXjvf6hUhnyZTLXBw==" - } - ], - "memo": "527df2fb5f01052d174285da1eb0f0234d590890@138.68.45.219:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Staked", - "identity": "7B3A2EFE5B3FCDF8", - "website": "https://staked.us/", - "details": "Staked is the most trusted validator in crypto, delivering highly available and highly secure staking nodes." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.020000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1we6knm8qartmmh2r0qfpsz6pq0s7emv3um0vsa", - "validator_address": "cosmosvaloper1we6knm8qartmmh2r0qfpsz6pq0s7emv3e0meuw", - "pubkey": "cosmosvalconspub1zcjduepq6adydsk7nw3d63qtn30t5rexhfg56pq44sw4l9ld0tcj6jvnx30s5xw9ar", - "value": { - "denom": "uatom", - "amount": "4500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A4ox0f6xVNCbdP6xlzk2zkvoyTryEmaQp+vc+nWfUd2o" - }, - "signature": "3xACydJ2/vq/aNQ4HH2oU2wVDn4zoPqJUvpzPXrSoj5T461QggzXi4aKKpqBupOcpYcCMvqjm63K5glucn0E/g==" - } - ], - "memo": "71f9ed4d7a7adc737914c901396a7ba3aef22c37@100.97.62.209:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Wetez", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1s05va5d09xlq3et8mapsesqh6r5lqy7mnr69mg", - "validator_address": "cosmosvaloper1s05va5d09xlq3et8mapsesqh6r5lqy7mkhwshm", - "pubkey": "cosmosvalconspub1zcjduepqgx5xdrx0xktl5r8e3w7vj329fgh3fnep8ahgx8027nd5nkjxzuqs5us5en", - "value": { - "denom": "uatom", - "amount": "10000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AkQg0kfkxZ+L30N/e3zNIT17Ay47sQxckf6Dxq/TqoR2" - }, - "signature": "dTY1Tc4OVZ39aYT1ax2icV35557HOasqV52NorV/MgdlzDFRWCfRYQwOeuPgL302HblzESzX4YyVUEpGYRBp7Q==" - } - ], - "memo": "3d08a88019e609c207eaa636ac4e03543d086cb8@172.20.73.240:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Atom Sandler", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.250000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1cql9ska0xl2rkg6gcv0np4333gn6fygs3qf90r", - "validator_address": "cosmosvaloper1cql9ska0xl2rkg6gcv0np4333gn6fygs55asrs", - "pubkey": "cosmosvalconspub1zcjduepq902trqaqmnaay5wh44jdj8ljp2qeugg8r6wn5afmxzwpry205d0qd472ha", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Auq/pdNq4/JnJSPjHLlHCHlnegLIwhUuXiENLvstNPNp" - }, - "signature": "u9BoewGMm0StTmH93UyZl4F9HuH/m2QGeXAIRwSi9uQ4B40c4irw84zftfP5CQ1uPCady+FL6ZwSIu7TEh9DAw==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Bison Trails", - "identity": "A296556FF603197C", - "website": "https://bisontrails.co", - "details": "Bison Trails is the easiest way to run infrastructure on multiple blockchains." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1uxh465053nq3at4dn0jywgwq3s9sme3lc9ek2f", - "validator_address": "cosmosvaloper1uxh465053nq3at4dn0jywgwq3s9sme3la3drx6", - "pubkey": "cosmosvalconspub1zcjduepqc5y2du793cjut0cn6v7thp3xlvphggk6rt2dhw9ekjla5wtkm7nstmv5vy", - "value": { - "denom": "uatom", - "amount": "13000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ai+y59+qJLiZeh+8GdOJO2GJkLvtS4sD9UDOBEELUETM" - }, - "signature": "UwNBWnjLPegS+cITJybwFXvaSb/0bPLvn4D6Bvb4z+0RLgV+wWv1RrXJKIlWqfxlP13u3j3kQ1tNm7+xMA5A6Q==" - } - ], - "memo": "54a82740a61e39f384e5fb1cc01de79502d05ba2@10.0.1.202:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "bity.com", - "identity": "", - "website": "https://bity.com", - "details": "We offer professional, secure, and reliable crypto staking services for investors looking to stake their coins with trusted third parties, such as the Cosmos Network." - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1uv26ytrnmydyctq0s58ve2k6wn2p653m9yn69g", - "validator_address": "cosmosvaloper1uv26ytrnmydyctq0s58ve2k6wn2p653mqs80fm", - "pubkey": "cosmosvalconspub1zcjduepqmpm39a9aqllqr8dm9w3ww0sp0v32vvphqmgxt20fpw7949ayhhqshx7n9c", - "value": { - "denom": "uatom", - "amount": "20000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A/MVFYmNRfeBJraFOJMmdVvdZRLNpfkSgwZy8j90DzoM" - }, - "signature": "4WmtMo09/FO+SP5+ThIbr8xWI0LLc0d2+4cAhgIn6HtFGlKktIzvga3uf3W/Oq1xac7D8Wau64bnruiMz4Wa8Q==" - } - ], - "memo": "659787510cdb818ad1a3a2eed3ce68a6827354e2@cosmos.bity.com:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "blockmatrix", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos1n5pu2rtz4e2skaeatcmlexza7kheedzhzf70tu", - "validator_address": "cosmosvaloper1n5pu2rtz4e2skaeatcmlexza7kheedzh8a2680", - "pubkey": "cosmosvalconspub1zcjduepqnd9kzfhhvuv5k2cq62yu0e5v73ymsgxa0wlen9c7999ucwg7hg6qdm34pm", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AzKw26WQQPFK/cvMjrFIcTG1CPpj225RzIcDXwOXUzlj" - }, - "signature": "iQDu63RYmDLNK8UONr/jNf+LMGyVgNgqODlcVQJVaOoay91IHYBpST5rQ9dNKaUPgLufCehM8YEOUh1OY8xPEQ==" - } - ], - "memo": "e275ba168d9379eacb186e11b2ffa8a0dd02a63e@1.2.3.4:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "cephalopod equipment coop", - "identity": "", - "website": "", - "details": "Cephalopod Equipment Coop" - }, - "commission": { - "rate": "0.250000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1000000", - "delegator_address": "cosmos1fghgwhgtxtcshj4a9alp7u2qv6n2wffqj4jdl9", - "validator_address": "cosmosvaloper1fghgwhgtxtcshj4a9alp7u2qv6n2wffqhpxcnk", - "pubkey": "cosmosvalconspub1zcjduepqwzmcs4kpsetyk7fn7czvdljgawa93r6mnzvcwt9a366rep2gcs0q4jpxu5", - "value": { - "denom": "uatom", - "amount": "42000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A8NUKnGCZXhpay1nTggs9kB60tui7lWeifpQkuRjWSeo" - }, - "signature": "PxVmWkumWSfc2Ard4gpL3d/IN/ZG/oD+Ee4voBOl++BRp6o1nWv9gyJunrROCc6LeyWpTwMYNSUd6BrgqtWk4A==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Certus One", - "identity": "ABD51DF68C0D1ECF", - "website": "https://certus.one", - "details": "Stake and earn rewards with the most secure and stable validator. Winner of the Game of Stakes. Operated by Certus One Inc. By delegating, you confirm that you are aware of the risk of slashing and that Certus One Inc is not liable for any potential damages to your investment." - }, - "commission": { - "rate": "0.125000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1qwl879nx9t6kef4supyazayf7vjhennyjqwjgr", - "validator_address": "cosmosvaloper1qwl879nx9t6kef4supyazayf7vjhennyh568ys", - "pubkey": "cosmosvalconspub1zcjduepqwrjpn0slu86e32zfu5xxg8l42uk40guuw6er44vw2yl6s7wc38est6l0ux", - "value": { - "denom": "uatom", - "amount": "55000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A0hW8ESfYxhZt8Jxix/qgLOIl3TjnOrpTDSEGzo0qRm0" - }, - "signature": "FxQ3VLXQeaRbeSQoumEvr52mcZC6ej1WAGH1papeukN5EkUGpY5NicoHMFNIRV4BGRKgSNoiFIwvVCfTHIWXhQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "chainflow-cosmos-prodval-01", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1j0vaeh27t4rll7zhmarwcuq8xtrmvqhughud6h", - "validator_address": "cosmosvaloper1j0vaeh27t4rll7zhmarwcuq8xtrmvqhudrgcky", - "pubkey": "cosmosvalconspub1zcjduepqvn4a4skwj88c8e0jvns3qjrhyy0whvnuwmth3k8kexvqk5vupw4qsdje47", - "value": { - "denom": "uatom", - "amount": "500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A7s/Wt/O0q/TXK1wm/AC/iYkHAUlTnT2csEcB6hTOoVE" - }, - "signature": "y+kaSKQwdN0VMPLUhZUpoVv4W16SoHLmlBDre6cwG59IAkvuQyW8CxILF9/TpaFb0TObVBxDZT1WnLScgcIMdQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Chorus One", - "identity": "00B79D689B7DC1CE", - "website": "https://chorus.one/", - "details": "Secure Cosmos and shape its future by delegating to Chorus One, a highly secure and stable validator. By delegating, you agree to the terms of service at: https://chorus.one/cosmos/tos" - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.020000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos15urq2dtp9qce4fyc85m6upwm9xul3049um7trd", - "validator_address": "cosmosvaloper15urq2dtp9qce4fyc85m6upwm9xul3049e02707", - "pubkey": "cosmosvalconspub1zcjduepqjc07nu2ya8tyzl8m385rnc382pkulwt2gh8yary73f3a96jak7pqsf63xf", - "value": { - "denom": "uatom", - "amount": "4500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AoUAnGnBsT7xGv2PTnIQbfK4t4oNyimGk2AhPwfgxq3T" - }, - "signature": "Zoxl7XkkI8Frefnck9lKsqsnqUHefYZerjK7a9gG/wlCNG8v5E9iFnqoepDLykjo3MVB6YQup2Ub+vS2ZeFM9w==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Colmena", - "identity": "", - "website": "https://www.coworkingcolmena.com/", - "details": "May the force be with you" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos16gdxm24ht2mxtpz9cma6tr6a6d47x63hlq4pxt", - "validator_address": "cosmosvaloper16gdxm24ht2mxtpz9cma6tr6a6d47x63h65p52c", - "pubkey": "cosmosvalconspub1zcjduepq9s5y3sk6g6x35pk2ljzs446xgfmamzuptrlrgs9mquc982j0ujuqq0vzhf", - "value": { - "denom": "uatom", - "amount": "1000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AzaSKwy1GgbQmJlWIbFBR8l4Q9YSvWDwyakmccdgoqOs" - }, - "signature": "LGBPGXGU3rhkQBdoHHeMMOOrVfu32gqrpVjNMmJhft8jY5mCinzdR6IgKFUwu2qe6LdKE1kDRaWPJirONkZCHA==" - } - ], - "memo": "34b6a464293de57570540bf8cb37a0458a94d138@0.0.0.0:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "cosmospool.org", - "identity": "", - "website": "http://cosmospool.org", - "details": "Cosmospool.org Delegation Services" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.400000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "100000000", - "delegator_address": "cosmos1ps7dmygt4wm72t8l9kdjetelhggsv8w7m0ezaz", - "validator_address": "cosmosvaloper1ps7dmygt4wm72t8l9kdjetelhggsv8w77mdh33", - "pubkey": "cosmosvalconspub1zcjduepqupgzsdq2w7m77h4xyrtywzx8mlqnj97ucdv7kaae78w5p7xadqfs3e34w8", - "value": { - "denom": "uatom", - "amount": "20000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A7noP7sKUSsy4PJeNJf/yApZQa/V1rcuBYk5IalYItyc" - }, - "signature": "jedggMAw6ArULMZiLKe6efia7DqPXTVWa9yz9RNoH29vDVCs8238roGA4HYonV27kf8zdp9momNToaY7fvgS2Q==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "darkqueen", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1f63lrmnn4upu722kxdhw04taxa6w50lnchnjp4", - "validator_address": "cosmosvaloper1f63lrmnn4upu722kxdhw04taxa6w50lnar88dx", - "pubkey": "cosmosvalconspub1zcjduepqqypxy7l8tav52nengx8esff2h3v78taqpj3qpcugy0rk3ee79sxs5la5u6", - "value": { - "denom": "uatom", - "amount": "100000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ay1sFLp6lSJwXRYLWsh2TBoWDZ/ocs8ctamkIqDbNeto" - }, - "signature": "EsT6nUo9HpcCBz+6EZ15lNzccaH3s/VkBPgoFBffy2M5FzWtS/2U9t1NzUIhTmo9I1vLBYWFp83LtwMRf6nslQ==" - } - ], - "memo": "5cc113055ac56e03e80a71b37127146beaf62419@45.79.106.28:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Delega", - "identity": "1BED7C08416A619F", - "website": "https://delega.io", - "details": "Your trusted validator for PoS" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1mrkn3uug9dm32hyp9tcxs5dmmuspt7nezrdmhz", - "validator_address": "cosmosvaloper1mrkn3uug9dm32hyp9tcxs5dmmuspt7ne8hewm3", - "pubkey": "cosmosvalconspub1zcjduepqxr0r707t6djym8vwrq39j7u4t3cjsx6ka0a08aew9fqh8hv50fyqck470f", - "value": { - "denom": "uatom", - "amount": "1000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A+turACQcuu0YWxdJxSt1FG2NlAoNevwUaMe4UxfenLB" - }, - "signature": "rV0m9uDoMkF5Jz71JwPLSDPHei7GJhYzu79CGOYb8QkgwFwnaMw5AYyhSCWyhcfWb/+2FslKhb2grSPE832/Mg==" - } - ], - "memo": "d490b109cf63e880fce61928331c2ea3eb73fe8a@192.168.2.238:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "figment", - "identity": "E5F274B870BDA01D", - "website": "https://figment.network", - "details": "Based in Canada. The #1 Legal and Compliant Cosmos Validator." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1hjct6q7npsspsg3dgvzk3sdf89spmlpfg8wwf7", - "validator_address": "cosmosvaloper1hjct6q7npsspsg3dgvzk3sdf89spmlpfdn6m9d", - "pubkey": "cosmosvalconspub1zcjduepqnltddase4lqjcfhup8ymg0qex3srakg54ppv06pstvwdjxkm6tmq08znvs", - "value": { - "denom": "uatom", - "amount": "4800000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A/ME5Wre92HJOJH4wBFveSeq3Yj8wZJrn/pEWc3pcrSc" - }, - "signature": "KkpNbaYCHI2B4RoUhuo0+RglExyN/xSH+b7WFhn8fIgbtVyrpk1bpPuMJqehMkjUiBrqw5/RSPoNUrn2nPgX3w==" - } - ], - "memo": "6659591b5e73d5a5cbc5e6e892d7a478564e10f9@54.39.178.218:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "firstblock.io", - "identity": "23D9B8528FC93D58", - "website": "https://firstblock.io", - "details": "You Delegate. We Validate." - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1s65zmn32zugl57ysj47s7vmfcek0rtd7jd2mp2", - "validator_address": "cosmosvaloper1s65zmn32zugl57ysj47s7vmfcek0rtd7he7wde", - "pubkey": "cosmosvalconspub1zcjduepqrc6g9m2eyy4zs7kyeph8vk5ldpgnceveelc39zf7lc32j8k3shqssevdlg", - "value": { - "denom": "uatom", - "amount": "3000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AlLytZYcIwiP/kUu5EeR9seek332Mc1857kHeiwPYFNL" - }, - "signature": "ngZIoTD7oaCbH+7jH+/SqdNq2vOxV8ssU8KDyc2Sf0V9g5PIOh0cYgoPckYhLcEZZlgy1k1VM5GIyQlEBrHbDA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Forbole", - "identity": "4A5D9C100A76D9A8", - "website": "https://www.forbole.com/cosmos-hub-validator/", - "details": "Forbole is a Genesis Validator on Cosmos Hub. We are a named winner in Game of Stakes and HackAtom3 by Cosmos. We are a very helpful contributor in both the English and Chinese community." - }, - "commission": { - "rate": "0.125000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos14kn0kk33szpwus9nh8n87fjel8djx0y0mmswhp", - "validator_address": "cosmosvaloper14kn0kk33szpwus9nh8n87fjel8djx0y070ymmj", - "pubkey": "cosmosvalconspub1zcjduepqmfxl36td7rcdzszzrk6c7kzp5l3jlw4lnxz8zms3py7qcsa9xlns7zxfd6", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AhF73wdGhoSfbDgqjxIeefFGBYtBU2PBIDG/6OhPt60+" - }, - "signature": "wzt26vJnEhSe92C8Of6MuSETfrk4cm0ya+iKEucUGUVQ4HEYvzzC3gM6cvPjGPWUuYfU8XhHpGKByUzzVy6Dzg==" - } - ], - "memo": "e20dca7582870356c7a843115374c7a97dc06ae8@10.6.0.46:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "clawmvp | 01no.de", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos17mggn4znyeyg25wd7498qxl7r2jhgue8ep585n", - "validator_address": "cosmosvaloper17mggn4znyeyg25wd7498qxl7r2jhgue8u4qjcq", - "pubkey": "cosmosvalconspub1zcjduepqlzmd0spn9m0m3eq9zp93d4w6e5tugamv44yqjzyacelnvra634fqnfec0r", - "value": { - "denom": "uatom", - "amount": "20000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A9isBJO7xtwuV0PlTRTcJJN9Vk+cYDtjD35IUExoWVGW" - }, - "signature": "DqgDxTiOvltlH1Oy2PFfvocGXHnxH8a5gDne50RjD7J+l0iglJQ5UdE2vI+F0ybQ+JXHahMJaKJebwB62tHB9g==" - } - ], - "memo": "01no.de@0.0.0.0:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Castlenode", - "identity": "", - "website": "https://www.castlenode.com/cosmos", - "details": "Castlenode is a validator operator focused on security and run by experienced professionals. Please read our Terms and Conditions on our website before delegating" - }, - "commission": { - "rate": "0.090000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.050000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1qs8tnw2t8l6amtzvdemnnsq9dzk0ag0z37gh3h", - "validator_address": "cosmosvaloper1qs8tnw2t8l6amtzvdemnnsq9dzk0ag0z52uzay", - "pubkey": "cosmosvalconspub1zcjduepqsszd2gzte82dzt0xpa3w0ky8lxhjs6zpd5ft8akmkscwujpftymsnt83qc", - "value": { - "denom": "uatom", - "amount": "14750000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A6YjD9RkuLPQ1tCzRVQoWEG1FmyNgPoVTAN1HrCkHoI9" - }, - "signature": "cA9XsVaNPNhbgTsfi6LQhaXCnxpgshINIu8N0YVNAlANKwlQKT57OihEWojs3/ycMQruSuEZi/404PSpEuaxDw==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "hashquark_cosmos", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1cgh5ksjwy2sd407lyre4l3uj2fdrqhpk84m04f", - "validator_address": "cosmosvaloper1cgh5ksjwy2sd407lyre4l3uj2fdrqhpkzp06e6", - "pubkey": "cosmosvalconspub1zcjduepq3f6wnsk6k6qu6g8n5vly4z7ajw7q930wh3qx6zkxhktnh49l40kszf5lry", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ai0Bs9o/qWp5uKB7R2w1XsvBhKpCOLOO7ZNObt3PZh2L" - }, - "signature": "9AEpXvgQnyI3G4P3YQ62+hF8lL/xe2LPM+F1j+t9mhctPsIBFU1/pfkUdwoH9NJ/d1zY44OBmjLvNFeP0N4Knw==" - } - ], - "memo": "fc8abc401ade02fdc41a41d1accc5ffdd634f9fb@10.10.10.60:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "in3s.com", - "identity": "", - "website": "https://in3s.com", - "details": "cosmosvaloper1rcp29q3hpd246n6qak7jluqep4v006cdsc2kkl" - }, - "commission": { - "rate": "1.000000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1rcp29q3hpd246n6qak7jluqep4v006cd4v7r6v", - "validator_address": "cosmosvaloper1rcp29q3hpd246n6qak7jluqep4v006cdsc2kkl", - "pubkey": "cosmosvalconspub1zcjduepq7mft6gfls57a0a42d7uhx656cckhfvtrlmw744jv4q0mvlv0dypskehfk8", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AmbZ4oUx+GWVQDUo2z+NB0YzOpj9g4Px/n8H3EbId7aC" - }, - "signature": "CISlc+hUODhDWFiY30aYhYwouOa7SZbtSzRueJRIjvZmRXJ5Gf4OQoUj5b8pU7soPJFQCXBBLdBrVQzkkKbadQ==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "liangping", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.200000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1jxv0u20scum4trha72c7ltfgfqef6nscj25050", - "validator_address": "cosmosvaloper1jxv0u20scum4trha72c7ltfgfqef6nsch7q6cu", - "pubkey": "cosmosvalconspub1zcjduepqnru7aa6ayyuwddd5qsa6tvutzs7xl9jk6pfx4ka5dr4y9d3q6eesgz9rz7", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A+MHfxshRkw5H0UDZ0IxglCOQkVF1jhZWJpgdh3ajH6r" - }, - "signature": "62IXmtbUCEG7Rq/UxWNALrnlR2kxmyy3YbkFNI/Qb0c3EuAx0a9osXkZI3Qry/5oARbq1YmksIKdgHTjezzlaA==" - } - ], - "memo": "cdfae2ab251678159b0d32be815afc64e3702574@172.24.230.219:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "cosmos-Inspiron-7570", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.070000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.200000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ma02nlc7lchu7caufyrrqt4r6v2mpsj92s3mw7", - "validator_address": "cosmosvaloper1ma02nlc7lchu7caufyrrqt4r6v2mpsj90y9wzd", - "pubkey": "cosmosvalconspub1zcjduepqxtu8am2qmf0qnglqtvkar9gaclhccfn29tsp7n82vasrtnc8m2fsulp4h2", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A74AjNDhszhX7e38QZAk5nSCqpsfBtjiUBhZakx+Xbg7" - }, - "signature": "TO4eXKAifpxjndtE25q9xp+nd7/ui7EWiLz3y4Coj6R2he59bTKqxu2nG51q0EhIMTh4Tmy7ZPkMWBXJ+tbPiQ==" - } - ], - "memo": "2f3aef5af1d925a609c66912d452cbce52d09099@172.19.3.215:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "iqlusion", - "identity": "7843656AA22520BC", - "website": "iqlusion.io", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "100000000000", - "delegator_address": "cosmos1grgelyng2v6v3t8z87wu3sxgt9m5s03xvslewd", - "validator_address": "cosmosvaloper1grgelyng2v6v3t8z87wu3sxgt9m5s03xfytvz7", - "pubkey": "cosmosvalconspub1zcjduepqdgvppnyr5c9pulsrmzr9e9rp7qpgm9jwp5yu8g3aumekgjugxacq8a9p2c", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeyMultisigThreshold", - "value": { - "threshold": "2", - "pubkeys": [ - { - "type": "tendermint/PubKeySecp256k1", - "value": "ArTJsvxtWUcdZX8fyNTR922d/O09KTy0RcWtsU2T9ysY" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "Am45Rm3Hp7G7Y6/Vnk0keHtcxBxfj158jLWuxo+QCA+C" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "A0OjtIUCFJM3AobJ9HJTWKP9RZV2+WPcwVjLgsAidrZ/" - } - ] - } - }, - "signature": "CgUIAxIBoBJA0vtPzD/AYC7skr82W0VfJl3Jn4SXIUqDzL0SijWSoC8lFHFK0HR3XwhR5Q132c3fV+h9KHPIj/7AHoochEsc/xJAErPuh81ahn/+ZQ8CAh6auyaYIhDkajWXJmBs+v39kEUIxjx8iZI8vgc9KzBfwHchMSKMaDxm9sV1rbh75qBmDg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "kochacolaj", - "identity": "1E9CE94FD0BA5CFEB901F90BC658D64D85B134D2", - "website": "", - "details": "Top 5 Game Of Stakes winner with a low commission! https://blog.cosmos.network/game-of-stakes-closing-ceremonies-eddb71d3b114#147d" - }, - "commission": { - "rate": "0.090000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1emaa7mwgpnpmc7yptm728ytp9quamsvuz92x5u", - "validator_address": "cosmosvaloper1emaa7mwgpnpmc7yptm728ytp9quamsvu837nc0", - "pubkey": "cosmosvalconspub1zcjduepqfuxvufupnsm7v5anpwd7z8ec70z2k209j7xclnm25zz7vauhyc5qjgxx3h", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A9IQHKHGskTTRO16DO7H9c325dg5HqcHoj2XTpxLGsIL" - }, - "signature": "kSGKCs8FujbEEA99OKF71rEy/hnN6U2UYj2N0uoflIN8K0/5JzNh8ziNw+rIBTtoo9zckIAlMByxeeGba7pWFg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "kytzu", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1000000", - "delegator_address": "cosmos1wtv0kp6ydt03edd8kyr5arr4f3yc52vp5g7na0", - "validator_address": "cosmosvaloper1wtv0kp6ydt03edd8kyr5arr4f3yc52vp3u2x3u", - "pubkey": "cosmosvalconspub1zcjduepq0zyaquh6c8vmjfzft43uqylf2ejjpjcvup2zrtsk40uyz8xsq29s0k4eaw", - "value": { - "denom": "uatom", - "amount": "1490000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A2Jl4SgkOkb8cD3D0GQjaDndOCbTftt9ziWQ0oQFwV7O" - }, - "signature": "aeE+ZC9nl0AYfCRn+jrVKC2lBFSUDERVLZK26DJVlHARCZwGkj8CoxMY+hs7CA9kcm05LDIWqy13hQ705Ze2rw==" - } - ], - "memo": "b236fa97193239ce5e4032be0caf55957ac17a3c@167.86.70.194:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "lunamint", - "identity": "4F26823468DD7518", - "website": "https://lunamint.com", - "details": "Always adding value to Cosmos. Check out Lunagram, the Cosmos wallet built into Telegram." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ec3p6a75mqwkv33zt543n6cnxqwun37rxqj2vl", - "validator_address": "cosmosvaloper1ec3p6a75mqwkv33zt543n6cnxqwun37rr5xlqv", - "pubkey": "cosmosvalconspub1zcjduepqd85nu5nelvcyyzcsrr0yaglh8rfvn6cv9pp3p0hgmwtk8hf3cazqc7vz5c", - "value": { - "denom": "uatom", - "amount": "6500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A5jDkVzd9IL+B6ZPeFIWW8VkZuTGQ8lOKtduG0Z37GkB" - }, - "signature": "etBUdqf+/JeKvgPIii8jen+aIefOpYTUr/8fAL98P41u8cQpAAkUg7HHaMwfDZUN1hwlQ0mpdpa6VzrnKpsrUg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "CosmosTrust-meleaTrust", - "identity": "4BE49EABAA41B8BF", - "website": "https://meleatrust.com/", - "details": "Validator service secure and trusted, we speak English, Spanish, Portuguese, Catalan." - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1zqgheeawp7cmqk27dgyctd80rd8ryhqsltfszt", - "validator_address": "cosmosvaloper1zqgheeawp7cmqk27dgyctd80rd8ryhqs6la9wc", - "pubkey": "cosmosvalconspub1zcjduepq5tm478lhn4du7l46yp6fgu9e8fcfks0j4kf87pk4z8vc3clckxzqvh2q72", - "value": { - "denom": "uatom", - "amount": "511111111" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AyPH2QpEl1JRsQtRDDfgNcQEtXzZx0QdWd/zdROcI1eM" - }, - "signature": "RRLvPZPnHLSn/aM62S6OYAR9D/IXVqia2PsAZgyBq5Ne2KytrEMHXF8rR5Wilfyi0VghiO+4bhs+/DrowP93Mw==" - } - ], - "memo": "287b57b07756a06a6583ee0f7a55184e661eacb6@51.38.113.59:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "nylira", - "identity": "6A0D65E29A4CBC8E", - "website": "https://nylira.net", - "details": "Nylira is a Cosmos validator service run by Peng Zhong @zcpeng" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1000000", - "delegator_address": "cosmos1dany3yuj5qzcyl33qjcxwc6m478a3wftv347sh", - "validator_address": "cosmosvaloper1dany3yuj5qzcyl33qjcxwc6m478a3wftf9ptuy", - "pubkey": "cosmosvalconspub1zcjduepqg93r2qwfj0vkzl8mvr0vqtnz2ukpm4785kmaw692g7s964w4mv3s95lufg", - "value": { - "denom": "uatom", - "amount": "20000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AgdcjdT2Pxb2stqtGP0pq8R/KFEhP0Moco561uulsyLj" - }, - "signature": "GWsQu+QKq4v+7UQpVJSPdRnKOhJCupsc416c7LOkZqUwz1TibxCcpDqV5KFxJCiBl/Lc4hATu/PVry/7JLfLmg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "piggy-coin.com", - "identity": "9979ae5a5da54bf04719b8c8ebdc0d24", - "website": "https://www.piggy-coin.com/", - "details": "Delegate here to support piggy-coin's hard-spoon to tendermint / cosmos" - }, - "commission": { - "rate": "0.250000000000000000", - "max_rate": "0.500000000000000000", - "max_change_rate": "0.005000000000000000" - }, - "min_self_delegation": "100000000", - "delegator_address": "cosmos1zp6kg7qlmztyw2km2af4z5ruz5vn04cpq84vjk", - "validator_address": "cosmosvaloper1zp6kg7qlmztyw2km2af4z5ruz5vn04cp9npe79", - "pubkey": "cosmosvalconspub1zcjduepq5supzpux2jafyv06qw2dnd0fzshd2enmea9zeak9emu2ft5rs8nswzlqxf", - "value": { - "denom": "uatom", - "amount": "1000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A92fKIknHSbNXRS3MpM+IUTuCJ01AG6SwabK1nMvZVoj" - }, - "signature": "iW0RF/rSEe0fXtiGn0cZrv0VHdOprJnObmd0Ziyp3u8U93oKgJF4umj/GwNJn93oHBcCnxkDlOLoJXHkD/SbDg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Polychain Labs", - "identity": "", - "website": "https://cosmos.polychainlabs.com", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos16m93gjfqvnjajzrfyszml8qm92a0w67ntjhd3d", - "validator_address": "cosmosvaloper16m93gjfqvnjajzrfyszml8qm92a0w67nwxrca7", - "pubkey": "cosmosvalconspub1zcjduepqfgl6yafrrlx0saks9w2nafptm3lvmvzwdwhmvsqmx4l6cnqfn7ss9tdah3", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A8mJRMqtUZDBLPHWEZXaPeMW7ieIyCn/7CjQaB/gojGT" - }, - "signature": "I8K3bM4gER/ONfqOdNvdvWyLALoxh7xh9sgpAF92dH1PQyFeivtGAxbDo3lqWuLerZ5q6vWEEXoA3YaGNX1wfA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Sentinel", - "identity": "D54C8032CF19C407", - "website": "sentinel.co", - "details": "We are Team-Sentinel https://github.com/sentinel-official/sentinel" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1000000", - "delegator_address": "cosmos1u6ddcsjueax884l3tfrs66497c7g86skk24gr0", - "validator_address": "cosmosvaloper1u6ddcsjueax884l3tfrs66497c7g86skn7pa0u", - "pubkey": "cosmosvalconspub1zcjduepq87zcnf8sm4ewacjafqujfevt8rhwj5qk9uwtx4ef89ctuqmndkeq446ahw", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A9OBEL9yE1gG2+gbzUxKa3T1GIPInHGkzi34CXdDXq+0" - }, - "signature": "rmc8rAi/u2kLkGaXvYvIvm9hb7zPOHyKJF0ogXg8R6Ra0AagGKTn6m2IJhPi1VzBkrjPTLlUQjJgay/N5Rdr9g==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Sikka", - "identity": "https://keybase.io/team/sikka", - "website": "sikka.tech", - "details": "Sunny Aggarwal (@sunnya97) and Dev Ojha (@ValarDragon)" - }, - "commission": { - "rate": "0.000000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "1.000000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1ey69r37gfxvxg62sh4r0ktpuc46pzjrmz29g45", - "validator_address": "cosmosvaloper1ey69r37gfxvxg62sh4r0ktpuc46pzjrm873ae8", - "pubkey": "cosmosvalconspub1zcjduepqg6y8magedjwr9p6s2c28zp28jdjtecxhn97ew6tnuzqklg63zgfspp9y3n", - "value": { - "denom": "uatom", - "amount": "20190313" - } - } - } - ], - "fee": { - "amount": null, - "gas": "566626" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeyMultisigThreshold", - "value": { - "threshold": "2", - "pubkeys": [ - { - "type": "tendermint/PubKeySecp256k1", - "value": "AldOvgv8dU9ZZzuhGydQD5FYreLhfhoBgrDKi8ZSTbCQ" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "AxUMR/GKoycWplR+2otzaQZ9zhHRQWJFt3h1bPg1ltha" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "AlI9yVj2Aejow6bYl2nTRylfU+9LjQLEl3keq0sERx9+" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "A0UvHPcvCCaIoFY9Ygh0Pxq9SZTAWtduOyinit/8uo+Q" - }, - { - "type": "tendermint/PubKeySecp256k1", - "value": "As7R9fDUnwsUVLDr1cxspp+cY9UfXfUf7i9/w+N0EzKA" - } - ] - } - }, - "signature": "CgUIBRIBSBJAYzfuW4yNj3lH4MWAzKrScBY9gEQxra+nfui3irKad04nDR5wyDIfCZEdPnnh555hVA1oLYIuEz7YAUF3ns8pExJAZlNUh6V+yz42UoGkJQY0L7veKXRWvltxOK0xxt2KdwZYqr6UA1E1ttJhGdyzlh0PyNXuYV2xGZ3UVbz5Qrx2/w==" - } - ], - "memo": "Brexit vote must be put on hold, MPs warn May" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "SparkPool", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.040000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.050000000000000000" - }, - "min_self_delegation": "100000000000", - "delegator_address": "cosmos1rwh0cxa72d3yle3r4l8gd7vyphrmjy2kydpnje", - "validator_address": "cosmosvaloper1rwh0cxa72d3yle3r4l8gd7vyphrmjy2kpe4x72", - "pubkey": "cosmosvalconspub1zcjduepq5kg8xls9l35ftulkm2rt70hexeeyr5cqqkcv4h7936z5uasvvazqla8eck", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AiAgJzJcreOXL0Ghqq3TCv4KV1y3dqULgMac4sxMLEbs" - }, - "signature": "ep2jqnCzJvSGFW6vkQbA4tQVojHSly2jduIvqHeesqZwTTSLaGMrxhbvMSne0hzt9pimv3Y1GqhUWBOR55p79Q==" - } - ], - "memo": "cba84e07b094cc836bf182d0b82a4c28e4d9546f@192.168.65.3:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "stake.zone", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.080000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.030000000000000000" - }, - "min_self_delegation": "50000000000", - "delegator_address": "cosmos1rfpar0qx3umnhu0f6wjp4hvnr3x6u538qdmsep", - "validator_address": "cosmosvaloper1rfpar0qx3umnhu0f6wjp4hvnr3x6u5389e094j", - "pubkey": "cosmosvalconspub1zcjduepqe4egjtvcewavewd4rvukeks60jeaxpujevl6kkgcwj0phpxgg3sse83m68", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AtKB3oTNvxcWGQp9h1INAe1G6m2ozq+Ev/stQS0wV/aB" - }, - "signature": "dTAR4ntqNAgxYkB/uEgO1bhit5QeXvOKTIrc/lqQL/5ZH606Apg4K2PNbeYMxnU55KSnxl7er3lg8faK6kU5Eg==" - } - ], - "memo": "123456789@192.168.100.100:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Stake Capital", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.080000000000000000", - "max_rate": "0.300000000000000000", - "max_change_rate": "0.030000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1k9a0cs97vul8w2vwknlfmpez6prv8klv29tea7", - "validator_address": "cosmosvaloper1k9a0cs97vul8w2vwknlfmpez6prv8klv03lv3d", - "pubkey": "cosmosvalconspub1zcjduepqfgpyq4xk4s96ksmkfrr7juea9kmdxkl5ht94xgpxe240743u9cvsht489p", - "value": { - "denom": "uatom", - "amount": "2500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A5GqfkKy7ureduVOAcgBW5hf/yKJ6cVxEM7bOe8Fe9m0" - }, - "signature": "Qerv6mMtvwcESO8+nciMcU7GpkrgALeJ5BGKH6XPnEguscuF5Rb6lWGPue8q/ohemWJ4vPc4twqMz4wsEhShMg==" - } - ], - "memo": "a4396a9d621dad287124da4f8861bd8d5fd99a69@10.0.1.134:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "stake.fish", - "identity": "", - "website": "stake.fish", - "details": "Winner of the Game of Stakes. Brought to you by stake.fish and bitfish." - }, - "commission": { - "rate": "0.040000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1sjllsnramtg3ewxqwwrwjxfgc4n4ef9u0tvx7u", - "validator_address": "cosmosvaloper1sjllsnramtg3ewxqwwrwjxfgc4n4ef9u2lcnj0", - "pubkey": "cosmosvalconspub1zcjduepq6fpkt3qn9xd7u44478ypkhrvtx45uhfj3uhdny420hzgsssrvh3qnzwdpe", - "value": { - "denom": "uatom", - "amount": "19000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A2/+IgTx8HlG4xa68Nkw6dXOWobR+PFOKDhMTrYS5q0r" - }, - "signature": "gOrq4fFvvAB9fCh561hK8lzKPklftQoowQ7u52gkk1Zk13i0bYa3V/aFCZWXIaxlBs74Z2jlxXHGg64TYorrYw==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "StakeWith.Us", - "identity": "", - "website": "https://stakewith.us", - "details": "Secured Staking Made Easy. Put Your Crypto to Work - Hassle Free. Disclaimer: Delegators should understand that delegation comes with slashing risk. By delegating to StakeWithUs Pte Ltd, you acknowledge that StakeWithUs Pte Ltd is not liable for any losses on your investment." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1urtpxwfuu8k57aqt0h5zhsvmjt4m2mmdxmxfwm", - "validator_address": "cosmosvaloper1urtpxwfuu8k57aqt0h5zhsvmjt4m2mmdr0juzg", - "pubkey": "cosmosvalconspub1zcjduepqqf375ynp09sdnfdld0h0y5guphjr0pey06tjnfatrk2ck96vzvcq0r0kxj", - "value": { - "denom": "uatom", - "amount": "12680000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A9QrxM2cU3P1k021CIDIsieZxK83etp7wQQB7IxF7pCL" - }, - "signature": "vxaaUIsfe0nJxYgjAA6kPq9uOJvrX3oxMfOojpnBpp9RuxqN6eJfmsfV3ZOlaF4kZwQZVWeEiHAiH+YtZhM8tA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Staking Facilities", - "identity": "6B0DF6793DE1FB1F", - "website": "stakingfacilities.com", - "details": "Earn rewards with one of the most experienced and secure validators. More than 150k USD in customer rewards paid out. We exclude liability for any financial damage resulting from delegating." - }, - "commission": { - "rate": "0.150000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "100000000000", - "delegator_address": "cosmos1x88j7vp2xnw3zec8ur3g4waxycyz7m0mcreeaj", - "validator_address": "cosmosvaloper1x88j7vp2xnw3zec8ur3g4waxycyz7m0mahdv3p", - "pubkey": "cosmosvalconspub1zcjduepqhm6gjjkwecqyfrgey96s5up7drnspnl4t3rdr79grklkg9ff6zaqnfl2dg", - "value": { - "denom": "uatom", - "amount": "100000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Aubaj/1yDFn0RecGGbjuWBun0rXWKO99oT5mfaAMwtKi" - }, - "signature": "m7QOXS7YQgJQOUgE3LXggI0Inz1/H6fjiUXuRDd6xDUgaLRdaBERJFX/491Z/9UPodukO8GAieQqNjLVupk3hA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Staking Fund ✔ - Winner of the GoS", - "identity": "805F39B20E881861", - "website": "https://www.staking.fund", - "details": "Staking Fund has been participating in the validating role since early 2018, and we are a proud winner of the Game of Stakes." - }, - "commission": { - "rate": "0.010000000000000000", - "max_rate": "0.334000000000000000", - "max_change_rate": "0.012019031323000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1000ya26q2cmh399q4c5aaacd9lmmdqp92z6l7q", - "validator_address": "cosmosvaloper1000ya26q2cmh399q4c5aaacd9lmmdqp90kw2jn", - "pubkey": "cosmosvalconspub1zcjduepqe93asg05nlnj30ej2pe3r8rkeryyuflhtfw3clqjphxn4j3u27msrr63nk", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A0sSh9hdJ/AmahR47jRwcMRtvUE5Q582oHRduBDzLwDd" - }, - "signature": "J5rzM9Vo/uegl2GTLb6/deJOrlCBTLhf/EDS1wPu2/Q/yvodFJxQXlfUo7RIp05+6u19AWVNBJhh2w/HKkGBWg==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "syncnode", - "identity": "", - "website": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos19j2hd230c3hw6ds843yu8akc0xgvdvyu83c6xl", - "validator_address": "cosmosvaloper19j2hd230c3hw6ds843yu8akc0xgvdvyuz9v02v", - "pubkey": "cosmosvalconspub1zcjduepq9ge7uqrfp9qkdapzd29tjtwrqpt2mm9meptx395ygxgm40tdc8ysrzj40a", - "value": { - "denom": "uatom", - "amount": "1495000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ahnp+4CCJLf8bdFqYv+6FN3dYAEx5fKwaVwOcKKumGzn" - }, - "signature": "7BhOphVBSpsrzz96uGT+LtW24f1nQxIJ6Z4UyaPZAp0X+/8S8mbdKylTnzxcW3THkuwgur2nGkqEWXjDpFbJLw==" - } - ], - "memo": "fbc52e72126c560697a7d9bddc969746c451859c@116.202.25.145:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Tezos Capital", - "identity": "", - "website": "https://tezos.capital", - "details": "" - }, - "commission": { - "rate": "0.200000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1s7jnk7t6yqzensdgpvkvkag022udk8429exc87", - "validator_address": "cosmosvaloper1s7jnk7t6yqzensdgpvkvkag022udk842qdjdtd", - "pubkey": "cosmosvalconspub1zcjduepqnnh28nlj55sc329ppnhcr0xx7kuc9vnsp3dpwc28wdhhxtjc7jfs9k57f7", - "value": { - "denom": "uatom", - "amount": "1500000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "Ag+I0OzjX2AHatgaW1kJjNRs+Ck/2UQe8t0eDr5Av3/6" - }, - "signature": "pFmZrSFtfH/LrHnLAyWvs9o/YJJDb9TA5RbnKxmLua1rNlOv3x+zHgelJeFCsy8n4qedMqZ9QZbxJ7snUZacQA==" - } - ], - "memo": "" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Umbrella", - "identity": "A530AC4D75991FE2", - "website": "https://umbrellavalidator.com", - "details": "Validating service from the USA ☔" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "cosmos1lktjhnzkpkz3ehrg8psvmwhafg56kfss5597tg", - "validator_address": "cosmosvaloper1lktjhnzkpkz3ehrg8psvmwhafg56kfss3q3t8m", - "pubkey": "cosmosvalconspub1zcjduepqelcwpat987h9yq0ck6g9fsc8t0mththk547gwvk0w4wnkpl0stnspr3hdc", - "value": { - "denom": "uatom", - "amount": "666" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "AqunADN83SgkEatv9N7TKhxzYgXxYC39Gt+xEBKu1/2g" - }, - "signature": "IYdZ3q6fZ39EOgn8SJMc8YNRJA0yoJ0f+vD/iIcZCfs5MzbZNzckuxMhXGfQ1MOBHdMEA55Ia1+GABWEI8iAYA==" - } - ], - "memo": "🚀" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Validator Network", - "identity": "357F80896B3311B4", - "website": "https://validator.network", - "details": "Highly resilient and secure validator operating out of Northern Europe. See website for terms of service." - }, - "commission": { - "rate": "0.125000000000000000", - "max_rate": "1.000000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "100000000", - "delegator_address": "cosmos1sxx9mszve0gaedz5ld7qdkjkfv8z992arw3rr5", - "validator_address": "cosmosvaloper1sxx9mszve0gaedz5ld7qdkjkfv8z992ax69k08", - "pubkey": "cosmosvalconspub1zcjduepqjnnwe2jsywv0kfc97pz04zkm7tc9k2437cde2my3y5js9t7cw9mstfg3sa", - "value": { - "denom": "uatom", - "amount": "14000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "A874FW2YoONx6zbQemNXwaJSqtQ6Wb9BRg0HRLWvtp2o" - }, - "signature": "DVtmJ7kqp3rdMktRn/0yHTr6zsCJBH5R4/qNHVELm1hOCwKP3nRp2Udb8EEhorqMt0Q83T7zP14nwttFagox/w==" - } - ], - "memo": "4e2e13e5552000e0a80eac8a4f291a0a3e4012f8@52.57.20.18:26656" - } - }, - { - "type": "auth/StdTx", - "value": { - "msg": [ - { - "type": "cosmos-sdk/MsgCreateValidator", - "value": { - "description": { - "moniker": "Ztake.org", - "identity": "", - "website": "https://ztake.org/", - "details": "We are a team of tech-savvy blockchain developers and enthusiasts who run nodes on PoS and PoA blockchains. We took care all of the technical setup needed, so that you could easily stake your assets." - }, - "commission": { - "rate": "0.081000000000000000", - "max_rate": "0.250000000000000000", - "max_change_rate": "0.100000000000000000" - }, - "min_self_delegation": "10", - "delegator_address": "cosmos102ruvpv2srmunfffxavttxnhezln6fnc3pf7tt", - "validator_address": "cosmosvaloper102ruvpv2srmunfffxavttxnhezln6fnc54at8c", - "pubkey": "cosmosvalconspub1zcjduepq9weu2v0za8fdcvx0w3ps972k5v7sm6h5as9qaznc437vwpfxu37q0f3lyg", - "value": { - "denom": "uatom", - "amount": "5000000000" - } - } - } - ], - "fee": { - "amount": null, - "gas": "200000" - }, - "signatures": [ - { - "pub_key": { - "type": "tendermint/PubKeySecp256k1", - "value": "ApAH7o7BzCs5sI0aACr5yojkRm4A84GG8IO9zMBaxyf1" - }, - "signature": "k6UTw4nGFkx/Bq8OosgCL05iu6mfusciANxHRHJQkpxmeujy/ehMXFvrh7ELdycKhLHR+P+7RoKdLNIUSvqs0Q==" - } - ], - "memo": "" - } - } - ] - } - } - } -} diff --git a/rpc/tests/support/health.json b/rpc/tests/support/health.json deleted file mode 100644 index 865629214..000000000 --- a/rpc/tests/support/health.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": {} -} diff --git a/rpc/tests/support/net_info.json b/rpc/tests/support/net_info.json deleted file mode 100644 index e8b7f368c..000000000 --- a/rpc/tests/support/net_info.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "listening": true, - "listeners": [ - "Listener(@)" - ], - "n_peers": "2", - "peers": [ - { - "node_info": { - "protocol_version": { - "p2p": "7", - "block": "10", - "app": "0" - }, - "id": "9d55f7d40ba4925cca86e3880bc287f30451230e", - "listen_addr": "tcp://11.22.33.44:26656", - "network": "cosmoshub-2", - "version": "0.30.1", - "channels": "4020212223303800", - "moniker": "shredder", - "other": { - "tx_index": "on", - "rpc_address": "tcp://0.0.0.0:26657" - } - }, - "is_outbound": true, - "connection_status": { - "Duration": "3350648332604", - "SendMonitor": { - "Active": true, - "Start": "2019-04-19T12:57:18.04Z", - "Duration": "3350640000000", - "Idle": "3350640000000", - "Bytes": "19", - "Samples": "1", - "InstRate": "0", - "CurRate": "0", - "AvgRate": "0", - "PeakRate": "0", - "BytesRem": "0", - "TimeRem": "0", - "Progress": 0 - }, - "RecvMonitor": { - "Active": true, - "Start": "2019-04-19T12:57:18.04Z", - "Duration": "3350640000000", - "Idle": "3350640000000", - "Bytes": "0", - "Samples": "1", - "InstRate": "0", - "CurRate": "0", - "AvgRate": "0", - "PeakRate": "0", - "BytesRem": "0", - "TimeRem": "0", - "Progress": 0 - }, - "Channels": [ - { - "ID": 48, - "SendQueueCapacity": "1", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 64, - "SendQueueCapacity": "1000", - "SendQueueSize": "0", - "Priority": "10", - "RecentlySent": "19" - }, - { - "ID": 32, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 33, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "10", - "RecentlySent": "0" - }, - { - "ID": 34, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 35, - "SendQueueCapacity": "2", - "SendQueueSize": "0", - "Priority": "1", - "RecentlySent": "0" - }, - { - "ID": 56, - "SendQueueCapacity": "1", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 0, - "SendQueueCapacity": "10", - "SendQueueSize": "0", - "Priority": "1", - "RecentlySent": "0" - } - ] - }, - "remote_ip": "11.22.33.44" - }, - { - "node_info": { - "protocol_version": { - "p2p": "7", - "block": "10", - "app": "0" - }, - "id": "a5ceaad3a1907665b2514db4e741939f0a5ab7dd", - "listen_addr": "tcp://0.0.0.0:26656", - "network": "cosmoshub-2", - "version": "0.30.1", - "channels": "4020212223303800", - "moniker": "kraang", - "other": { - "tx_index": "on", - "rpc_address": "tcp://0.0.0.0:26657" - } - }, - "is_outbound": true, - "connection_status": { - "Duration": "20412582851", - "SendMonitor": { - "Active": true, - "Start": "2019-04-19T13:52:48.28Z", - "Duration": "20400000000", - "Idle": "3100000000", - "Bytes": "209809", - "Samples": "56", - "InstRate": "0", - "CurRate": "1505", - "AvgRate": "10285", - "PeakRate": "210610", - "BytesRem": "0", - "TimeRem": "0", - "Progress": 0 - }, - "RecvMonitor": { - "Active": true, - "Start": "2019-04-19T13:52:48.28Z", - "Duration": "20400000000", - "Idle": "2920000000", - "Bytes": "222732", - "Samples": "53", - "InstRate": "0", - "CurRate": "1823", - "AvgRate": "10918", - "PeakRate": "106300", - "BytesRem": "0", - "TimeRem": "0", - "Progress": 0 - }, - "Channels": [ - { - "ID": 48, - "SendQueueCapacity": "1", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 64, - "SendQueueCapacity": "1000", - "SendQueueSize": "0", - "Priority": "10", - "RecentlySent": "0" - }, - { - "ID": 32, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "4804" - }, - { - "ID": 33, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "10", - "RecentlySent": "17208" - }, - { - "ID": 34, - "SendQueueCapacity": "100", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "43624" - }, - { - "ID": 35, - "SendQueueCapacity": "2", - "SendQueueSize": "0", - "Priority": "1", - "RecentlySent": "36" - }, - { - "ID": 56, - "SendQueueCapacity": "1", - "SendQueueSize": "0", - "Priority": "5", - "RecentlySent": "0" - }, - { - "ID": 0, - "SendQueueCapacity": "10", - "SendQueueSize": "0", - "Priority": "1", - "RecentlySent": "0" - } - ] - }, - "remote_ip": "77.66.55.44" - } - ] - } -} - diff --git a/rpc/tests/support/status.json b/rpc/tests/support/status.json deleted file mode 100644 index 5fda29176..000000000 --- a/rpc/tests/support/status.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "node_info": { - "protocol_version": { - "p2p": "7", - "block": "10", - "app": "0" - }, - "id": "6b90d376f9bfdd83c6d9351bf7b2f458b74deacc", - "listen_addr": "tcp://0.0.0.0:26656", - "network": "cosmoshub-2", - "version": "0.30.1", - "channels": "4020212223303800", - "moniker": "technodrome", - "other": { - "tx_index": "on", - "rpc_address": "tcp://0.0.0.0:26657" - } - }, - "sync_info": { - "latest_block_hash": "D4B11143B0C9CB1330BAED825C9FEF13979C91E137DF93C3974A17C9BED663ED", - "latest_app_hash": "38FE3F06E3EB936C2EE14DA6BEA15F97FEF8814824F022EE06635D7B2C39A0BA", - "latest_block_height": "410744", - "latest_block_time": "2019-04-15T13:16:17.316509229Z", - "catching_up": false - }, - "validator_info": { - "address": "C73833E9BD86D34EDAD4AFD571FB5D0926294CD5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "RblzMO4is5L1hZz6wo4kPbptzOyue6LTk4+lPhD1FRk=" - }, - "voting_power": "0" - } - } -} diff --git a/rpc/tests/support/tx_no_prove.json b/rpc/tests/support/tx_no_prove.json deleted file mode 100644 index de000f369..000000000 --- a/rpc/tests/support/tx_no_prove.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "hash": "291B44C883803751917D547238EAC419E968C0171A3154D777B2EA8EA5039C57", - "height": "2", - "index": 0, - "tx_result": { - "code": 0, - "data": "CgYKBHNlbmQ=", - "log": "[{\"events\":[{\"type\":\"message\",\"attributes\":[{\"key\":\"action\",\"value\":\"send\"},{\"key\":\"sender\",\"value\":\"cosmos1s2tw45c7stsafk42vsz9sj09jm09y6tk4qeerh\"},{\"key\":\"module\",\"value\":\"bank\"}]},{\"type\":\"transfer\",\"attributes\":[{\"key\":\"recipient\",\"value\":\"cosmos1nv3uf7hpuvk4em39vxr944hphujtuqa2xl7688\"},{\"key\":\"sender\",\"value\":\"cosmos1s2tw45c7stsafk42vsz9sj09jm09y6tk4qeerh\"},{\"key\":\"amount\",\"value\":\"1samoleans\"}]}]}]", - "info": "", - "gas_wanted": "100000", - "gas_used": "75848", - "events": [ - { - "type": "transfer", - "attributes": [ - { - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMTd4cGZ2YWttMmFtZzk2MnlsczZmODR6M2tlbGw4YzVsc2VycXRh", - "index": true - }, - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - }, - { - "key": "YW1vdW50", - "value": "MXNhbW9sZWFucw==", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "c2VuZA==", - "index": true - } - ] - }, - { - "type": "transfer", - "attributes": [ - { - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4", - "index": true - }, - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - }, - { - "key": "YW1vdW50", - "value": "MXNhbW9sZWFucw==", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "bW9kdWxl", - "value": "YmFuaw==", - "index": true - } - ] - } - ], - "codespace": "" - }, - "tx": "Cp8BCo4BChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEm4KLWNvc21vczFzMnR3NDVjN3N0c2FmazQydnN6OXNqMDlqbTA5eTZ0azRxZWVyaBItY29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4Gg4KCXNhbW9sZWFucxIBMRIJdGVzdCBtZW1vGKlGEmYKTgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQNi056vvgeqQgAUg8xRONa/j2XDlX7qcjc67RonX3JvpBIECgIIARIUCg4KCXNhbW9sZWFucxIBMRCgjQYaQLnVzSrnFPAOZ7wpXnQ3tR651N2DkYQgU9//VQrc03ysHZg3W8dVpbpEVxYO69ArPl2B5O3eTZL1a3utE0marvk=" - } -} diff --git a/rpc/tests/support/tx_search_no_prove.json b/rpc/tests/support/tx_search_no_prove.json deleted file mode 100644 index 272b57a2a..000000000 --- a/rpc/tests/support/tx_search_no_prove.json +++ /dev/null @@ -1,345 +0,0 @@ -{ - "id": "60c1e528-8854-41ee-99ac-8144282f7e9f", - "jsonrpc": "2.0", - "result": { - "total_count": "8", - "txs": [ - { - "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "height": "11", - "index": 0, - "tx": "YXN5bmMta2V5PXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "YXN5bmMta2V5" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "height": "11", - "index": 1, - "tx": "c3luYy1rZXk9dmFsdWU=", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "c3luYy1rZXk=" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "11", - "index": 2, - "tx": "Y29tbWl0LWtleT12YWx1ZQ==", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "height": "18", - "index": 0, - "tx": "dHgwPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgw" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "height": "19", - "index": 0, - "tx": "dHgxPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgx" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "height": "19", - "index": 1, - "tx": "dHgyPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgy" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "height": "20", - "index": 0, - "tx": "dHgzPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgz" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "height": "21", - "index": 0, - "tx": "dHg0PXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHg0" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - } - ] - } -} \ No newline at end of file diff --git a/rpc/tests/support/tx_search_with_prove.json b/rpc/tests/support/tx_search_with_prove.json deleted file mode 100644 index 0a2424b49..000000000 --- a/rpc/tests/support/tx_search_with_prove.json +++ /dev/null @@ -1,437 +0,0 @@ -{ - "id": "942ec9f5-1121-48f3-b3ea-d391a01429f7", - "jsonrpc": "2.0", - "result": { - "total_count": "8", - "txs": [ - { - "hash": "9F28904F9C0F3AB74A81CBA48E39124DA1C680B47FBFCBA0126870DB722BCC30", - "height": "11", - "index": 0, - "proof": { - "data": "YXN5bmMta2V5PXZhbHVl", - "proof": { - "aunts": [ - "oL+OYRo6LtD+lKo0W5A2kcPlbt4Of3c/VN57Ag54iEk=", - "wq4Wy/oF+/0xsH+eJq1SqY2BgYS2FVXbLAXNcCLkB74=" - ], - "index": "0", - "leaf_hash": "MIH5kVBA0TizrX+JVzLSdnwp6Ful2EOI0E4XpdgmK3o=", - "total": "3" - }, - "root_hash": "F54643B0051065C87DA31A654531B65F9B57380F9BF3332FF5BCA7584567268C" - }, - "tx": "YXN5bmMta2V5PXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "YXN5bmMta2V5" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "57018296EE0919C9D351F2FFEA82A8D28DE223724D79965FC8D00A7477ED48BC", - "height": "11", - "index": 1, - "proof": { - "data": "c3luYy1rZXk9dmFsdWU=", - "proof": { - "aunts": [ - "MIH5kVBA0TizrX+JVzLSdnwp6Ful2EOI0E4XpdgmK3o=", - "wq4Wy/oF+/0xsH+eJq1SqY2BgYS2FVXbLAXNcCLkB74=" - ], - "index": "1", - "leaf_hash": "oL+OYRo6LtD+lKo0W5A2kcPlbt4Of3c/VN57Ag54iEk=", - "total": "3" - }, - "root_hash": "F54643B0051065C87DA31A654531B65F9B57380F9BF3332FF5BCA7584567268C" - }, - "tx": "c3luYy1rZXk9dmFsdWU=", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "c3luYy1rZXk=" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "D63F9C23791E610410B576D8C27BB5AEAC93CC1A58522428A7B32A1276085860", - "height": "11", - "index": 2, - "proof": { - "data": "Y29tbWl0LWtleT12YWx1ZQ==", - "proof": { - "aunts": [ - "RaZ3Z52YXK7Rahqt14/2jlvLxqDpG0rmHt9ETIABLus=" - ], - "index": "2", - "leaf_hash": "wq4Wy/oF+/0xsH+eJq1SqY2BgYS2FVXbLAXNcCLkB74=", - "total": "3" - }, - "root_hash": "F54643B0051065C87DA31A654531B65F9B57380F9BF3332FF5BCA7584567268C" - }, - "tx": "Y29tbWl0LWtleT12YWx1ZQ==", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "Y29tbWl0LWtleQ==" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "FCB86F71C4EFF43E13C51FA12791F6DD1DDB8600A51131BE2289614D6882F6BE", - "height": "18", - "index": 0, - "proof": { - "data": "dHgwPXZhbHVl", - "proof": { - "aunts": [], - "index": "0", - "leaf_hash": "3UnhxGnCw+sKtov5uD2YZbCP79vHFwLMc1ZPTaVocKQ=", - "total": "1" - }, - "root_hash": "DD49E1C469C2C3EB0AB68BF9B83D9865B08FEFDBC71702CC73564F4DA56870A4" - }, - "tx": "dHgwPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgw" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "9F424A8E634AAF63CFA61151A306AA788C9CC792F16B370F7867ED0BD972476C", - "height": "19", - "index": 0, - "proof": { - "data": "dHgxPXZhbHVl", - "proof": { - "aunts": [ - "0eF/BEMF82Y/mIMIM0HX/isU2jI44Z2rAor5MA0PrKM=" - ], - "index": "0", - "leaf_hash": "QnwQk7ERU9NjeD1GlLa4H8lscIRFD3evj6SZulKp3T8=", - "total": "2" - }, - "root_hash": "05E17857792BBFE205D9F8C2498F6C05A3603D046EDF57C50D037D36804F35D1" - }, - "tx": "dHgxPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgx" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "C9D123E2CF19B9F0EC3CA1F64CD3BF0735397C84778B40B3EB5C49A752D53BF4", - "height": "19", - "index": 1, - "proof": { - "data": "dHgyPXZhbHVl", - "proof": { - "aunts": [ - "QnwQk7ERU9NjeD1GlLa4H8lscIRFD3evj6SZulKp3T8=" - ], - "index": "1", - "leaf_hash": "0eF/BEMF82Y/mIMIM0HX/isU2jI44Z2rAor5MA0PrKM=", - "total": "2" - }, - "root_hash": "05E17857792BBFE205D9F8C2498F6C05A3603D046EDF57C50D037D36804F35D1" - }, - "tx": "dHgyPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgy" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "73117D6A783E4A37C1D9AD48744AD9FCC0D094C48AB8322FA11CD901C5174CFD", - "height": "20", - "index": 0, - "proof": { - "data": "dHgzPXZhbHVl", - "proof": { - "aunts": [], - "index": "0", - "leaf_hash": "jt+3kmBnxAUZK7c0gytFbKegUaR38TB3aAlKsIZ0RNU=", - "total": "1" - }, - "root_hash": "8EDFB7926067C405192BB734832B456CA7A051A477F1307768094AB0867444D5" - }, - "tx": "dHgzPXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHgz" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - }, - { - "hash": "C349F213F04B4E8E749C6656E4C299E3BF22F4FAF141291A5C083336AD1A413B", - "height": "21", - "index": 0, - "proof": { - "data": "dHg0PXZhbHVl", - "proof": { - "aunts": [], - "index": "0", - "leaf_hash": "oZPOdbpVGhDcNY2OaPjybbnfL2SMaDmXm9ufOgruPCA=", - "total": "1" - }, - "root_hash": "A193CE75BA551A10DC358D8E68F8F26DB9DF2F648C6839979BDB9F3A0AEE3C20" - }, - "tx": "dHg0PXZhbHVl", - "tx_result": { - "code": 0, - "codespace": "", - "data": null, - "events": [ - { - "attributes": [ - { - "index": true, - "key": "Y3JlYXRvcg==", - "value": "Q29zbW9zaGkgTmV0b3dva28=" - }, - { - "index": true, - "key": "a2V5", - "value": "dHg0" - }, - { - "index": true, - "key": "aW5kZXhfa2V5", - "value": "aW5kZXggaXMgd29ya2luZw==" - }, - { - "index": false, - "key": "bm9pbmRleF9rZXk=", - "value": "aW5kZXggaXMgd29ya2luZw==" - } - ], - "type": "app" - } - ], - "gas_used": "0", - "gas_wanted": "0", - "info": "", - "log": "" - } - } - ] - } -} \ No newline at end of file diff --git a/rpc/tests/support/tx_with_prove.json b/rpc/tests/support/tx_with_prove.json deleted file mode 100644 index 0b6ba25ae..000000000 --- a/rpc/tests/support/tx_with_prove.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": -1, - "result": { - "hash": "291B44C883803751917D547238EAC419E968C0171A3154D777B2EA8EA5039C57", - "height": "2", - "index": 0, - "tx_result": { - "code": 0, - "data": "CgYKBHNlbmQ=", - "log": "[{\"events\":[{\"type\":\"message\",\"attributes\":[{\"key\":\"action\",\"value\":\"send\"},{\"key\":\"sender\",\"value\":\"cosmos1s2tw45c7stsafk42vsz9sj09jm09y6tk4qeerh\"},{\"key\":\"module\",\"value\":\"bank\"}]},{\"type\":\"transfer\",\"attributes\":[{\"key\":\"recipient\",\"value\":\"cosmos1nv3uf7hpuvk4em39vxr944hphujtuqa2xl7688\"},{\"key\":\"sender\",\"value\":\"cosmos1s2tw45c7stsafk42vsz9sj09jm09y6tk4qeerh\"},{\"key\":\"amount\",\"value\":\"1samoleans\"}]}]}]", - "info": "", - "gas_wanted": "100000", - "gas_used": "75848", - "events": [ - { - "type": "transfer", - "attributes": [ - { - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMTd4cGZ2YWttMmFtZzk2MnlsczZmODR6M2tlbGw4YzVsc2VycXRh", - "index": true - }, - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - }, - { - "key": "YW1vdW50", - "value": "MXNhbW9sZWFucw==", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "YWN0aW9u", - "value": "c2VuZA==", - "index": true - } - ] - }, - { - "type": "transfer", - "attributes": [ - { - "key": "cmVjaXBpZW50", - "value": "Y29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4", - "index": true - }, - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - }, - { - "key": "YW1vdW50", - "value": "MXNhbW9sZWFucw==", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "c2VuZGVy", - "value": "Y29zbW9zMXMydHc0NWM3c3RzYWZrNDJ2c3o5c2owOWptMDl5NnRrNHFlZXJo", - "index": true - } - ] - }, - { - "type": "message", - "attributes": [ - { - "key": "bW9kdWxl", - "value": "YmFuaw==", - "index": true - } - ] - } - ], - "codespace": "" - }, - "tx": "Cp8BCo4BChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEm4KLWNvc21vczFzMnR3NDVjN3N0c2FmazQydnN6OXNqMDlqbTA5eTZ0azRxZWVyaBItY29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4Gg4KCXNhbW9sZWFucxIBMRIJdGVzdCBtZW1vGKlGEmYKTgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQNi056vvgeqQgAUg8xRONa/j2XDlX7qcjc67RonX3JvpBIECgIIARIUCg4KCXNhbW9sZWFucxIBMRCgjQYaQLnVzSrnFPAOZ7wpXnQ3tR651N2DkYQgU9//VQrc03ysHZg3W8dVpbpEVxYO69ArPl2B5O3eTZL1a3utE0marvk=", - "proof": { - "root_hash": "69C402D84BC672506F1B3611046B8B25289C2600FD7A007689C5949A33206557", - "data": "Cp8BCo4BChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEm4KLWNvc21vczFzMnR3NDVjN3N0c2FmazQydnN6OXNqMDlqbTA5eTZ0azRxZWVyaBItY29zbW9zMW52M3VmN2hwdXZrNGVtMzl2eHI5NDRocGh1anR1cWEyeGw3Njg4Gg4KCXNhbW9sZWFucxIBMRIJdGVzdCBtZW1vGKlGEmYKTgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQNi056vvgeqQgAUg8xRONa/j2XDlX7qcjc67RonX3JvpBIECgIIARIUCg4KCXNhbW9sZWFucxIBMRCgjQYaQLnVzSrnFPAOZ7wpXnQ3tR651N2DkYQgU9//VQrc03ysHZg3W8dVpbpEVxYO69ArPl2B5O3eTZL1a3utE0marvk=", - "proof": { - "total": "1", - "index": "0", - "leaf_hash": "acQC2EvGclBvGzYRBGuLJSicJgD9egB2icWUmjMgZVc=", - "aunts": [] - } - } - } -} diff --git a/rpc/tests/support/validators.json b/rpc/tests/support/validators.json deleted file mode 100644 index 1e0ef5970..000000000 --- a/rpc/tests/support/validators.json +++ /dev/null @@ -1,595 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": "", - "result": { - "block_height": "42", - "validators": [ - { - "address": "000001E443FD237E4B616E2FA69DF4EE3D49A94F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "9tK9IT+FPdf2qm+5c2qaxi10sWP+3erWTKgftn2PaQM=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "000AA5ABF590A815EBCBDAE070AFF50BE571EB8B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "yWPYIfSf5yi/MlBzEZx2yMhOJ/daXRx8Eg3NOso8V7c=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "02A248C86C78ED6A824D510A8B7AA4C1D290D2DC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "by0WjAY1EHgpi2fCIvggfrmvZdOjl+GpyGLnlySbIVE=" - }, - "voting_power": "100000", - "proposer_priority": "-987557" - }, - { - "address": "064CF05857B556FED63AC32821FF904312D0F2C8", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "zXKJLZjLusy5tRs5bNoafLPTB5LLP6tZGHSeG4TIRGE=" - }, - "voting_power": "100000", - "proposer_priority": "-987557" - }, - { - "address": "099E2B09583331AFDE35E5FA96673D2CA7DEA316", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "e3BehnEIlGUAnJYn9V8gBXuMh4tXO8xxlxyXD1APGyk=" - }, - "voting_power": "30000", - "proposer_priority": "-2116475" - }, - { - "address": "18C78D135C9D81D74F6234DBD268C47F0F89E844", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "FrxZm4ptkt0QtyLA5iVCqTmWD6AlrbVXVeornQlePeI=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "1E9CE94FD0BA5CFEB901F90BC658D64D85B134D2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TwzOJ4GcN+ZTswub4R8488SrKeWXjY/PaqCF5neXJig=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "2199EAE894CA391FA82F01C2C614BFEB103D056C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "C+VWc34ZF6n/QoIAXo4191OwKxQWpbFnrGKCqcNbe1E=" - }, - "voting_power": "100000", - "proposer_priority": "-987557" - }, - { - "address": "2B19594437F1920B5AF6461FAB81AEC99790FEB1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Sj+idSMfzPh20CuVPqQr3H7NsE5rr7ZAGzV/rEwJn6E=" - }, - "voting_power": "200000", - "proposer_priority": "212443" - }, - { - "address": "2C9CCC317FB283D54AC748838A64F29106039E51", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZOvaws6Rz4Pl8mThEEh3IR7rsnx213jY9smYC1GcC6o=" - }, - "voting_power": "500", - "proposer_priority": "20500" - }, - { - "address": "31920F9BC3A39B66876CC7D6D5E589E10393BF0E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lh/p8UTp1kF8+4noOeInUG3PuWpFzk6Mnopj0updt4I=" - }, - "voting_power": "4500", - "proposer_priority": "184500" - }, - { - "address": "3363E8F97B02ECC00289E72173D827543047ACDA", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "mPnu910hOOa1tAQ7pbOLFDxvllbQUmrbtGjqQrYg1nM=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "42D6705E716616B4A5442BDAA050B7C6E9FDDE43", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "K7PFMeLp0twwz3RDAvlWoz0N6vTsCg6KeKx8xwUm5Hw=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "4906F2A5334D906A4C63F9E9D61527A9F593C4EF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "1o6K5D3m5LNGg7R5gSp/37/hcy6y32FxaC3v09Cikbc=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "49BBFB1BA1A75052E3226E8E1E0EFEB33918B8B2", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fjKz5EcrpVII/MzwTF/d+3FHEIMJtSZfU9WMaH+b/Ok=" - }, - "voting_power": "100000", - "proposer_priority": "-1097557" - }, - { - "address": "4C92230FAC162303D981C06DD22663A4FC7622BC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "QahmjM81l/oM+Yu8yUVFSi8UzyE/boMd6vTbSdpGFwE=" - }, - "voting_power": "10000", - "proposer_priority": "410000" - }, - { - "address": "4E9CB39F4B1FA617339744A5600B62802652D69C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "nO6jz/KlIYiooQzvgbzG9bmCsnAMWhdhR3Nvcy5Y9JM=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "51DB2566204EE266427EA8A6CB719835AB170BE9", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ovdfH/edW89+uiB0lHC5OnCbQfKtkn8G1RHZiOP4sYQ=" - }, - "voting_power": "511", - "proposer_priority": "20951" - }, - { - "address": "57FEB2461AA77EC70036C636890B8F47CB4FCB0D", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "SC5O3o35vzC4Z4RbtfltO6kOIewKd7na5XcITeOXvQQ=" - }, - "voting_power": "21", - "proposer_priority": "861" - }, - { - "address": "5AB353B748D45F20DFCE19D73BA89F26E1C34CF7", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "P4WJpPDdcu7iXUg5JOWLOO7pUBYvHLNXKTlwvgNzbbI=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "671460930CCDC9B06C5D055E4D550EB8DAF2291E", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "2k346W3w8NFAQh21j1hBp+Mvur+ZhHFuEQk8DEOlN+c=" - }, - "voting_power": "5020", - "proposer_priority": "205260" - }, - { - "address": "679B89785973BE94D4FDF8B66F84A929932E91C5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Roh99RlsnDKHUFYUcQVHk2S84NeZfZdpc+CBb6NREhM=" - }, - "voting_power": "20", - "proposer_priority": "820" - }, - { - "address": "696ABC95186FD65A07050C28AB00C9358A315030", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "GghJGDl/JZSZ07B2ARdvvJ8SPKtoi/dh8PbYSui359I=" - }, - "voting_power": "1", - "proposer_priority": "41" - }, - { - "address": "6F5F44F6FD7CD1642FFB8B12215BAE814A1BE08C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "4FAoNAp3t+9epiDWRwjH38E5F9zDWet3ufHdQPjdaBM=" - }, - "voting_power": "20000", - "proposer_priority": "820000" - }, - { - "address": "70C5B4E6779C59A24CFD9146581E27021C2AEC26", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "aek+Unn7MEILEBjeTqP3ONLJ6wwoQxC+6NuXY90xx0Q=" - }, - "voting_power": "6500", - "proposer_priority": "266500" - }, - { - "address": "732CEEF54C374DDC6ADECBFD707AEFD07FEDC143", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "HjSC7VkhKih6xMhudlqfaFE8ZZnP8RKJPv4iqR7RhcE=" - }, - "voting_power": "3000", - "proposer_priority": "123000" - }, - { - "address": "77064757FCC7828F98B33525B4599DB0FD08DC37", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "cLeIVsGGVkt5M/YExv5I67pYj1uYmYcsvY60PIVIxB4=" - }, - "voting_power": "42", - "proposer_priority": "1722" - }, - { - "address": "7B3A2EFE5B3FCDF819FCF52607314CEFE4754BB6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "11pGwt6bot1EC5xeug8mulFNBBWsHV+X7XrxLUmTNF8=" - }, - "voting_power": "4500", - "proposer_priority": "184500" - }, - { - "address": "7F225CB9ACF7D34C993807A7F9CB3B2851386DE1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "v6sR0bx6aRF0QxLbyIpKW4MTk9ndKf33PDN/uffH6NA=" - }, - "voting_power": "100", - "proposer_priority": "4100" - }, - { - "address": "808D6B054A0B6D3FF5F5EAF0A65CFC64C543F833", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "486fL5jJ7HOtGXXdkei2Sy1OijidPiiw4b/OhnCzNw4=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "81965FE8A15FA8078C9202F32E4CFA72F85F2A22", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "PflSgb+lC1GI22wc6N/54cNzD7KSYQyCWR5LuQxjYVY=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "8328647F309C8AA148CDA5595145E13E455CA704", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "AmPqEmF5YNmlv2vu8lEcDeQ3hyR+lymnqx2VixdMEzA=" - }, - "voting_power": "12680", - "proposer_priority": "519880" - }, - { - "address": "91C823A744DE50F91C17A46B624EDF8F7150A7DD", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/VS/bgueXBoNDsrzxxaX64RIL//2wHb9VZ0Jd67+AqQ=" - }, - "voting_power": "595150", - "proposer_priority": "-474858" - }, - { - "address": "95E060D07713070FE9822F6C50BD76BCCBF9F17A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ahgQzIOmCh5+A9iGXJRh8AKNlk4NCcOiPebzZEuIN3A=" - }, - "voting_power": "1117675", - "proposer_priority": "324236" - }, - { - "address": "991B742CC8660B40321F77873644C195195D4178", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "2HcS9L0H/gGduyui5z4BeyKmMDcG0GWp6Qu8WpekvcE=" - }, - "voting_power": "20000", - "proposer_priority": "820000" - }, - { - "address": "9C17C94F7313BB4D6E064287BEEDE5D3888E8855", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Mvh+7UDaXgmj4Fst0ZUdx++MJmoq4B9M6mdgNc8H2pM=" - }, - "voting_power": "100000", - "proposer_priority": "-1097557" - }, - { - "address": "9D07B301D23C547266D55D1B6C5A78CA473383A1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "oVap7iG9La5g76ufP2SaLz55rzlTSV833KRAqp+NOpU=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "9EE94DBB86F72337192BF291B0E767FD2729F00A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "hATVIEvJ1NEt5g9i59iH+a8oaEFtErP227Qw7kgpWTc=" - }, - "voting_power": "14750", - "proposer_priority": "604750" - }, - { - "address": "AC2D56057CD84765E6FBE318979093E8E44AA18F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "0kNlxBMpm+5WtfHIG1xsWatOXTKPLtmSqn3EiEIDZeI=" - }, - "voting_power": "19000", - "proposer_priority": "779000" - }, - { - "address": "B00A6323737F321EB0B8D59C6FD497A14B60938A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "cOQZvh/h9ZioSeUMZB/1Vy1Xo5x2sjrVjlE/qHnYifM=" - }, - "voting_power": "397062", - "proposer_priority": "1874734" - }, - { - "address": "B0155252D73B7EEB74D2A8CC814397E66970A839", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "w3rKE+tQoLK8G+XPmjn+NszCk07iQ0sWaBbN5hQZcBY=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "B0765A2F6FCC11D8AC46275FAC06DD35F54217C1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "inTpwtq2gc0g86M+Sovdk7wCxe68QG0Kxr2XO9S/q+0=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "B34591DA79AAD0213534E2E915F50DE5CDBDF250", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "m0thJvdnGUsrANKJx+aM9Em4IN17v5mXHilLzDkeujQ=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "B4E1085F1C9EBB0EA994452CB1B8124BA89BED1A", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "+LbXwDMu37jkBRBLFtXazRfEd2ytSAkIncZ/Ng+6jVI=" - }, - "voting_power": "20000", - "proposer_priority": "820000" - }, - { - "address": "B543A7DF48780AEFEF593A003CD060B593C4E6B5", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KjPuAGkJQWb0ImqKuS3DAFat7LvIVmiWhEGRur1twck=" - }, - "voting_power": "1495", - "proposer_priority": "61295" - }, - { - "address": "B6C5D0EEBE1ABB66039A90B80820C10A9CBCA95C", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "AQJie+dfWUVPM0GPmCUqvFnjr6AMogDjiCPHaOc+LA0=" - }, - "voting_power": "100", - "proposer_priority": "4100" - }, - { - "address": "BAC33F340F3497751F124868F049EC2E8930AC2F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "9KA7fKlALPdKPb7SM4UGlpnbSU4U9U1A4c3u8V2KdTs=" - }, - "voting_power": "131140", - "proposer_priority": "-93897" - }, - { - "address": "BF4CB4D59D19D451CF5E7BC49349DF4AA222D78B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "eInQcvrB2bkkSV1jwBPpVmUgywzgVCGuFqv4QRzQAos=" - }, - "voting_power": "1490", - "proposer_priority": "61090" - }, - { - "address": "C2356622B495725961B5B201A382DD57CD3305EC", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "pZBzfgX8aJXz9tqGvz75NnJB0wAFsMrfxY6FTnYMZ0Q=" - }, - "voting_power": "100000", - "proposer_priority": "-1197557" - }, - { - "address": "C52ACDB32057F5C731BBDD48460B93C3500DD324", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lgJcii0W2QanDlXpb/9gZJAJ3X9l+tqArhYAmNUJ1lw=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "C6D8D6D4DD2A41D2D1B53982196519FA314E7CB4", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "QWI1AcmT2WF8+2DewC5iVywd18elt9doqkegXVXV2yM=" - }, - "voting_power": "20000", - "proposer_priority": "820000" - }, - { - "address": "CA6696F5FE66A480BF21460319BE979930852DD0", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "xQim88WOJcW/E9M8u4Ym+wN0Itoa1Nu4ubS/2jl236c=" - }, - "voting_power": "13000", - "proposer_priority": "533000" - }, - { - "address": "CC05882978FC5FDD6A7721687E14C0299AE004B8", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "fUj2rJ8mWqSdo8FX47dhWni++/oxOSduCBgymD4GCiU=" - }, - "voting_power": "50000", - "proposer_priority": "-152660" - }, - { - "address": "CEB8DB4286061B32209D33E2ADF6756ACDD7E005", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "pDgRB4ZUupIx+gOU2bXpFC7VZnvPSiz2xc74pK6Dgec=" - }, - "voting_power": "1000", - "proposer_priority": "41000" - }, - { - "address": "D14A542E8756C3A942D9FD8873DC2E9A7798A17F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "Zvd+ILfG9q1jPnZfOOYdZOuNLThLdCRPkvRV+HrXkCs=" - }, - "voting_power": "1500", - "proposer_priority": "61500" - }, - { - "address": "D3DB7197312CD60A71E291A66D430B20D197CF41", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "K9Sxg6Dc+9JR161k2R/yCoGeIQcenTp1OzCcEZFPo14=" - }, - "voting_power": "100000", - "proposer_priority": "-1197567" - }, - { - "address": "D4C63291134A25AB7E0AF43C08039341D733733B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "MN4/P8vTZE2djhgiWXuVXHEoG1br+vP3LipBc92Uekg=" - }, - "voting_power": "1000", - "proposer_priority": "41000" - }, - { - "address": "D9F8A41B782AA6A66ADC81F953923C7DCE7B6001", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "n9bW9hmvwSwm/AnJtDwZNGA+2RSoQsfoMFsc2Rrb0vY=" - }, - "voting_power": "4800", - "proposer_priority": "196800" - }, - { - "address": "DA6AAAA959C9EF88A3EB37B1F107CB2667EBBAAB", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "KbhRasSMxRtStejqK/Ayzexm/DtavlfbNjWGznPXMlE=" - }, - "voting_power": "4900", - "proposer_priority": "200900" - }, - { - "address": "E800740C68C81B30345C3AE2BA638FA56FF67EEF", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "vvSJSs7OAESNGSF1CnA+aOcAz/VcRtH4qB2/ZBUp0Lo=" - }, - "voting_power": "100000", - "proposer_priority": "-1197567" - }, - { - "address": "EE73A19751D58C5EC044C11E3FB7AE685A10D2C1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "lObsqlAjmPsnBfBE+orb8vBbKrH2G5VskSUlAq/YcXc=" - }, - "voting_power": "14000", - "proposer_priority": "574000" - }, - { - "address": "F1755B14D0F358747185935F820FC06BE602B51F", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ppQFrqp0Ab3u4ZUZtAYtCMOcfFinKeu1lgg9pU13HFg=" - }, - "voting_power": "5000", - "proposer_priority": "205000" - }, - { - "address": "F4CAB410DE5567DB203BD56C694FB78D482479A1", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "ZihmjCxvIZinDz1hTU69024uNIKWyOkZVE2Q5Sbwl58=" - }, - "voting_power": "100", - "proposer_priority": "4100" - }, - { - "address": "F919902709B7482F01C030E8B57BF93B8D87043B", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "TaxOZNOCv+G5WzK3Apz3z27xyZVWSgOeGMR3ClxIrQM=" - }, - "voting_power": "100000", - "proposer_priority": "-1791217" - }, - { - "address": "FA0E5DFACCDCF74957A742144FE55BE61D433377", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "SgJAVNasC6tDdkjH6XM9LbbTW/S6y1MgJsqq/1Y8Lhk=" - }, - "voting_power": "2500", - "proposer_priority": "102500" - } - ], - "total": "65" - } -} diff --git a/tendermint/Cargo.toml b/tendermint/Cargo.toml index 1ac31a315..6ee3f5f14 100644 --- a/tendermint/Cargo.toml +++ b/tendermint/Cargo.toml @@ -34,7 +34,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] async-trait = { version = "0.1", default-features = false } -bytes = { version = "1.0", default-features = false } +bytes = { version = "1.0", default-features = false, features = ["serde"] } chrono = { version = "0.4.19", default-features = false, features = ["serde"] } ed25519 = { version = "1.3", default-features = false } ed25519-dalek = { version = "1", default-features = false, features = ["u64_backend"] } diff --git a/tendermint/src/abci.rs b/tendermint/src/abci.rs index 9a0f84761..cb039806d 100644 --- a/tendermint/src/abci.rs +++ b/tendermint/src/abci.rs @@ -1,29 +1,53 @@ -//! Application BlockChain Interface (ABCI) +//! Application BlockChain Interface ([ABCI]) is the interface between Tendermint +//! (a consensus engine for Byzantine-fault-tolerant replication of a state +//! machine) and an application (the state machine to be replicated). //! -//! NOTE: This module contains types for ABCI responses as consumed from RPC -//! endpoints. It does not contain an ABCI protocol implementation. +//! Using ABCI involves writing an application driven by ABCI methods, exposing +//! that application as an ABCI server, and having Tendermint connect to the +//! server as an ABCI client. //! -//! For that, see: +//! This module does not include an ABCI server implementation itself. Instead, +//! it provides a common set of Rust domain types that model the ABCI protocol, +//! which can be used by both ABCI applications and ABCI server implementations. //! -//! +//! One ABCI server implementation is provided by the [`tendermint_abci`][tmabci] +//! crate. +//! +//! Each ABCI method corresponds to a request/response pair. ABCI requests are +//! modeled by the [`Request`] enum, and responses are modeled by the +//! [`Response`] enum. As described in the [methods and types][mat] page, ABCI +//! methods are split into four categories. Tendermint opens one ABCI connection +//! for each category of messages. These categories are modeled by the +//! [`MethodKind`] enum and by per-category request and response enums: +//! +//! * [`ConsensusRequest`] / [`ConsensusResponse`] for [`MethodKind::Consensus`] methods; +//! * [`MempoolRequest`] / [`MempoolResponse`] for [`MethodKind::Mempool`] methods; +//! * [`InfoRequest`] / [`InfoResponse`] for [`MethodKind::Info`] methods; +//! * [`SnapshotRequest`] / [`SnapshotResponse`] for [`MethodKind::Snapshot`] methods. +//! +//! The domain types in this module have conversions to and from the Protobuf +//! types defined in the [`tendermint_proto`] crate. These conversions are +//! required for ABCI server implementations, which use the protobufs to +//! communicate with Tendermint, but should not be required for ABCI +//! applications, which should use the domain types in an interface defined by +//! their choice of ABCI server implementation. +//! +//! [ABCI]: https://docs.tendermint.com/master/spec/abci/ +//! [mat]: https://docs.tendermint.com/master/spec/abci/abci.html +//! [tmabci]: https://github.com/informalsystems/tendermint-rs/tree/master/abci + +mod event; +mod kind; + +pub mod request; +pub mod response; +pub mod types; -mod code; -mod data; -mod gas; -mod info; -mod log; -mod path; -pub mod responses; -pub mod tag; -pub mod transaction; +pub use event::{Event, EventAttribute, EventAttributeIndexExt}; +#[doc(inline)] pub use self::{ - code::Code, - data::Data, - gas::Gas, - info::Info, - log::Log, - path::Path, - responses::{DeliverTx, Event, Responses}, - transaction::Transaction, + kind::MethodKind, + request::{ConsensusRequest, InfoRequest, MempoolRequest, Request, SnapshotRequest}, + response::{ConsensusResponse, InfoResponse, MempoolResponse, Response, SnapshotResponse}, }; diff --git a/tendermint/src/abci/doc/request-applysnapshotchunk.md b/tendermint/src/abci/doc/request-applysnapshotchunk.md new file mode 100644 index 000000000..fe1c35598 --- /dev/null +++ b/tendermint/src/abci/doc/request-applysnapshotchunk.md @@ -0,0 +1,21 @@ +Applies a snapshot chunk. + +The application can choose to refetch chunks and/or ban P2P peers as +appropriate. Tendermint will not do this unless instructed by the +application. + +The application may want to verify each chunk, e.g., by attaching chunk +hashes in [`Snapshot::metadata`] and/or incrementally verifying contents +against `app_hash`. + +When all chunks have been accepted, Tendermint will make an ABCI [`Info`] +request to verify that `last_block_app_hash` and `last_block_height` match +the expected values, and record the `app_version` in the node state. It then +switches to fast sync or consensus and joins the network. + +If Tendermint is unable to retrieve the next chunk after some time (e.g., +because no suitable peers are available), it will reject the snapshot and try +a different one via `OfferSnapshot`. The application should be prepared to +reset and accept it or abort as appropriate. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#applysnapshotchunk) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-beginblock.md b/tendermint/src/abci/doc/request-beginblock.md new file mode 100644 index 000000000..44b98920a --- /dev/null +++ b/tendermint/src/abci/doc/request-beginblock.md @@ -0,0 +1,6 @@ +Signals the beginning of a new block. + +Called prior to any [`DeliverTx`]s. The `header` contains the height, +timestamp, and more -- it exactly matches the Tendermint block header. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#beginblock) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-checktx.md b/tendermint/src/abci/doc/request-checktx.md new file mode 100644 index 000000000..7d97a6287 --- /dev/null +++ b/tendermint/src/abci/doc/request-checktx.md @@ -0,0 +1,11 @@ +Check whether a transaction should be included in the mempool. + +`CheckTx` is not involved in processing blocks, only in deciding whether a +transaction should be included in the mempool. Every node runs `CheckTx` +before adding a transaction to its local mempool. The transaction may come +from an external user or another node. `CheckTx` need not execute the +transaction in full, but can instead perform lightweight or statateful +validation (e.g., checking signatures or account balances) instead of more +expensive checks (like running code in a virtual machine). + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#checktx) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-commit.md b/tendermint/src/abci/doc/request-commit.md new file mode 100644 index 000000000..0013b8302 --- /dev/null +++ b/tendermint/src/abci/doc/request-commit.md @@ -0,0 +1,4 @@ +Signals the application that it can write the queued state transitions +from the block to its state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#commit) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-delivertx.md b/tendermint/src/abci/doc/request-delivertx.md new file mode 100644 index 000000000..4d449cc56 --- /dev/null +++ b/tendermint/src/abci/doc/request-delivertx.md @@ -0,0 +1,3 @@ +Execute a transaction against the application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#delivertx) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-echo.md b/tendermint/src/abci/doc/request-echo.md new file mode 100644 index 000000000..92658169f --- /dev/null +++ b/tendermint/src/abci/doc/request-echo.md @@ -0,0 +1,3 @@ +Echoes a string to test an ABCI implementation. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#echo) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-endblock.md b/tendermint/src/abci/doc/request-endblock.md new file mode 100644 index 000000000..6e23b6d7c --- /dev/null +++ b/tendermint/src/abci/doc/request-endblock.md @@ -0,0 +1,5 @@ +Signals the end of a block. + +Called after all transactions, and prior to each `Commit`. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#endblock) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-flush.md b/tendermint/src/abci/doc/request-flush.md new file mode 100644 index 000000000..c556d8b2d --- /dev/null +++ b/tendermint/src/abci/doc/request-flush.md @@ -0,0 +1,3 @@ +Indicates that any pending requests should be completed and their responses flushed. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#flush) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-info.md b/tendermint/src/abci/doc/request-info.md new file mode 100644 index 000000000..471ec36c7 --- /dev/null +++ b/tendermint/src/abci/doc/request-info.md @@ -0,0 +1,3 @@ +Requests information about the application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#info) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-initchain.md b/tendermint/src/abci/doc/request-initchain.md new file mode 100644 index 000000000..49180f351 --- /dev/null +++ b/tendermint/src/abci/doc/request-initchain.md @@ -0,0 +1,3 @@ +Called on genesis to initialize chain state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#initchain) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-listsnapshots.md b/tendermint/src/abci/doc/request-listsnapshots.md new file mode 100644 index 000000000..bc89accad --- /dev/null +++ b/tendermint/src/abci/doc/request-listsnapshots.md @@ -0,0 +1,3 @@ +Asks the application for a list of snapshots. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#listsnapshots) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-loadsnapshotchunk.md b/tendermint/src/abci/doc/request-loadsnapshotchunk.md new file mode 100644 index 000000000..70b686d41 --- /dev/null +++ b/tendermint/src/abci/doc/request-loadsnapshotchunk.md @@ -0,0 +1,3 @@ +Used during state sync to retrieve snapshot chunks from peers. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#loadsnapshotchunk) \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-offersnapshot.md b/tendermint/src/abci/doc/request-offersnapshot.md new file mode 100644 index 000000000..db0e60b17 --- /dev/null +++ b/tendermint/src/abci/doc/request-offersnapshot.md @@ -0,0 +1,20 @@ +Offers a list of snapshots to the application. + +`OfferSnapshot` is called when bootstrapping a node using state sync. The +application may accept or reject snapshots as appropriate. Upon accepting, +Tendermint will retrieve and apply snapshot chunks via +[`ApplySnapshotChunk`]. The application may also choose to reject a snapshot +in the chunk response, in which case it should be prepared to accept further +`OfferSnapshot` calls. + +Only `app_hash` can be trusted, as it has been verified by the light client. +Any other data can be spoofed by adversaries, so applications should employ +additional verification schemes to avoid denial-of-service attacks. The +verified `app_hash` is automatically checked against the restored application +at the end of snapshot restoration. + +See also the [`Snapshot`] data type and the [ABCI state sync documentation][ssd]. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#offersnapshot) + +[ssd]: https://docs.tendermint.com/master/spec/abci/apps.html#state-sync \ No newline at end of file diff --git a/tendermint/src/abci/doc/request-query.md b/tendermint/src/abci/doc/request-query.md new file mode 100644 index 000000000..5d061c54e --- /dev/null +++ b/tendermint/src/abci/doc/request-query.md @@ -0,0 +1,3 @@ +Queries for data from the application at current or past height. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#query) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-applysnapshotchunk.md b/tendermint/src/abci/doc/response-applysnapshotchunk.md new file mode 100644 index 000000000..bffabe7af --- /dev/null +++ b/tendermint/src/abci/doc/response-applysnapshotchunk.md @@ -0,0 +1,7 @@ +Returns the result of applying a snapshot chunk and associated data. + +The application can choose to refetch chunks and/or ban P2P peers as +appropriate. Tendermint will not do this unless instructed by the +application. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#applysnapshotchunk) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-beginblock.md b/tendermint/src/abci/doc/response-beginblock.md new file mode 100644 index 000000000..255efd098 --- /dev/null +++ b/tendermint/src/abci/doc/response-beginblock.md @@ -0,0 +1,3 @@ +Returns events that occurred when beginning a new block. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#beginblock) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-checktx.md b/tendermint/src/abci/doc/response-checktx.md new file mode 100644 index 000000000..cd31b1703 --- /dev/null +++ b/tendermint/src/abci/doc/response-checktx.md @@ -0,0 +1,3 @@ +Returns the result of checking a transaction for mempool inclusion. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#checktx) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-commit.md b/tendermint/src/abci/doc/response-commit.md new file mode 100644 index 000000000..822aab48d --- /dev/null +++ b/tendermint/src/abci/doc/response-commit.md @@ -0,0 +1,3 @@ +Returns the result of persisting the application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#commit) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-delivertx.md b/tendermint/src/abci/doc/response-delivertx.md new file mode 100644 index 000000000..cb83a6fd9 --- /dev/null +++ b/tendermint/src/abci/doc/response-delivertx.md @@ -0,0 +1,4 @@ +Returns events that occurred while executing a transaction against the +application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#delivertx) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-echo.md b/tendermint/src/abci/doc/response-echo.md new file mode 100644 index 000000000..92658169f --- /dev/null +++ b/tendermint/src/abci/doc/response-echo.md @@ -0,0 +1,3 @@ +Echoes a string to test an ABCI implementation. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#echo) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-endblock.md b/tendermint/src/abci/doc/response-endblock.md new file mode 100644 index 000000000..062cabb84 --- /dev/null +++ b/tendermint/src/abci/doc/response-endblock.md @@ -0,0 +1,3 @@ +Returns validator updates that occur after the end of a block. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#endblock) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-exception.md b/tendermint/src/abci/doc/response-exception.md new file mode 100644 index 000000000..5d8fb6c67 --- /dev/null +++ b/tendermint/src/abci/doc/response-exception.md @@ -0,0 +1 @@ +Returns an exception (undocumented, nondeterministic). \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-flush.md b/tendermint/src/abci/doc/response-flush.md new file mode 100644 index 000000000..6c411e1bf --- /dev/null +++ b/tendermint/src/abci/doc/response-flush.md @@ -0,0 +1,3 @@ +Indicates that all pending requests have been completed with their responses flushed. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#flush) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-info.md b/tendermint/src/abci/doc/response-info.md new file mode 100644 index 000000000..e0c64b1f5 --- /dev/null +++ b/tendermint/src/abci/doc/response-info.md @@ -0,0 +1,3 @@ +Returns information about the application state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#info) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-initchain.md b/tendermint/src/abci/doc/response-initchain.md new file mode 100644 index 000000000..b7ea62de7 --- /dev/null +++ b/tendermint/src/abci/doc/response-initchain.md @@ -0,0 +1,3 @@ +Returned on genesis after initializing chain state. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#initchain) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-listsnapshots.md b/tendermint/src/abci/doc/response-listsnapshots.md new file mode 100644 index 000000000..48255b800 --- /dev/null +++ b/tendermint/src/abci/doc/response-listsnapshots.md @@ -0,0 +1,3 @@ +Returns a list of local state snapshots. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#listsnapshots) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-loadsnapshotchunk.md b/tendermint/src/abci/doc/response-loadsnapshotchunk.md new file mode 100644 index 000000000..2eaf1c614 --- /dev/null +++ b/tendermint/src/abci/doc/response-loadsnapshotchunk.md @@ -0,0 +1,3 @@ +Returns a snapshot chunk from the application. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#loadsnapshotchunk) \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-offersnapshot.md b/tendermint/src/abci/doc/response-offersnapshot.md new file mode 100644 index 000000000..0da7a66fa --- /dev/null +++ b/tendermint/src/abci/doc/response-offersnapshot.md @@ -0,0 +1,7 @@ +Returns the application's response to a snapshot offer. + +See also the [`Snapshot`] data type and the [ABCI state sync documentation][ssd]. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#offersnapshot) + +[ssd]: https://docs.tendermint.com/master/spec/abci/apps.html#state-sync \ No newline at end of file diff --git a/tendermint/src/abci/doc/response-query.md b/tendermint/src/abci/doc/response-query.md new file mode 100644 index 000000000..57eb3bf4a --- /dev/null +++ b/tendermint/src/abci/doc/response-query.md @@ -0,0 +1,3 @@ +Returns data queried from the application. + +[ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#query) \ No newline at end of file diff --git a/tendermint/src/abci/event.rs b/tendermint/src/abci/event.rs new file mode 100644 index 000000000..76677572b --- /dev/null +++ b/tendermint/src/abci/event.rs @@ -0,0 +1,183 @@ +use crate::prelude::*; + +/// An event that occurred while processing a request. +/// +/// Application developers can attach additional information to +/// [`BeginBlock`](super::response::BeginBlock), +/// [`EndBlock`](super::response::EndBlock), +/// [`CheckTx`](super::response::CheckTx), and +/// [`DeliverTx`](super::response::DeliverTx) responses. Later, transactions may +/// be queried using these events. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#events) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Event { + /// The kind of event. + /// + /// Tendermint calls this the `type`, but we use `kind` to avoid confusion + /// with Rust types and follow Rust conventions. + pub kind: String, + /// A list of [`EventAttribute`]s describing the event. + pub attributes: Vec, +} + +impl Event { + /// Construct an event from generic data. + /// + /// The `From` impls on [`EventAttribute`] and the [`EventAttributeIndexExt`] + /// trait allow ergonomic event construction, as in this example: + /// + /// ``` + /// use tendermint::abci::{Event, EventAttributeIndexExt}; + /// + /// let event = Event::new( + /// "app", + /// vec![ + /// ("key1", "value1").index(), + /// ("key2", "value2").index(), + /// ("key3", "value3").no_index(), // will not be indexed + /// ], + /// ); + /// ``` + // XXX(hdevalence): remove vec! from example after https://github.com/rust-lang/rust/pull/65819 + pub fn new(kind: K, attributes: I) -> Self + where + K: Into, + I: IntoIterator, + I::Item: Into, + { + Self { + kind: kind.into(), + attributes: attributes.into_iter().map(Into::into).collect(), + } + } +} + +/// A key-value pair describing an [`Event`]. +/// +/// Generic methods are provided for more ergonomic attribute construction, see +/// [`Event::new`] for details. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#events) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct EventAttribute { + /// The event key. + pub key: String, + /// The event value. + pub value: String, + /// Whether Tendermint's indexer should index this event. + /// + /// **This field is nondeterministic**. + pub index: bool, +} + +impl, V: Into> From<(K, V, bool)> for EventAttribute { + fn from((key, value, index): (K, V, bool)) -> Self { + EventAttribute { + key: key.into(), + value: value.into(), + index, + } + } +} + +/// Adds convenience methods to tuples for more ergonomic [`EventAttribute`] +/// construction. +/// +/// See [`Event::new`] for details. +#[allow(missing_docs)] +pub trait EventAttributeIndexExt: private::Sealed { + type Key; + type Value; + + /// Indicate that this key/value pair should be indexed by Tendermint. + fn index(self) -> (Self::Key, Self::Value, bool); + /// Indicate that this key/value pair should not be indexed by Tendermint. + fn no_index(self) -> (Self::Key, Self::Value, bool); +} + +impl, V: Into> EventAttributeIndexExt for (K, V) { + type Key = K; + type Value = V; + fn index(self) -> (K, V, bool) { + let (key, value) = self; + (key, value, true) + } + fn no_index(self) -> (K, V, bool) { + let (key, value) = self; + (key, value, false) + } +} + +mod private { + use crate::prelude::*; + + pub trait Sealed {} + + impl, V: Into> Sealed for (K, V) {} +} + +impl, V: Into> From<(K, V)> for EventAttribute { + fn from((key, value): (K, V)) -> Self { + (key, value, false).into() + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; + +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::EventAttribute { + fn from(event: EventAttribute) -> Self { + Self { + key: event.key, + value: event.value, + index: event.index, + } + } +} + +impl TryFrom for EventAttribute { + type Error = crate::Error; + + fn try_from(event: pb::EventAttribute) -> Result { + Ok(Self { + key: event.key, + value: event.value, + index: event.index, + }) + } +} + +impl Protobuf for EventAttribute {} + +impl From for pb::Event { + fn from(event: Event) -> Self { + Self { + r#type: event.kind, + attributes: event.attributes.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for Event { + type Error = crate::Error; + + fn try_from(event: pb::Event) -> Result { + Ok(Self { + kind: event.r#type, + attributes: event + .attributes + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for Event {} diff --git a/tendermint/src/abci/kind.rs b/tendermint/src/abci/kind.rs new file mode 100644 index 000000000..065a01c9a --- /dev/null +++ b/tendermint/src/abci/kind.rs @@ -0,0 +1,23 @@ +/// A category of ABCI method. +/// +/// ABCI methods are split into four categories. Tendermint opens one ABCI +/// connection for each category and refers to these categories as *connections*, +/// but nothing actually restricts an ABCI connection from calling methods in +/// multiple categories. +/// +/// This enum breaks out the `Flush` method as a distinct category, since it is +/// used to control the execution of other methods. +pub enum MethodKind { + /// A consensus method, driven by the consensus protocol and responsible for + /// block execution. + Consensus, + /// A mempool method, used for validating new transactions before they're + /// shared or included in a block. + Mempool, + /// A snapshot method, used for serving and restoring state snapshots. + Snapshot, + /// An info method, used for initialization and user queries. + Info, + /// The flush method requests that all pending method requests are fully executed. + Flush, +} diff --git a/tendermint/src/abci/request.rs b/tendermint/src/abci/request.rs new file mode 100644 index 000000000..5b1d02628 --- /dev/null +++ b/tendermint/src/abci/request.rs @@ -0,0 +1,306 @@ +//! ABCI requests and request data. +//! +//! The [`Request`] enum records all possible ABCI requests. Requests that +//! contain data are modeled as a separate struct, to avoid duplication of field +//! definitions. + +use crate::prelude::*; + +// IMPORTANT NOTE ON DOCUMENTATION: +// +// The documentation for each request type is adapted from the ABCI Methods and +// Types spec document. However, the same logical request may appear three +// times, as a struct with the request data, as a Request variant, and as a +// CategoryRequest variant. +// +// To avoid duplication, this documentation is stored in the doc/ folder in +// individual .md files, which are pasted onto the relevant items using #[doc = +// include_str!(...)]. +// +// This is also why certain submodules have #[allow(unused)] imports to bring +// items into scope for doc links, rather than changing the doc links -- it +// allows the doc comments to be copied without editing. + +use core::convert::{TryFrom, TryInto}; + +use super::MethodKind; +use crate::Error; + +// bring into scope for doc links +#[allow(unused)] +use super::types::Snapshot; + +mod apply_snapshot_chunk; +mod begin_block; +mod check_tx; +mod deliver_tx; +mod echo; +mod end_block; +mod info; +mod init_chain; +mod load_snapshot_chunk; +mod offer_snapshot; +mod query; + +pub use apply_snapshot_chunk::ApplySnapshotChunk; +pub use begin_block::BeginBlock; +pub use check_tx::{CheckTx, CheckTxKind}; +pub use deliver_tx::DeliverTx; +pub use echo::Echo; +pub use end_block::EndBlock; +pub use info::Info; +pub use init_chain::InitChain; +pub use load_snapshot_chunk::LoadSnapshotChunk; +pub use offer_snapshot::OfferSnapshot; +pub use query::Query; + +/// All possible ABCI requests. +#[allow(clippy::large_enum_variant)] +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum Request { + #[doc = include_str!("doc/request-echo.md")] + Echo(Echo), + #[doc = include_str!("doc/request-flush.md")] + Flush, + #[doc = include_str!("doc/request-info.md")] + Info(Info), + #[doc = include_str!("doc/request-initchain.md")] + InitChain(InitChain), + #[doc = include_str!("doc/request-query.md")] + Query(Query), + #[doc = include_str!("doc/request-beginblock.md")] + BeginBlock(BeginBlock), + #[doc = include_str!("doc/request-checktx.md")] + CheckTx(CheckTx), + #[doc = include_str!("doc/request-delivertx.md")] + DeliverTx(DeliverTx), + #[doc = include_str!("doc/request-endblock.md")] + EndBlock(EndBlock), + #[doc = include_str!("doc/request-commit.md")] + Commit, + #[doc = include_str!("doc/request-listsnapshots.md")] + ListSnapshots, + #[doc = include_str!("doc/request-offersnapshot.md")] + OfferSnapshot(OfferSnapshot), + #[doc = include_str!("doc/request-loadsnapshotchunk.md")] + LoadSnapshotChunk(LoadSnapshotChunk), + #[doc = include_str!("doc/request-applysnapshotchunk.md")] + ApplySnapshotChunk(ApplySnapshotChunk), +} + +impl Request { + /// Get the method kind for this request. + pub fn kind(&self) -> MethodKind { + use Request::*; + match self { + Flush => MethodKind::Flush, + InitChain(_) => MethodKind::Consensus, + BeginBlock(_) => MethodKind::Consensus, + DeliverTx(_) => MethodKind::Consensus, + EndBlock(_) => MethodKind::Consensus, + Commit => MethodKind::Consensus, + CheckTx(_) => MethodKind::Mempool, + ListSnapshots => MethodKind::Snapshot, + OfferSnapshot(_) => MethodKind::Snapshot, + LoadSnapshotChunk(_) => MethodKind::Snapshot, + ApplySnapshotChunk(_) => MethodKind::Snapshot, + Info(_) => MethodKind::Info, + Query(_) => MethodKind::Info, + Echo(_) => MethodKind::Info, + } + } +} + +/// The consensus category of ABCI requests. +#[allow(clippy::large_enum_variant)] +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum ConsensusRequest { + #[doc = include_str!("doc/request-initchain.md")] + InitChain(InitChain), + #[doc = include_str!("doc/request-beginblock.md")] + BeginBlock(BeginBlock), + #[doc = include_str!("doc/request-delivertx.md")] + DeliverTx(DeliverTx), + #[doc = include_str!("doc/request-endblock.md")] + EndBlock(EndBlock), + #[doc = include_str!("doc/request-commit.md")] + Commit, +} + +impl From for Request { + fn from(req: ConsensusRequest) -> Self { + match req { + ConsensusRequest::InitChain(x) => Self::InitChain(x), + ConsensusRequest::BeginBlock(x) => Self::BeginBlock(x), + ConsensusRequest::DeliverTx(x) => Self::DeliverTx(x), + ConsensusRequest::EndBlock(x) => Self::EndBlock(x), + ConsensusRequest::Commit => Self::Commit, + } + } +} + +impl TryFrom for ConsensusRequest { + type Error = Error; + fn try_from(req: Request) -> Result { + match req { + Request::InitChain(x) => Ok(Self::InitChain(x)), + Request::BeginBlock(x) => Ok(Self::BeginBlock(x)), + Request::DeliverTx(x) => Ok(Self::DeliverTx(x)), + Request::EndBlock(x) => Ok(Self::EndBlock(x)), + Request::Commit => Ok(Self::Commit), + _ => Err(Error::invalid_abci_request_type()), + } + } +} + +/// The mempool category of ABCI requests. +#[derive(Clone, PartialEq, Debug)] +pub enum MempoolRequest { + #[doc = include_str!("doc/request-checktx.md")] + CheckTx(CheckTx), +} + +impl From for Request { + fn from(req: MempoolRequest) -> Self { + match req { + MempoolRequest::CheckTx(x) => Self::CheckTx(x), + } + } +} + +impl TryFrom for MempoolRequest { + type Error = Error; + fn try_from(req: Request) -> Result { + match req { + Request::CheckTx(x) => Ok(Self::CheckTx(x)), + _ => Err(Error::invalid_abci_request_type()), + } + } +} + +/// The info category of ABCI requests. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum InfoRequest { + #[doc = include_str!("doc/request-info.md")] + Info(Info), + #[doc = include_str!("doc/request-query.md")] + Query(Query), + #[doc = include_str!("doc/request-echo.md")] + Echo(Echo), +} + +impl From for Request { + fn from(req: InfoRequest) -> Self { + match req { + InfoRequest::Info(x) => Self::Info(x), + InfoRequest::Query(x) => Self::Query(x), + InfoRequest::Echo(x) => Self::Echo(x), + } + } +} + +impl TryFrom for InfoRequest { + type Error = Error; + fn try_from(req: Request) -> Result { + match req { + Request::Info(x) => Ok(Self::Info(x)), + Request::Query(x) => Ok(Self::Query(x)), + Request::Echo(x) => Ok(Self::Echo(x)), + _ => Err(Error::invalid_abci_request_type()), + } + } +} + +/// The snapshot category of ABCI requests. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum SnapshotRequest { + #[doc = include_str!("doc/request-listsnapshots.md")] + ListSnapshots, + #[doc = include_str!("doc/request-offersnapshot.md")] + OfferSnapshot(OfferSnapshot), + #[doc = include_str!("doc/request-loadsnapshotchunk.md")] + LoadSnapshotChunk(LoadSnapshotChunk), + #[doc = include_str!("doc/request-applysnapshotchunk.md")] + ApplySnapshotChunk(ApplySnapshotChunk), +} + +impl From for Request { + fn from(req: SnapshotRequest) -> Self { + match req { + SnapshotRequest::ListSnapshots => Self::ListSnapshots, + SnapshotRequest::OfferSnapshot(x) => Self::OfferSnapshot(x), + SnapshotRequest::LoadSnapshotChunk(x) => Self::LoadSnapshotChunk(x), + SnapshotRequest::ApplySnapshotChunk(x) => Self::ApplySnapshotChunk(x), + } + } +} + +impl TryFrom for SnapshotRequest { + type Error = Error; + fn try_from(req: Request) -> Result { + match req { + Request::ListSnapshots => Ok(Self::ListSnapshots), + Request::OfferSnapshot(x) => Ok(Self::OfferSnapshot(x)), + Request::LoadSnapshotChunk(x) => Ok(Self::LoadSnapshotChunk(x)), + Request::ApplySnapshotChunk(x) => Ok(Self::ApplySnapshotChunk(x)), + _ => Err(Error::invalid_abci_request_type()), + } + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::Request { + fn from(request: Request) -> pb::Request { + use pb::request::Value; + let value = match request { + Request::Echo(x) => Some(Value::Echo(x.into())), + Request::Flush => Some(Value::Flush(Default::default())), + Request::Info(x) => Some(Value::Info(x.into())), + Request::InitChain(x) => Some(Value::InitChain(x.into())), + Request::Query(x) => Some(Value::Query(x.into())), + Request::BeginBlock(x) => Some(Value::BeginBlock(x.into())), + Request::CheckTx(x) => Some(Value::CheckTx(x.into())), + Request::DeliverTx(x) => Some(Value::DeliverTx(x.into())), + Request::EndBlock(x) => Some(Value::EndBlock(x.into())), + Request::Commit => Some(Value::Commit(Default::default())), + Request::ListSnapshots => Some(Value::ListSnapshots(Default::default())), + Request::OfferSnapshot(x) => Some(Value::OfferSnapshot(x.into())), + Request::LoadSnapshotChunk(x) => Some(Value::LoadSnapshotChunk(x.into())), + Request::ApplySnapshotChunk(x) => Some(Value::ApplySnapshotChunk(x.into())), + }; + pb::Request { value } + } +} + +impl TryFrom for Request { + type Error = Error; + + fn try_from(request: pb::Request) -> Result { + use pb::request::Value; + match request.value { + Some(Value::Echo(x)) => Ok(Request::Echo(x.try_into()?)), + Some(Value::Flush(pb::RequestFlush {})) => Ok(Request::Flush), + Some(Value::Info(x)) => Ok(Request::Info(x.try_into()?)), + Some(Value::InitChain(x)) => Ok(Request::InitChain(x.try_into()?)), + Some(Value::Query(x)) => Ok(Request::Query(x.try_into()?)), + Some(Value::BeginBlock(x)) => Ok(Request::BeginBlock(x.try_into()?)), + Some(Value::CheckTx(x)) => Ok(Request::CheckTx(x.try_into()?)), + Some(Value::DeliverTx(x)) => Ok(Request::DeliverTx(x.try_into()?)), + Some(Value::EndBlock(x)) => Ok(Request::EndBlock(x.try_into()?)), + Some(Value::Commit(pb::RequestCommit {})) => Ok(Request::Commit), + Some(Value::ListSnapshots(pb::RequestListSnapshots {})) => Ok(Request::ListSnapshots), + Some(Value::OfferSnapshot(x)) => Ok(Request::OfferSnapshot(x.try_into()?)), + Some(Value::LoadSnapshotChunk(x)) => Ok(Request::LoadSnapshotChunk(x.try_into()?)), + Some(Value::ApplySnapshotChunk(x)) => Ok(Request::ApplySnapshotChunk(x.try_into()?)), + None => Err(crate::Error::missing_data()), + } + } +} + +impl Protobuf for Request {} diff --git a/tendermint/src/abci/request/apply_snapshot_chunk.rs b/tendermint/src/abci/request/apply_snapshot_chunk.rs new file mode 100644 index 000000000..aca95daf2 --- /dev/null +++ b/tendermint/src/abci/request/apply_snapshot_chunk.rs @@ -0,0 +1,70 @@ +use crate::prelude::*; + +use bytes::Bytes; + +// bring into scope for doc links +#[allow(unused)] +use super::{super::types::Snapshot, Info, LoadSnapshotChunk}; + +/// Applies a snapshot chunk. +/// +/// The application can choose to refetch chunks and/or ban P2P peers as +/// appropriate. Tendermint will not do this unless instructed by the +/// application. +/// +/// The application may want to verify each chunk, e.g., by attaching chunk +/// hashes in [`Snapshot::metadata`] and/or incrementally verifying contents +/// against `app_hash`. +/// +/// When all chunks have been accepted, Tendermint will make an ABCI [`Info`] +/// request to verify that `last_block_app_hash` and `last_block_height` match +/// the expected values, and record the `app_version` in the node state. It then +/// switches to fast sync or consensus and joins the network. +/// +/// If Tendermint is unable to retrieve the next chunk after some time (e.g., +/// because no suitable peers are available), it will reject the snapshot and try +/// a different one via `OfferSnapshot`. The application should be prepared to +/// reset and accept it or abort as appropriate. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#applysnapshotchunk) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct ApplySnapshotChunk { + /// The chunk index, starting from `0`. Tendermint applies chunks sequentially. + pub index: u32, + /// The binary chunk contents, as returned by [`LoadSnapshotChunk`]. + pub chunk: Bytes, + /// The P2P ID of the node who sent this chunk. + pub sender: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestApplySnapshotChunk { + fn from(apply_snapshot_chunk: ApplySnapshotChunk) -> Self { + Self { + index: apply_snapshot_chunk.index, + chunk: apply_snapshot_chunk.chunk, + sender: apply_snapshot_chunk.sender, + } + } +} + +impl TryFrom for ApplySnapshotChunk { + type Error = crate::Error; + + fn try_from(apply_snapshot_chunk: pb::RequestApplySnapshotChunk) -> Result { + Ok(Self { + index: apply_snapshot_chunk.index, + chunk: apply_snapshot_chunk.chunk, + sender: apply_snapshot_chunk.sender, + }) + } +} + +impl Protobuf for ApplySnapshotChunk {} diff --git a/tendermint/src/abci/request/begin_block.rs b/tendermint/src/abci/request/begin_block.rs new file mode 100644 index 000000000..bcfe29a19 --- /dev/null +++ b/tendermint/src/abci/request/begin_block.rs @@ -0,0 +1,78 @@ +use crate::prelude::*; + +use bytes::Bytes; + +use crate::block; + +use super::super::types::{Evidence, LastCommitInfo}; +use crate::Error; + +// bring into scope for doc links +#[allow(unused)] +use super::DeliverTx; + +#[doc = include_str!("../doc/request-beginblock.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct BeginBlock { + /// The block's hash. + /// + /// This can be derived from the block header. + pub hash: Bytes, + /// The block header. + pub header: block::Header, + /// Information about the last commit. + /// + /// This includes the round, the list of validators, and which validators + /// signed the last block. + pub last_commit_info: LastCommitInfo, + /// Evidence of validator misbehavior. + pub byzantine_validators: Vec, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestBeginBlock { + fn from(begin_block: BeginBlock) -> Self { + Self { + hash: begin_block.hash, + header: Some(begin_block.header.into()), + last_commit_info: Some(begin_block.last_commit_info.into()), + byzantine_validators: begin_block + .byzantine_validators + .into_iter() + .map(Into::into) + .collect(), + } + } +} + +impl TryFrom for BeginBlock { + type Error = Error; + + fn try_from(begin_block: pb::RequestBeginBlock) -> Result { + Ok(Self { + hash: begin_block.hash, + header: begin_block + .header + .ok_or_else(Error::missing_header)? + .try_into()?, + last_commit_info: begin_block + .last_commit_info + .ok_or_else(Error::missing_last_commit_info)? + .try_into()?, + byzantine_validators: begin_block + .byzantine_validators + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for BeginBlock {} diff --git a/tendermint/src/abci/request/check_tx.rs b/tendermint/src/abci/request/check_tx.rs new file mode 100644 index 000000000..0feb0836b --- /dev/null +++ b/tendermint/src/abci/request/check_tx.rs @@ -0,0 +1,71 @@ +use crate::prelude::*; + +use bytes::Bytes; + +#[doc = include_str!("../doc/request-checktx.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct CheckTx { + /// The transaction bytes. + pub tx: Bytes, + /// The kind of check to perform. + /// + /// Note: this field is called `type` in the protobuf, but we call it `kind` + /// to avoid the Rust keyword. + pub kind: CheckTxKind, +} + +/// The possible kinds of [`CheckTx`] checks. +/// +/// Note: the +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#checktx) +/// calls this `CheckTxType`, but we follow the Rust convention and name it `CheckTxKind` +/// to avoid confusion with Rust types. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[repr(i32)] +pub enum CheckTxKind { + /// A full check is required (the default). + New = 0, + /// Indicates that the mempool is initiating a recheck of the transaction. + Recheck = 1, +} + +impl Default for CheckTxKind { + fn default() -> Self { + CheckTxKind::New + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestCheckTx { + fn from(check_tx: CheckTx) -> Self { + Self { + tx: check_tx.tx, + r#type: check_tx.kind as i32, + } + } +} + +impl TryFrom for CheckTx { + type Error = crate::Error; + + fn try_from(check_tx: pb::RequestCheckTx) -> Result { + let kind = match check_tx.r#type { + 0 => CheckTxKind::New, + 1 => CheckTxKind::Recheck, + _ => return Err(crate::Error::unsupported_check_tx_type()), + }; + Ok(Self { + tx: check_tx.tx, + kind, + }) + } +} + +impl Protobuf for CheckTx {} diff --git a/tendermint/src/abci/request/deliver_tx.rs b/tendermint/src/abci/request/deliver_tx.rs new file mode 100644 index 000000000..456e45733 --- /dev/null +++ b/tendermint/src/abci/request/deliver_tx.rs @@ -0,0 +1,34 @@ +use crate::prelude::*; + +use bytes::Bytes; + +#[doc = include_str!("../doc/request-delivertx.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct DeliverTx { + /// The bytes of the transaction to execute. + pub tx: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestDeliverTx { + fn from(deliver_tx: DeliverTx) -> Self { + Self { tx: deliver_tx.tx } + } +} + +impl TryFrom for DeliverTx { + type Error = crate::Error; + + fn try_from(deliver_tx: pb::RequestDeliverTx) -> Result { + Ok(Self { tx: deliver_tx.tx }) + } +} + +impl Protobuf for DeliverTx {} diff --git a/tendermint/src/abci/request/echo.rs b/tendermint/src/abci/request/echo.rs new file mode 100644 index 000000000..7da97b61a --- /dev/null +++ b/tendermint/src/abci/request/echo.rs @@ -0,0 +1,36 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/request-echo.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Echo { + /// The message to send back. + pub message: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestEcho { + fn from(echo: Echo) -> Self { + Self { + message: echo.message, + } + } +} + +impl TryFrom for Echo { + type Error = crate::Error; + + fn try_from(echo: pb::RequestEcho) -> Result { + Ok(Self { + message: echo.message, + }) + } +} + +impl Protobuf for Echo {} diff --git a/tendermint/src/abci/request/end_block.rs b/tendermint/src/abci/request/end_block.rs new file mode 100644 index 000000000..3d72341ae --- /dev/null +++ b/tendermint/src/abci/request/end_block.rs @@ -0,0 +1,36 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/request-endblock.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct EndBlock { + /// The height of the block just executed. + pub height: i64, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestEndBlock { + fn from(end_block: EndBlock) -> Self { + Self { + height: end_block.height, + } + } +} + +impl TryFrom for EndBlock { + type Error = crate::Error; + + fn try_from(end_block: pb::RequestEndBlock) -> Result { + Ok(Self { + height: end_block.height, + }) + } +} + +impl Protobuf for EndBlock {} diff --git a/tendermint/src/abci/request/info.rs b/tendermint/src/abci/request/info.rs new file mode 100644 index 000000000..a110337fd --- /dev/null +++ b/tendermint/src/abci/request/info.rs @@ -0,0 +1,48 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/request-info.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Info { + /// The Tendermint software semantic version. + pub version: String, + /// The Tendermint block protocol version. + pub block_version: u64, + /// The Tendermint p2p protocol version. + pub p2p_version: u64, + /// The Tendermint ABCI semantic version. + pub abci_version: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestInfo { + fn from(info: Info) -> Self { + Self { + version: info.version, + block_version: info.block_version, + p2p_version: info.p2p_version, + abci_version: info.abci_version, + } + } +} + +impl TryFrom for Info { + type Error = crate::Error; + + fn try_from(info: pb::RequestInfo) -> Result { + Ok(Self { + version: info.version, + block_version: info.block_version, + p2p_version: info.p2p_version, + abci_version: info.abci_version, + }) + } +} + +impl Protobuf for Info {} diff --git a/tendermint/src/abci/request/init_chain.rs b/tendermint/src/abci/request/init_chain.rs new file mode 100644 index 000000000..bf2a697b5 --- /dev/null +++ b/tendermint/src/abci/request/init_chain.rs @@ -0,0 +1,74 @@ +use bytes::Bytes; +use chrono::{DateTime, Utc}; + +use crate::{block, consensus, prelude::*}; + +use super::super::types::ValidatorUpdate; + +/// Called on genesis to initialize chain state. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#initchain) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct InitChain { + /// The genesis time. + pub time: DateTime, + /// The ID of the blockchain. + pub chain_id: String, + /// Initial consensus-critical parameters. + pub consensus_params: consensus::Params, + /// Initial genesis validators, sorted by voting power. + pub validators: Vec, + /// Serialized JSON bytes containing the initial application state. + pub app_state_bytes: Bytes, + /// Height of the initial block (typically `1`). + pub initial_height: block::Height, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use crate::Error; +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestInitChain { + fn from(init_chain: InitChain) -> Self { + Self { + time: Some(init_chain.time.into()), + chain_id: init_chain.chain_id, + consensus_params: Some(init_chain.consensus_params.into()), + validators: init_chain.validators.into_iter().map(Into::into).collect(), + app_state_bytes: init_chain.app_state_bytes, + initial_height: init_chain.initial_height.into(), + } + } +} + +impl TryFrom for InitChain { + type Error = Error; + + fn try_from(init_chain: pb::RequestInitChain) -> Result { + Ok(Self { + time: init_chain + .time + .ok_or_else(Error::missing_genesis_time)? + .try_into()?, + chain_id: init_chain.chain_id, + consensus_params: init_chain + .consensus_params + .ok_or_else(Error::missing_consensus_params)? + .try_into()?, + validators: init_chain + .validators + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + app_state_bytes: init_chain.app_state_bytes, + initial_height: init_chain.initial_height.try_into()?, + }) + } +} + +impl Protobuf for InitChain {} diff --git a/tendermint/src/abci/request/load_snapshot_chunk.rs b/tendermint/src/abci/request/load_snapshot_chunk.rs new file mode 100644 index 000000000..d88885cd0 --- /dev/null +++ b/tendermint/src/abci/request/load_snapshot_chunk.rs @@ -0,0 +1,44 @@ +use crate::{block, prelude::*}; + +#[doc = include_str!("../doc/request-loadsnapshotchunk.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct LoadSnapshotChunk { + /// The height of the snapshot the chunks belong to. + pub height: block::Height, + /// An application-specific identifier of the format of the snapshot chunk. + pub format: u32, + /// The chunk index, starting from `0` for the initial chunk. + pub chunk: u32, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestLoadSnapshotChunk { + fn from(load_snapshot_chunk: LoadSnapshotChunk) -> Self { + Self { + height: load_snapshot_chunk.height.into(), + format: load_snapshot_chunk.format, + chunk: load_snapshot_chunk.chunk, + } + } +} + +impl TryFrom for LoadSnapshotChunk { + type Error = crate::Error; + + fn try_from(load_snapshot_chunk: pb::RequestLoadSnapshotChunk) -> Result { + Ok(Self { + height: load_snapshot_chunk.height.try_into()?, + format: load_snapshot_chunk.format, + chunk: load_snapshot_chunk.chunk, + }) + } +} + +impl Protobuf for LoadSnapshotChunk {} diff --git a/tendermint/src/abci/request/offer_snapshot.rs b/tendermint/src/abci/request/offer_snapshot.rs new file mode 100644 index 000000000..516dc2147 --- /dev/null +++ b/tendermint/src/abci/request/offer_snapshot.rs @@ -0,0 +1,52 @@ +use crate::prelude::*; + +use bytes::Bytes; + +use super::super::types::Snapshot; + +// bring into scope for doc links +#[allow(unused)] +use super::ApplySnapshotChunk; + +#[doc = include_str!("../doc/request-offersnapshot.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct OfferSnapshot { + /// The snapshot offered for restoration. + pub snapshot: Snapshot, + /// The light client verified app hash for this height. + // XXX(hdevalence): replace with apphash + pub app_hash: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestOfferSnapshot { + fn from(offer_snapshot: OfferSnapshot) -> Self { + Self { + snapshot: Some(offer_snapshot.snapshot.into()), + app_hash: offer_snapshot.app_hash, + } + } +} + +impl TryFrom for OfferSnapshot { + type Error = crate::Error; + + fn try_from(offer_snapshot: pb::RequestOfferSnapshot) -> Result { + Ok(Self { + snapshot: offer_snapshot + .snapshot + .ok_or_else(crate::Error::missing_data)? + .try_into()?, + app_hash: offer_snapshot.app_hash, + }) + } +} + +impl Protobuf for OfferSnapshot {} diff --git a/tendermint/src/abci/request/query.rs b/tendermint/src/abci/request/query.rs new file mode 100644 index 000000000..1530f69d2 --- /dev/null +++ b/tendermint/src/abci/request/query.rs @@ -0,0 +1,63 @@ +use bytes::Bytes; + +use crate::{block, prelude::*}; + +#[doc = include_str!("../doc/request-query.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Query { + /// Raw query bytes. + /// + /// Can be used with or in lieu of `path`. + pub data: Bytes, + /// Path of the request, like an HTTP `GET` path. + /// + /// Can be used with or in lieu of `data`. + /// + /// Applications MUST interpret `/store` as a query by key on the underlying + /// store. The key SHOULD be specified in the Data field. Applications SHOULD + /// allow queries over specific types like `/accounts/...` or `/votes/...`. + pub path: String, + /// The block height for which the query should be executed. + /// + /// The default `0` returns data for the latest committed block. Note that + /// this is the height of the block containing the application's Merkle root + /// hash, which represents the state as it was after committing the block at + /// `height - 1`. + pub height: block::Height, + /// Whether to return a Merkle proof with the response, if possible. + pub prove: bool, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::RequestQuery { + fn from(query: Query) -> Self { + Self { + data: query.data, + path: query.path, + height: query.height.into(), + prove: query.prove, + } + } +} + +impl TryFrom for Query { + type Error = crate::Error; + + fn try_from(query: pb::RequestQuery) -> Result { + Ok(Self { + data: query.data, + path: query.path, + height: query.height.try_into()?, + prove: query.prove, + }) + } +} + +impl Protobuf for Query {} diff --git a/tendermint/src/abci/response.rs b/tendermint/src/abci/response.rs new file mode 100644 index 000000000..eed823f9b --- /dev/null +++ b/tendermint/src/abci/response.rs @@ -0,0 +1,289 @@ +//! ABCI responses and response data. +//! +//! The [`Response`] enum records all possible ABCI responses. Responses that +//! contain data are modeled as a separate struct, to avoid duplication of field +//! definitions. + +use crate::prelude::*; + +// IMPORTANT NOTE ON DOCUMENTATION: +// +// The documentation for each request type is adapted from the ABCI Methods and +// Types spec document. However, the same logical request may appear three +// times, as a struct with the request data, as a Request variant, and as a +// CategoryRequest variant. +// +// To avoid duplication, this documentation is stored in the doc/ folder in +// individual .md files, which are pasted onto the relevant items using #[doc = +// include_str!(...)]. +// +// This is also why certain submodules have #[allow(unused)] imports to bring +// items into scope for doc links, rather than changing the doc links -- it +// allows the doc comments to be copied without editing. + +use core::convert::{TryFrom, TryInto}; + +use crate::Error; +// bring into scope for doc links +#[allow(unused)] +use super::types::Snapshot; + +mod apply_snapshot_chunk; +mod begin_block; +mod check_tx; +mod commit; +mod deliver_tx; +mod echo; +mod end_block; +mod exception; +mod info; +mod init_chain; +mod list_snapshots; +mod load_snapshot_chunk; +mod offer_snapshot; +mod query; + +pub use apply_snapshot_chunk::{ApplySnapshotChunk, ApplySnapshotChunkResult}; +pub use begin_block::BeginBlock; +pub use check_tx::CheckTx; +pub use commit::Commit; +pub use deliver_tx::DeliverTx; +pub use echo::Echo; +pub use end_block::EndBlock; +pub use exception::Exception; +pub use info::Info; +pub use init_chain::InitChain; +pub use list_snapshots::ListSnapshots; +pub use load_snapshot_chunk::LoadSnapshotChunk; +pub use offer_snapshot::OfferSnapshot; +pub use query::Query; + +/// All possible ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum Response { + #[doc = include_str!("doc/response-exception.md")] + Exception(Exception), + #[doc = include_str!("doc/response-echo.md")] + Echo(Echo), + #[doc = include_str!("doc/response-flush.md")] + Flush, + #[doc = include_str!("doc/response-info.md")] + Info(Info), + #[doc = include_str!("doc/response-initchain.md")] + InitChain(InitChain), + #[doc = include_str!("doc/response-query.md")] + Query(Query), + #[doc = include_str!("doc/response-beginblock.md")] + BeginBlock(BeginBlock), + #[doc = include_str!("doc/response-checktx.md")] + CheckTx(CheckTx), + #[doc = include_str!("doc/response-delivertx.md")] + DeliverTx(DeliverTx), + #[doc = include_str!("doc/response-endblock.md")] + EndBlock(EndBlock), + #[doc = include_str!("doc/response-commit.md")] + Commit(Commit), + #[doc = include_str!("doc/response-listsnapshots.md")] + ListSnapshots(ListSnapshots), + #[doc = include_str!("doc/response-offersnapshot.md")] + OfferSnapshot(OfferSnapshot), + #[doc = include_str!("doc/response-loadsnapshotchunk.md")] + LoadSnapshotChunk(LoadSnapshotChunk), + #[doc = include_str!("doc/response-applysnapshotchunk.md")] + ApplySnapshotChunk(ApplySnapshotChunk), +} + +/// The consensus category of ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum ConsensusResponse { + #[doc = include_str!("doc/response-initchain.md")] + InitChain(InitChain), + #[doc = include_str!("doc/response-beginblock.md")] + BeginBlock(BeginBlock), + #[doc = include_str!("doc/response-delivertx.md")] + DeliverTx(DeliverTx), + #[doc = include_str!("doc/response-endblock.md")] + EndBlock(EndBlock), + #[doc = include_str!("doc/response-commit.md")] + Commit(Commit), +} + +impl From for Response { + fn from(req: ConsensusResponse) -> Self { + match req { + ConsensusResponse::InitChain(x) => Self::InitChain(x), + ConsensusResponse::BeginBlock(x) => Self::BeginBlock(x), + ConsensusResponse::DeliverTx(x) => Self::DeliverTx(x), + ConsensusResponse::EndBlock(x) => Self::EndBlock(x), + ConsensusResponse::Commit(x) => Self::Commit(x), + } + } +} + +impl TryFrom for ConsensusResponse { + type Error = Error; + fn try_from(req: Response) -> Result { + match req { + Response::InitChain(x) => Ok(Self::InitChain(x)), + Response::BeginBlock(x) => Ok(Self::BeginBlock(x)), + Response::DeliverTx(x) => Ok(Self::DeliverTx(x)), + Response::EndBlock(x) => Ok(Self::EndBlock(x)), + Response::Commit(x) => Ok(Self::Commit(x)), + _ => Err(Error::invalid_abci_response_type()), + } + } +} + +/// The mempool category of ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum MempoolResponse { + #[doc = include_str!("doc/response-checktx.md")] + CheckTx(CheckTx), +} + +impl From for Response { + fn from(req: MempoolResponse) -> Self { + match req { + MempoolResponse::CheckTx(x) => Self::CheckTx(x), + } + } +} + +impl TryFrom for MempoolResponse { + type Error = Error; + fn try_from(req: Response) -> Result { + match req { + Response::CheckTx(x) => Ok(Self::CheckTx(x)), + _ => Err(Error::invalid_abci_response_type()), + } + } +} + +/// The info category of ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum InfoResponse { + #[doc = include_str!("doc/response-echo.md")] + Echo(Echo), + #[doc = include_str!("doc/response-info.md")] + Info(Info), + #[doc = include_str!("doc/response-query.md")] + Query(Query), +} + +impl From for Response { + fn from(req: InfoResponse) -> Self { + match req { + InfoResponse::Echo(x) => Self::Echo(x), + InfoResponse::Info(x) => Self::Info(x), + InfoResponse::Query(x) => Self::Query(x), + } + } +} + +impl TryFrom for InfoResponse { + type Error = Error; + fn try_from(req: Response) -> Result { + match req { + Response::Echo(x) => Ok(Self::Echo(x)), + Response::Info(x) => Ok(Self::Info(x)), + Response::Query(x) => Ok(Self::Query(x)), + _ => Err(Error::invalid_abci_response_type()), + } + } +} + +/// The snapshot category of ABCI responses. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum SnapshotResponse { + #[doc = include_str!("doc/response-listsnapshots.md")] + ListSnapshots(ListSnapshots), + #[doc = include_str!("doc/response-offersnapshot.md")] + OfferSnapshot(OfferSnapshot), + #[doc = include_str!("doc/response-loadsnapshotchunk.md")] + LoadSnapshotChunk(LoadSnapshotChunk), + #[doc = include_str!("doc/response-applysnapshotchunk.md")] + ApplySnapshotChunk(ApplySnapshotChunk), +} + +impl From for Response { + fn from(req: SnapshotResponse) -> Self { + match req { + SnapshotResponse::ListSnapshots(x) => Self::ListSnapshots(x), + SnapshotResponse::OfferSnapshot(x) => Self::OfferSnapshot(x), + SnapshotResponse::LoadSnapshotChunk(x) => Self::LoadSnapshotChunk(x), + SnapshotResponse::ApplySnapshotChunk(x) => Self::ApplySnapshotChunk(x), + } + } +} + +impl TryFrom for SnapshotResponse { + type Error = Error; + fn try_from(req: Response) -> Result { + match req { + Response::ListSnapshots(x) => Ok(Self::ListSnapshots(x)), + Response::OfferSnapshot(x) => Ok(Self::OfferSnapshot(x)), + Response::LoadSnapshotChunk(x) => Ok(Self::LoadSnapshotChunk(x)), + Response::ApplySnapshotChunk(x) => Ok(Self::ApplySnapshotChunk(x)), + _ => Err(Error::invalid_abci_response_type()), + } + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::Response { + fn from(response: Response) -> pb::Response { + use pb::response::Value; + let value = match response { + Response::Exception(x) => Some(Value::Exception(x.into())), + Response::Echo(x) => Some(Value::Echo(x.into())), + Response::Flush => Some(Value::Flush(Default::default())), + Response::Info(x) => Some(Value::Info(x.into())), + Response::InitChain(x) => Some(Value::InitChain(x.into())), + Response::Query(x) => Some(Value::Query(x.into())), + Response::BeginBlock(x) => Some(Value::BeginBlock(x.into())), + Response::CheckTx(x) => Some(Value::CheckTx(x.into())), + Response::DeliverTx(x) => Some(Value::DeliverTx(x.into())), + Response::EndBlock(x) => Some(Value::EndBlock(x.into())), + Response::Commit(x) => Some(Value::Commit(x.into())), + Response::ListSnapshots(x) => Some(Value::ListSnapshots(x.into())), + Response::OfferSnapshot(x) => Some(Value::OfferSnapshot(x.into())), + Response::LoadSnapshotChunk(x) => Some(Value::LoadSnapshotChunk(x.into())), + Response::ApplySnapshotChunk(x) => Some(Value::ApplySnapshotChunk(x.into())), + }; + pb::Response { value } + } +} + +impl TryFrom for Response { + type Error = Error; + + fn try_from(response: pb::Response) -> Result { + use pb::response::Value; + match response.value { + Some(Value::Exception(x)) => Ok(Response::Exception(x.try_into()?)), + Some(Value::Echo(x)) => Ok(Response::Echo(x.try_into()?)), + Some(Value::Flush(_)) => Ok(Response::Flush), + Some(Value::Info(x)) => Ok(Response::Info(x.try_into()?)), + Some(Value::InitChain(x)) => Ok(Response::InitChain(x.try_into()?)), + Some(Value::Query(x)) => Ok(Response::Query(x.try_into()?)), + Some(Value::BeginBlock(x)) => Ok(Response::BeginBlock(x.try_into()?)), + Some(Value::CheckTx(x)) => Ok(Response::CheckTx(x.try_into()?)), + Some(Value::DeliverTx(x)) => Ok(Response::DeliverTx(x.try_into()?)), + Some(Value::EndBlock(x)) => Ok(Response::EndBlock(x.try_into()?)), + Some(Value::Commit(x)) => Ok(Response::Commit(x.try_into()?)), + Some(Value::ListSnapshots(x)) => Ok(Response::ListSnapshots(x.try_into()?)), + Some(Value::OfferSnapshot(x)) => Ok(Response::OfferSnapshot(x.try_into()?)), + Some(Value::LoadSnapshotChunk(x)) => Ok(Response::LoadSnapshotChunk(x.try_into()?)), + Some(Value::ApplySnapshotChunk(x)) => Ok(Response::ApplySnapshotChunk(x.try_into()?)), + None => Err(crate::Error::missing_data()), + } + } +} + +impl Protobuf for Response {} diff --git a/tendermint/src/abci/response/apply_snapshot_chunk.rs b/tendermint/src/abci/response/apply_snapshot_chunk.rs new file mode 100644 index 000000000..cb538c091 --- /dev/null +++ b/tendermint/src/abci/response/apply_snapshot_chunk.rs @@ -0,0 +1,88 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/response-applysnapshotchunk.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct ApplySnapshotChunk { + /// The result of applying the snapshot chunk. + pub result: ApplySnapshotChunkResult, + /// Refetch and reapply the given chunks, regardless of `result`. + /// + /// Only the listed chunks will be refetched, and reapplied in sequential + /// order. + pub refetch_chunks: Vec, + /// Reject the given P2P senders, regardless of `result`. + /// + /// Any chunks already applied will not be refetched unless explicitly + /// requested, but queued chunks from these senders will be discarded, and + /// new chunks or other snapshots rejected. + pub reject_senders: Vec, +} + +/// The result of applying a snapshot chunk. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[repr(i32)] +pub enum ApplySnapshotChunkResult { + /// Unknown result, abort all snapshot restoration. + Unknown = 0, + /// The chunk was accepted. + Accept = 1, + /// Abort snapshot restoration, and don't try any other snapshots. + Abort = 2, + /// Reapply this chunk, combine with + /// [`refetch_chunks`](ApplySnapshotChunk::refetch_chunks) and + /// [`reject_senders`](ApplySnapshotChunk::reject_senders) as appropriate. + Retry = 3, + /// Restart this snapshot from + /// [`OfferSnapshot`](super::super::request::OfferSnapshot), + /// reusing chunks unless instructed otherwise. + RetrySnapshot = 4, + /// Reject this snapshot, try a different one. + RejectSnapshot = 5, +} + +impl Default for ApplySnapshotChunkResult { + fn default() -> Self { + Self::Unknown + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseApplySnapshotChunk { + fn from(apply_snapshot_chunk: ApplySnapshotChunk) -> Self { + Self { + result: apply_snapshot_chunk.result as i32, + refetch_chunks: apply_snapshot_chunk.refetch_chunks, + reject_senders: apply_snapshot_chunk.reject_senders, + } + } +} + +impl TryFrom for ApplySnapshotChunk { + type Error = crate::Error; + + fn try_from(apply_snapshot_chunk: pb::ResponseApplySnapshotChunk) -> Result { + let result = match apply_snapshot_chunk.result { + 0 => ApplySnapshotChunkResult::Unknown, + 1 => ApplySnapshotChunkResult::Accept, + 2 => ApplySnapshotChunkResult::Abort, + 3 => ApplySnapshotChunkResult::Retry, + 4 => ApplySnapshotChunkResult::RetrySnapshot, + 5 => ApplySnapshotChunkResult::RejectSnapshot, + _ => return Err(crate::Error::unsupported_apply_snapshot_chunk_result()), + }; + Ok(Self { + result, + refetch_chunks: apply_snapshot_chunk.refetch_chunks, + reject_senders: apply_snapshot_chunk.reject_senders, + }) + } +} + +impl Protobuf for ApplySnapshotChunk {} diff --git a/tendermint/src/abci/response/begin_block.rs b/tendermint/src/abci/response/begin_block.rs new file mode 100644 index 000000000..2335becfb --- /dev/null +++ b/tendermint/src/abci/response/begin_block.rs @@ -0,0 +1,42 @@ +use crate::prelude::*; + +use super::super::Event; + +#[doc = include_str!("../doc/response-beginblock.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct BeginBlock { + /// Events that occurred while beginning the block. + pub events: Vec, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseBeginBlock { + fn from(begin_block: BeginBlock) -> Self { + Self { + events: begin_block.events.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for BeginBlock { + type Error = crate::Error; + + fn try_from(begin_block: pb::ResponseBeginBlock) -> Result { + Ok(Self { + events: begin_block + .events + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for BeginBlock {} diff --git a/tendermint/src/abci/response/check_tx.rs b/tendermint/src/abci/response/check_tx.rs new file mode 100644 index 000000000..500b9699e --- /dev/null +++ b/tendermint/src/abci/response/check_tx.rs @@ -0,0 +1,92 @@ +use crate::prelude::*; + +use bytes::Bytes; + +use super::super::Event; + +#[doc = include_str!("../doc/response-checktx.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct CheckTx { + /// The response code. + /// + /// Transactions where `code != 0` will be rejected; these transactions will + /// not be broadcast to other nodes or included in a proposal block. + /// Tendermint attributes no other value to the response code. + pub code: u32, + /// Result bytes, if any. + pub data: Bytes, + /// The output of the application's logger. + /// + /// **May be non-deterministic**. + pub log: String, + /// Additional information. + /// + /// **May be non-deterministic**. + pub info: String, + /// Amount of gas requested for the transaction. + pub gas_wanted: i64, + /// Amount of gas consumed by the transaction. + pub gas_used: i64, + /// Events that occurred while checking the transaction. + pub events: Vec, + /// The namespace for the `code`. + pub codespace: String, + /// The transaction's sender (e.g. the signer). + pub sender: String, + /// The transaction's priority (for mempool ordering). + pub priority: i64, + /* mempool_error is contained in the proto, but skipped here: + * > mempool_error is set by Tendermint. + * > ABCI applictions creating a ResponseCheckTX should not set mempool_error. */ +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseCheckTx { + fn from(check_tx: CheckTx) -> Self { + Self { + code: check_tx.code, + data: check_tx.data, + log: check_tx.log, + info: check_tx.info, + gas_wanted: check_tx.gas_wanted, + gas_used: check_tx.gas_used, + events: check_tx.events.into_iter().map(Into::into).collect(), + codespace: check_tx.codespace, + sender: check_tx.sender, + priority: check_tx.priority, + mempool_error: String::default(), + } + } +} + +impl TryFrom for CheckTx { + type Error = crate::Error; + + fn try_from(check_tx: pb::ResponseCheckTx) -> Result { + Ok(Self { + code: check_tx.code, + data: check_tx.data, + log: check_tx.log, + info: check_tx.info, + gas_wanted: check_tx.gas_wanted, + gas_used: check_tx.gas_used, + events: check_tx + .events + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + codespace: check_tx.codespace, + sender: check_tx.sender, + priority: check_tx.priority, + }) + } +} + +impl Protobuf for CheckTx {} diff --git a/tendermint/src/abci/response/commit.rs b/tendermint/src/abci/response/commit.rs new file mode 100644 index 000000000..9cded2e26 --- /dev/null +++ b/tendermint/src/abci/response/commit.rs @@ -0,0 +1,45 @@ +use crate::{block, prelude::*}; + +use bytes::Bytes; + +#[doc = include_str!("../doc/response-commit.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct Commit { + /// The Merkle root hash of the application state + /// + /// XXX(hdevalence) - is this different from an app hash? + /// XXX(hdevalence) - rename to app_hash ? + pub data: Bytes, + /// Blocks below this height may be removed. + pub retain_height: block::Height, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseCommit { + fn from(commit: Commit) -> Self { + Self { + data: commit.data, + retain_height: commit.retain_height.into(), + } + } +} + +impl TryFrom for Commit { + type Error = crate::Error; + + fn try_from(commit: pb::ResponseCommit) -> Result { + Ok(Self { + data: commit.data, + retain_height: commit.retain_height.try_into()?, + }) + } +} + +impl Protobuf for Commit {} diff --git a/tendermint/src/abci/response/deliver_tx.rs b/tendermint/src/abci/response/deliver_tx.rs new file mode 100644 index 000000000..271f82457 --- /dev/null +++ b/tendermint/src/abci/response/deliver_tx.rs @@ -0,0 +1,80 @@ +use crate::prelude::*; + +use bytes::Bytes; + +use super::super::Event; + +#[doc = include_str!("../doc/response-delivertx.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct DeliverTx { + /// The response code. + /// + /// This code should be `0` only if the transaction is fully valid. However, + /// invalid transactions included in a block will still be executed against + /// the application state. + pub code: u32, + /// Result bytes, if any. + pub data: Bytes, + /// The output of the application's logger. + /// + /// **May be non-deterministic**. + pub log: String, + /// Additional information. + /// + /// **May be non-deterministic**. + pub info: String, + /// Amount of gas requested for the transaction. + pub gas_wanted: i64, + /// Amount of gas consumed by the transaction. + pub gas_used: i64, + /// Events that occurred while executing the transaction. + pub events: Vec, + /// The namespace for the `code`. + pub codespace: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseDeliverTx { + fn from(deliver_tx: DeliverTx) -> Self { + Self { + code: deliver_tx.code, + data: deliver_tx.data, + log: deliver_tx.log, + info: deliver_tx.info, + gas_wanted: deliver_tx.gas_wanted, + gas_used: deliver_tx.gas_used, + events: deliver_tx.events.into_iter().map(Into::into).collect(), + codespace: deliver_tx.codespace, + } + } +} + +impl TryFrom for DeliverTx { + type Error = crate::Error; + + fn try_from(deliver_tx: pb::ResponseDeliverTx) -> Result { + Ok(Self { + code: deliver_tx.code, + data: deliver_tx.data, + log: deliver_tx.log, + info: deliver_tx.info, + gas_wanted: deliver_tx.gas_wanted, + gas_used: deliver_tx.gas_used, + events: deliver_tx + .events + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + codespace: deliver_tx.codespace, + }) + } +} + +impl Protobuf for DeliverTx {} diff --git a/tendermint/src/abci/response/echo.rs b/tendermint/src/abci/response/echo.rs new file mode 100644 index 000000000..03cdcb185 --- /dev/null +++ b/tendermint/src/abci/response/echo.rs @@ -0,0 +1,36 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/response-echo.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct Echo { + /// The message sent in the request. + pub message: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseEcho { + fn from(echo: Echo) -> Self { + Self { + message: echo.message, + } + } +} + +impl TryFrom for Echo { + type Error = crate::Error; + + fn try_from(echo: pb::ResponseEcho) -> Result { + Ok(Self { + message: echo.message, + }) + } +} + +impl Protobuf for Echo {} diff --git a/tendermint/src/abci/response/end_block.rs b/tendermint/src/abci/response/end_block.rs new file mode 100644 index 000000000..521a44978 --- /dev/null +++ b/tendermint/src/abci/response/end_block.rs @@ -0,0 +1,63 @@ +use crate::{consensus, prelude::*}; + +use super::super::{types::ValidatorUpdate, Event}; + +#[doc = include_str!("../doc/response-endblock.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct EndBlock { + /// Changes to the validator set, if any. + /// + /// Setting the voting power to 0 removes a validator. + pub validator_updates: Vec, + /// Changes to consensus parameters (optional). + pub consensus_param_updates: Option, + /// Events that occurred while ending the block. + pub events: Vec, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseEndBlock { + fn from(end_block: EndBlock) -> Self { + Self { + validator_updates: end_block + .validator_updates + .into_iter() + .map(Into::into) + .collect(), + consensus_param_updates: end_block.consensus_param_updates.map(Into::into), + events: end_block.events.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for EndBlock { + type Error = crate::Error; + + fn try_from(end_block: pb::ResponseEndBlock) -> Result { + Ok(Self { + validator_updates: end_block + .validator_updates + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + consensus_param_updates: end_block + .consensus_param_updates + .map(TryInto::try_into) + .transpose()?, + events: end_block + .events + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for EndBlock {} diff --git a/tendermint/src/abci/response/exception.rs b/tendermint/src/abci/response/exception.rs new file mode 100644 index 000000000..cbb607c5d --- /dev/null +++ b/tendermint/src/abci/response/exception.rs @@ -0,0 +1,36 @@ +use crate::prelude::*; + +#[doc = include_str!("../doc/response-exception.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Exception { + /// Undocumented. + pub error: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseException { + fn from(exception: Exception) -> Self { + Self { + error: exception.error, + } + } +} + +impl TryFrom for Exception { + type Error = crate::Error; + + fn try_from(exception: pb::ResponseException) -> Result { + Ok(Self { + error: exception.error, + }) + } +} + +impl Protobuf for Exception {} diff --git a/tendermint/src/abci/response/info.rs b/tendermint/src/abci/response/info.rs new file mode 100644 index 000000000..02bc6e9a1 --- /dev/null +++ b/tendermint/src/abci/response/info.rs @@ -0,0 +1,55 @@ +use crate::{block, prelude::*, Error}; + +use bytes::Bytes; + +#[doc = include_str!("../doc/response-info.md")] +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Info { + /// Some arbitrary information. + pub data: String, + /// The application software semantic version. + pub version: String, + /// The application protocol version. + pub app_version: u64, + /// The latest block for which the app has called [`Commit`](super::super::Request::Commit). + pub last_block_height: block::Height, + /// The latest result of [`Commit`](super::super::Request::Commit). + // XXX(hdevalence): fix this, should be apphash? + pub last_block_app_hash: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseInfo { + fn from(info: Info) -> Self { + Self { + data: info.data, + version: info.version, + app_version: info.app_version, + last_block_height: info.last_block_height.into(), + last_block_app_hash: info.last_block_app_hash, + } + } +} + +impl TryFrom for Info { + type Error = Error; + + fn try_from(info: pb::ResponseInfo) -> Result { + Ok(Self { + data: info.data, + version: info.version, + app_version: info.app_version, + last_block_height: info.last_block_height.try_into()?, + last_block_app_hash: info.last_block_app_hash, + }) + } +} + +impl Protobuf for Info {} diff --git a/tendermint/src/abci/response/init_chain.rs b/tendermint/src/abci/response/init_chain.rs new file mode 100644 index 000000000..6d443b71d --- /dev/null +++ b/tendermint/src/abci/response/init_chain.rs @@ -0,0 +1,62 @@ +use bytes::Bytes; + +use crate::{consensus, prelude::*}; + +use super::super::types::ValidatorUpdate; + +#[doc = include_str!("../doc/response-initchain.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct InitChain { + /// Initial consensus-critical parameters (optional). + pub consensus_params: Option, + /// Initial validator set (optional). + /// + /// If this list is empty, the initial validator set will be the one given in + /// [`request::InitChain::validators`](super::super::request::InitChain::validators). + /// + /// If this list is nonempty, it will be the initial validator set, instead + /// of the one given in + /// [`request::InitChain::validators`](super::super::request::InitChain::validators). + pub validators: Vec, + /// Initial application hash. + pub app_hash: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseInitChain { + fn from(init_chain: InitChain) -> Self { + Self { + consensus_params: init_chain.consensus_params.map(Into::into), + validators: init_chain.validators.into_iter().map(Into::into).collect(), + app_hash: init_chain.app_hash, + } + } +} + +impl TryFrom for InitChain { + type Error = crate::Error; + + fn try_from(init_chain: pb::ResponseInitChain) -> Result { + Ok(Self { + consensus_params: init_chain + .consensus_params + .map(TryInto::try_into) + .transpose()?, + validators: init_chain + .validators + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + app_hash: init_chain.app_hash, + }) + } +} + +impl Protobuf for InitChain {} diff --git a/tendermint/src/abci/response/list_snapshots.rs b/tendermint/src/abci/response/list_snapshots.rs new file mode 100644 index 000000000..ef5353f73 --- /dev/null +++ b/tendermint/src/abci/response/list_snapshots.rs @@ -0,0 +1,46 @@ +use crate::prelude::*; + +use super::super::types::Snapshot; + +#[doc = include_str!("../doc/response-listsnapshots.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct ListSnapshots { + /// A list of local state snapshots. + pub snapshots: Vec, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseListSnapshots { + fn from(list_snapshots: ListSnapshots) -> Self { + Self { + snapshots: list_snapshots + .snapshots + .into_iter() + .map(Into::into) + .collect(), + } + } +} + +impl TryFrom for ListSnapshots { + type Error = crate::Error; + + fn try_from(list_snapshots: pb::ResponseListSnapshots) -> Result { + Ok(Self { + snapshots: list_snapshots + .snapshots + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for ListSnapshots {} diff --git a/tendermint/src/abci/response/load_snapshot_chunk.rs b/tendermint/src/abci/response/load_snapshot_chunk.rs new file mode 100644 index 000000000..406a4470a --- /dev/null +++ b/tendermint/src/abci/response/load_snapshot_chunk.rs @@ -0,0 +1,41 @@ +use crate::prelude::*; + +use bytes::Bytes; + +#[doc = include_str!("../doc/response-loadsnapshotchunk.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct LoadSnapshotChunk { + /// The binary chunk contents, in an arbitrary format. + /// + /// Chunk messages cannot be larger than 16MB *including metadata*, so 10MB + /// is a good starting point. + pub chunk: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseLoadSnapshotChunk { + fn from(load_snapshot_chunk: LoadSnapshotChunk) -> Self { + Self { + chunk: load_snapshot_chunk.chunk, + } + } +} + +impl TryFrom for LoadSnapshotChunk { + type Error = crate::Error; + + fn try_from(load_snapshot_chunk: pb::ResponseLoadSnapshotChunk) -> Result { + Ok(Self { + chunk: load_snapshot_chunk.chunk, + }) + } +} + +impl Protobuf for LoadSnapshotChunk {} diff --git a/tendermint/src/abci/response/offer_snapshot.rs b/tendermint/src/abci/response/offer_snapshot.rs new file mode 100644 index 000000000..7fa64f266 --- /dev/null +++ b/tendermint/src/abci/response/offer_snapshot.rs @@ -0,0 +1,63 @@ +use crate::prelude::*; + +// bring into scope for doc links +#[allow(unused)] +use super::super::types::Snapshot; + +#[doc = include_str!("../doc/response-offersnapshot.md")] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[repr(i32)] +pub enum OfferSnapshot { + /// Unknown result, abort all snapshot restoration + Unknown = 0, + /// Snapshot accepted, apply chunks + Accept = 1, + /// Abort all snapshot restoration + Abort = 2, + /// Reject this specific snapshot, try others + Reject = 3, + /// Reject all snapshots of this format, try others + RejectFormat = 4, + /// Reject all snapshots from the sender(s), try others + RejectSender = 5, +} + +impl Default for OfferSnapshot { + fn default() -> Self { + Self::Unknown + } +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::TryFrom; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseOfferSnapshot { + fn from(offer_snapshot: OfferSnapshot) -> Self { + Self { + result: offer_snapshot as i32, + } + } +} + +impl TryFrom for OfferSnapshot { + type Error = crate::Error; + + fn try_from(offer_snapshot: pb::ResponseOfferSnapshot) -> Result { + Ok(match offer_snapshot.result { + 0 => OfferSnapshot::Unknown, + 1 => OfferSnapshot::Accept, + 2 => OfferSnapshot::Abort, + 3 => OfferSnapshot::Reject, + 4 => OfferSnapshot::RejectFormat, + 5 => OfferSnapshot::RejectSender, + _ => return Err(crate::Error::unsupported_offer_snapshot_chunk_result()), + }) + } +} + +impl Protobuf for OfferSnapshot {} diff --git a/tendermint/src/abci/response/query.rs b/tendermint/src/abci/response/query.rs new file mode 100644 index 000000000..fd1b9655d --- /dev/null +++ b/tendermint/src/abci/response/query.rs @@ -0,0 +1,81 @@ +use bytes::Bytes; + +/// XXX(hdevalence): hide merkle::proof and re-export its contents from merkle? +use crate::merkle::proof as merkle; +use crate::{block, prelude::*}; + +#[doc = include_str!("../doc/response-query.md")] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct Query { + /// The response code for the query. + pub code: u32, + /// The output of the application's logger. + /// + /// **May be non-deterministic**. + pub log: String, + /// Additional information. + /// + /// **May be non-deterministic**. + pub info: String, + /// The index of the key in the tree. + pub index: i64, + /// The key of the matching data. + pub key: Bytes, + /// The value of the matching data. + pub value: Bytes, + /// Serialized proof for the value data, if requested, to be verified against + /// the app hash for the given `height`. + pub proof: Option, + /// The block height from which data was derived. + /// + /// Note that this is the height of the block containing the application's + /// Merkle root hash, which represents the state as it was after committing + /// the block at `height - 1`. + pub height: block::Height, + /// The namespace for the `code`. + pub codespace: String, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use core::convert::{TryFrom, TryInto}; +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::ResponseQuery { + fn from(query: Query) -> Self { + Self { + code: query.code, + log: query.log, + info: query.info, + index: query.index, + key: query.key, + value: query.value, + proof_ops: query.proof.map(Into::into), + height: query.height.into(), + codespace: query.codespace, + } + } +} + +impl TryFrom for Query { + type Error = crate::Error; + + fn try_from(query: pb::ResponseQuery) -> Result { + Ok(Self { + code: query.code, + log: query.log, + info: query.info, + index: query.index, + key: query.key, + value: query.value, + proof: query.proof_ops.map(TryInto::try_into).transpose()?, + height: query.height.try_into()?, + codespace: query.codespace, + }) + } +} + +impl Protobuf for Query {} diff --git a/tendermint/src/abci/types.rs b/tendermint/src/abci/types.rs new file mode 100644 index 000000000..710342130 --- /dev/null +++ b/tendermint/src/abci/types.rs @@ -0,0 +1,310 @@ +//! ABCI-specific data types used in requests and responses. +//! +//! These types have changes from the core data structures to better accomodate +//! ABCI applications. +//! +//! [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#data-types) + +use core::convert::{TryFrom, TryInto}; + +use bytes::Bytes; +use chrono::{DateTime, Utc}; + +use crate::{block, prelude::*, vote, Error, PublicKey}; + +/// A validator address with voting power. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#validator) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Validator { + /// The validator's address (the first 20 bytes of `SHA256(public_key)`). + pub address: [u8; 20], + /// The voting power of the validator. + pub power: vote::Power, +} + +/// A change to the validator set. +/// +/// Used to inform Tendermint of changes to the validator set. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#validatorupdate) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct ValidatorUpdate { + /// The validator's public key. + pub pub_key: PublicKey, + /// The validator's voting power. + pub power: vote::Power, +} + +/// Information about a whether a validator signed the last block. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#voteinfo) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct VoteInfo { + /// Identifies the validator. + pub validator: Validator, + /// Whether or not the validator signed the last block. + pub signed_last_block: bool, +} + +/// The possible kinds of [`Evidence`]. +/// +/// Note: the +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#evidencetype-2) +/// calls this `EvidenceType`, but we follow the Rust convention and name it `EvidenceKind` +/// to avoid confusion with Rust types. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +#[repr(i32)] +pub enum EvidenceKind { + /// Unknown evidence type (proto default value). + Unknown = 0, + /// Evidence that the validator voted for two different blocks in the same + /// round of the same height. + DuplicateVote = 1, + /// Evidence that a validator attacked a light client. + LightClientAttack = 2, +} + +/// Evidence of validator misbehavior. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#evidence) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Evidence { + /// The kind of evidence. + /// + /// Note: this field is called `type` in the protobuf, but we call it `kind` + /// to avoid the Rust keyword. + pub kind: EvidenceKind, + /// The offending validator. + pub validator: Validator, + /// The height when the offense occurred. + pub height: block::Height, + /// The corresponding time when the offense occurred. + pub time: DateTime, + /// Total voting power of the validator set at `height`. + /// + /// This is included in case the ABCI application does not store historical + /// validators, cf. + /// [#4581](https://github.com/tendermint/tendermint/issues/4581) + pub total_voting_power: vote::Power, +} + +/// Information on the last block commit. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#lastcommitinfo) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct LastCommitInfo { + /// The commit round. + /// + /// Reflects the total number of rounds it took to come to consensus for the + /// current block. + pub round: block::Round, + /// The list of validator addresses in the last validator set, with their + /// voting power and whether or not they signed a vote. + pub votes: Vec, +} + +/// Used for state sync snapshots. +/// +/// When sent across the network, a `Snapshot` can be at most 4 MB. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#snapshot) +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct Snapshot { + /// The height at which the snapshot was taken + pub height: block::Height, + /// The application-specific snapshot format identifier. + /// + /// This allows applications to version their snapshot data format and make + /// backwards-incompatible changes. Tendermint does not interpret this field. + pub format: u32, + /// The number of chunks in the snapshot. Must be at least 1. + pub chunks: u32, + /// An arbitrary snapshot hash. + /// + /// This hash must be equal only for identical snapshots across nodes. + /// Tendermint does not interpret the hash, only compares it with other + /// hashes. + pub hash: Bytes, + /// Arbitrary application metadata, e.g., chunk hashes or other verification data. + pub metadata: Bytes, +} + +// ============================================================================= +// Protobuf conversions +// ============================================================================= + +use tendermint_proto::abci as pb; +use tendermint_proto::Protobuf; + +impl From for pb::Validator { + fn from(v: Validator) -> Self { + Self { + address: Bytes::copy_from_slice(&v.address[..]), + power: v.power.into(), + } + } +} + +impl TryFrom for Validator { + type Error = Error; + + fn try_from(vu: pb::Validator) -> Result { + let address = if vu.address.len() == 20 { + let mut bytes = [0u8; 20]; + bytes.copy_from_slice(&vu.address); + bytes + } else { + return Err(Error::invalid_account_id_length()); + }; + + Ok(Self { + address, + power: vu.power.try_into()?, + }) + } +} + +impl Protobuf for Validator {} + +impl From for pb::ValidatorUpdate { + fn from(vu: ValidatorUpdate) -> Self { + Self { + pub_key: Some(vu.pub_key.into()), + power: vu.power.into(), + } + } +} + +impl TryFrom for ValidatorUpdate { + type Error = Error; + + fn try_from(vu: pb::ValidatorUpdate) -> Result { + Ok(Self { + pub_key: vu + .pub_key + .ok_or_else(Error::missing_public_key)? + .try_into()?, + power: vu.power.try_into()?, + }) + } +} + +impl Protobuf for ValidatorUpdate {} + +impl From for pb::VoteInfo { + fn from(vi: VoteInfo) -> Self { + Self { + validator: Some(vi.validator.into()), + signed_last_block: vi.signed_last_block, + } + } +} + +impl TryFrom for VoteInfo { + type Error = Error; + + fn try_from(vi: pb::VoteInfo) -> Result { + Ok(Self { + validator: vi + .validator + .ok_or_else(Error::missing_validator)? + .try_into()?, + signed_last_block: vi.signed_last_block, + }) + } +} + +impl Protobuf for VoteInfo {} + +impl From for pb::Evidence { + fn from(evidence: Evidence) -> Self { + Self { + r#type: evidence.kind as i32, + validator: Some(evidence.validator.into()), + height: evidence.height.into(), + time: Some(evidence.time.into()), + total_voting_power: evidence.total_voting_power.into(), + } + } +} + +impl TryFrom for Evidence { + type Error = Error; + + fn try_from(evidence: pb::Evidence) -> Result { + let kind = match evidence.r#type { + 0 => EvidenceKind::Unknown, + 1 => EvidenceKind::DuplicateVote, + 2 => EvidenceKind::LightClientAttack, + _ => return Err(Error::invalid_evidence()), + }; + + Ok(Self { + kind, + validator: evidence + .validator + .ok_or_else(Error::missing_validator)? + .try_into()?, + height: evidence.height.try_into()?, + time: evidence.time.ok_or_else(Error::missing_timestamp)?.into(), + total_voting_power: evidence.total_voting_power.try_into()?, + }) + } +} + +impl Protobuf for Evidence {} + +impl From for pb::LastCommitInfo { + fn from(lci: LastCommitInfo) -> Self { + Self { + round: lci.round.into(), + votes: lci.votes.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for LastCommitInfo { + type Error = Error; + + fn try_from(lci: pb::LastCommitInfo) -> Result { + Ok(Self { + round: lci.round.try_into()?, + votes: lci + .votes + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Protobuf for LastCommitInfo {} + +impl From for pb::Snapshot { + fn from(snapshot: Snapshot) -> Self { + Self { + height: snapshot.height.into(), + format: snapshot.format, + chunks: snapshot.chunks, + hash: snapshot.hash, + metadata: snapshot.metadata, + } + } +} + +impl TryFrom for Snapshot { + type Error = Error; + + fn try_from(snapshot: pb::Snapshot) -> Result { + Ok(Self { + height: snapshot.height.try_into()?, + format: snapshot.format, + chunks: snapshot.chunks, + hash: snapshot.hash, + metadata: snapshot.metadata, + }) + } +} + +impl Protobuf for Snapshot {} diff --git a/tendermint/src/block.rs b/tendermint/src/block.rs index d16d29944..b95b65f13 100644 --- a/tendermint/src/block.rs +++ b/tendermint/src/block.rs @@ -22,7 +22,7 @@ pub use self::{ size::Size, }; use crate::prelude::*; -use crate::{abci::transaction, error::Error, evidence}; +use crate::{error::Error, evidence}; use core::convert::{TryFrom, TryInto}; use serde::{Deserialize, Serialize}; use tendermint_proto::types::Block as RawBlock; @@ -35,18 +35,18 @@ use tendermint_proto::Protobuf; // Default serialization - all fields serialize; used by /block endpoint #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] #[non_exhaustive] +#[serde(try_from = "RawBlock", into = "RawBlock")] pub struct Block { /// Block header pub header: Header, /// Transaction data - pub data: transaction::Data, + pub data: Vec>, /// Evidence of malfeasance pub evidence: evidence::Data, /// Last commit - #[serde(with = "crate::serializers::optional")] pub last_commit: Option, } @@ -75,7 +75,7 @@ impl TryFrom for Block { //} Ok(Block { header, - data: value.data.ok_or_else(Error::missing_data)?.into(), + data: value.data.ok_or_else(Error::missing_data)?.txs, evidence: value .evidence .ok_or_else(Error::missing_evidence)? @@ -87,9 +87,10 @@ impl TryFrom for Block { impl From for RawBlock { fn from(value: Block) -> Self { + use tendermint_proto::types::Data as RawData; RawBlock { header: Some(value.header.into()), - data: Some(value.data.into()), + data: Some(RawData { txs: value.data }), evidence: Some(value.evidence.into()), last_commit: value.last_commit.map(Into::into), } @@ -100,7 +101,7 @@ impl Block { /// constructor pub fn new( header: Header, - data: transaction::Data, + data: Vec>, evidence: evidence::Data, last_commit: Option, ) -> Result { @@ -128,7 +129,7 @@ impl Block { } /// Get data - pub fn data(&self) -> &transaction::Data { + pub fn data(&self) -> &Vec> { &self.data } diff --git a/tendermint/src/block/size.rs b/tendermint/src/block/size.rs index 0781e9058..3260bfeb6 100644 --- a/tendermint/src/block/size.rs +++ b/tendermint/src/block/size.rs @@ -6,7 +6,7 @@ use tendermint_proto::Protobuf; use { crate::serializers, serde::{Deserialize, Serialize}, - tendermint_proto::abci::BlockParams as RawSize, + tendermint_proto::types::BlockParams as RawSize, }; /// Block size parameters diff --git a/tendermint/src/consensus/params.rs b/tendermint/src/consensus/params.rs index 25e2af838..fbc73a6f1 100644 --- a/tendermint/src/consensus/params.rs +++ b/tendermint/src/consensus/params.rs @@ -5,23 +5,23 @@ use crate::prelude::*; use crate::{block, evidence, public_key}; use core::convert::{TryFrom, TryInto}; use serde::{Deserialize, Serialize}; -use tendermint_proto::abci::ConsensusParams as RawParams; +use tendermint_proto::types::ConsensusParams as RawParams; use tendermint_proto::types::ValidatorParams as RawValidatorParams; use tendermint_proto::types::VersionParams as RawVersionParams; use tendermint_proto::Protobuf; -/// Tendermint consensus parameters +/// All consensus-relevant parameters that can be adjusted by the ABCI app. +/// +/// [ABCI documentation](https://docs.tendermint.com/master/spec/abci/abci.html#consensusparams) #[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)] pub struct Params { - /// Block size parameters + /// Parameters limiting the size of a block and time between consecutive blocks. pub block: block::Size, - - /// Evidence parameters + /// Parameters limiting the validity of evidence of byzantine behaviour. pub evidence: evidence::Params, - - /// Validator parameters + /// Parameters limiting the types of public keys validators can use. pub validator: ValidatorParams, - + /// The ABCI application version. /// Version parameters #[serde(skip)] // Todo: FIXME kvstore /genesis returns '{}' instead of '{app_version: "0"}' pub version: Option, @@ -62,10 +62,12 @@ impl From for RawParams { } } -/// Validator consensus parameters +/// ValidatorParams restrict the public key types validators can use. +/// +/// [Tendermint documentation](https://docs.tendermint.com/master/spec/core/data_structures.html#validatorparams) #[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)] pub struct ValidatorParams { - /// Allowed algorithms for validator signing + /// List of accepted public key types. pub pub_key_types: Vec, } @@ -108,10 +110,13 @@ impl From for RawValidatorParams { } /// Version Parameters +/// +/// [Tendermint documentation](https://docs.tendermint.com/master/spec/core/data_structures.html#versionparams) #[derive(Clone, Serialize, Deserialize, Debug, Eq, PartialEq, Default)] pub struct VersionParams { + /// The ABCI application version. #[serde(with = "crate::serializers::from_str")] - app_version: u64, + pub app_version: u64, } impl Protobuf for VersionParams {} diff --git a/tendermint/src/error.rs b/tendermint/src/error.rs index 85cdfd7a7..62eed778e 100644 --- a/tendermint/src/error.rs +++ b/tendermint/src/error.rs @@ -112,6 +112,27 @@ define_error! { MissingTimestamp |_| { format_args!("missing timestamp field") }, + MissingVersion + |_| { format_args!("missing version") }, + + MissingMaxAgeDuration + |_| { format_args!("missing max_age_duration") }, + + MissingPublicKey + |_| { format_args!("missing public key") }, + + MissingValidator + |_| { format_args!("missing validator") }, + + MissingLastCommitInfo + |_| { format_args!("missing last commit info") }, + + MissingGenesisTime + |_| { format_args!("missing genesis time") }, + + MissingConsensusParams + |_| { format_args!("missing consensus params") }, + InvalidTimestamp { reason: String } | e | { format_args!("invalid timestamp: {}", e.reason) }, @@ -120,9 +141,6 @@ define_error! { { reason: String } | e | { format_args!("invalid block: {}", e.reason) }, - MissingVersion - |_| { format_args!("missing version") }, - InvalidFirstHeader |_| { format_args!("last_block_id is not null on first height") }, @@ -139,6 +157,18 @@ define_error! { InvalidEvidence |_| { format_args!("invalid evidence") }, + InvalidValidatorParams + |_| { format_args!("invalid validator parameters") }, + + InvalidVersionParams + |_| { format_args!("invalid version parameters") }, + + InvalidAbciRequestType + |_| { format_args!("invalid ABCI request type") }, + + InvalidAbciResponseType + |_| { format_args!("invalid ABCI response type") }, + BlockIdFlag |_| { format_args!("invalid block id flag") }, @@ -149,26 +179,23 @@ define_error! { UnsupportedKeyType |_| { format_args!("unsupported key type" ) }, - RawVotingPowerMismatch - { raw: vote::Power, computed: vote::Power } - |e| { format_args!("mismatch between raw voting ({0:?}) and computed one ({1:?})", e.raw, e.computed) }, + UnsupportedCheckTxType + |_| { format_args!("unsupported CheckTx type" ) }, - MissingPublicKey - |_| { format_args!("missing public key") }, + UnsupportedApplySnapshotChunkResult + |_| { format_args!("unsupported ApplySnapshotChunkResult type" ) }, - InvalidValidatorParams - |_| { format_args!("invalid validator parameters") }, + UnsupportedOfferSnapshotChunkResult + |_| { format_args!("unsupported OfferSnapshotChunkResult type" ) }, - InvalidVersionParams - |_| { format_args!("invalid version parameters") }, + RawVotingPowerMismatch + { raw: vote::Power, computed: vote::Power } + |e| { format_args!("mismatch between raw voting ({0:?}) and computed one ({1:?})", e.raw, e.computed) }, NegativeMaxAgeNum [ DisplayOnly ] |_| { format_args!("negative max_age_num_blocks") }, - MissingMaxAgeDuration - |_| { format_args!("missing max_age_duration") }, - ProposerNotFound { account: account::Id } |e| { format_args!("proposer with address '{0}' no found in validator set", e.account) }, @@ -195,3 +222,9 @@ define_error! { |_| { "trust threshold too small (must be >= 1/3)" }, } } + +impl From for Error { + fn from(_never: core::convert::Infallible) -> Error { + unreachable!("Infallible can never be constructed") + } +} diff --git a/tendermint/src/evidence.rs b/tendermint/src/evidence.rs index 66ac5465f..767b7e385 100644 --- a/tendermint/src/evidence.rs +++ b/tendermint/src/evidence.rs @@ -207,19 +207,28 @@ impl AsRef<[Evidence]> for Data { } } -/// Evidence collection parameters +/// EvidenceParams determine how we handle evidence of malfeasance. +/// +/// [Tendermint documentation](https://docs.tendermint.com/master/spec/core/data_structures.html#evidenceparams) #[derive(Deserialize, Serialize, Clone, Debug, Eq, PartialEq)] // Todo: This struct is ready to be converted through tendermint_proto::types::EvidenceParams. // https://github.com/informalsystems/tendermint-rs/issues/741 pub struct Params { - /// Maximum allowed age for evidence to be collected + /// Max age of evidence, in blocks. #[serde(with = "serializers::from_str")] pub max_age_num_blocks: u64, - /// Max age duration + /// Max age of evidence, in time. + /// + /// It should correspond with an app's "unbonding period" or other similar + /// mechanism for handling [Nothing-At-Stake attacks][nas]. + /// + /// [nas]: https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed pub max_age_duration: Duration, - /// Max bytes + /// This sets the maximum size of total evidence in bytes that can be + /// committed in a single block, and should fall comfortably under the max + /// block bytes. The default is 1048576 or 1MB. #[serde(with = "serializers::from_str", default)] pub max_bytes: i64, } diff --git a/tendermint/src/hash.rs b/tendermint/src/hash.rs index 237e640d4..b00271bb9 100644 --- a/tendermint/src/hash.rs +++ b/tendermint/src/hash.rs @@ -233,7 +233,11 @@ impl AsRef<[u8]> for AppHash { impl Debug for AppHash { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "hash::AppHash({:?})", self.0) + write!( + f, + "AppHash({})", + Hex::upper_case().encode_to_string(&self.0).unwrap() + ) } } diff --git a/tendermint/src/prelude.rs b/tendermint/src/prelude.rs index 9ff42a989..3aee8bcda 100644 --- a/tendermint/src/prelude.rs +++ b/tendermint/src/prelude.rs @@ -9,3 +9,6 @@ pub use alloc::vec::Vec; pub use alloc::format; pub use alloc::vec; + +// will be included in 2021 edition. +pub use core::convert::{TryFrom, TryInto}; diff --git a/tendermint/src/serializers.rs b/tendermint/src/serializers.rs index 697ceaa1c..8a0efc8b9 100644 --- a/tendermint/src/serializers.rs +++ b/tendermint/src/serializers.rs @@ -9,6 +9,5 @@ pub use tendermint_proto::serializers::*; pub mod apphash; pub mod hash; -pub mod hash_base64; pub mod option_hash; pub mod time; diff --git a/tendermint/src/serializers/hash_base64.rs b/tendermint/src/serializers/hash_base64.rs deleted file mode 100644 index 5409ef39d..000000000 --- a/tendermint/src/serializers/hash_base64.rs +++ /dev/null @@ -1,33 +0,0 @@ -//! Encoding/decoding ABCI transaction hashes to/from base64. - -use crate::abci::transaction::{Hash, HASH_LENGTH}; -use crate::prelude::*; -use serde::{Deserialize, Deserializer, Serializer}; -use subtle_encoding::base64; - -/// Deserialize a base64-encoded string into a Hash -pub fn deserialize<'de, D>(deserializer: D) -> Result -where - D: Deserializer<'de>, -{ - let s = Option::::deserialize(deserializer)?.unwrap_or_default(); - let decoded = base64::decode(&s).map_err(serde::de::Error::custom)?; - if decoded.len() != HASH_LENGTH { - return Err(serde::de::Error::custom( - "unexpected transaction length for hash", - )); - } - let mut decoded_bytes = [0u8; HASH_LENGTH]; - decoded_bytes.copy_from_slice(decoded.as_ref()); - Ok(Hash::new(decoded_bytes)) -} - -/// Serialize from a Hash into a base64-encoded string -pub fn serialize(value: &Hash, serializer: S) -> Result -where - S: Serializer, -{ - let base64_bytes = base64::encode(value.as_bytes()); - let base64_string = String::from_utf8(base64_bytes).map_err(serde::ser::Error::custom)?; - serializer.serialize_str(&base64_string) -} diff --git a/tools/abci-test/Makefile.toml b/tools/abci-test/Makefile.toml index a33e677fd..d85e02a89 100644 --- a/tools/abci-test/Makefile.toml +++ b/tools/abci-test/Makefile.toml @@ -1,6 +1,6 @@ [env] CONTAINER_NAME = "abci-test" -DOCKER_IMAGE = "informaldev/abci-harness:0.34.0" +DOCKER_IMAGE = "informaldev/abci-harness:0.35.0" HOST_RPC_PORT = 26657 CARGO_MAKE_WAIT_MILLISECONDS = 3500 @@ -22,7 +22,16 @@ dependencies = [ "docker-stop", "docker-rm" ] [tasks.docker-up] command = "docker" -args = ["run", "--name", "${CONTAINER_NAME}", "--rm", "--publish", "26657:${HOST_RPC_PORT}", "--volume", "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/../target/debug:/abci", "--detach", "${DOCKER_IMAGE}", "--verbose" ] +args = [ + "run", + "--name", "${CONTAINER_NAME}", + "--rm", + "--publish", "26657:${HOST_RPC_PORT}", + "--volume", "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/../target/debug:/abci", + "--detach", + "${DOCKER_IMAGE}", + "--verbose", +] dependencies = ["docker-up-stop-old", "docker-up-rm-old"] [tasks.docker-up-debug] @@ -31,7 +40,7 @@ args = ["run", "--name", "${CONTAINER_NAME}", "--rm", "--publish", "26657:${HOST dependencies = ["docker-up-stop-old", "docker-up-rm-old"] [tasks.test] -args = ["run", "--all-features"] +args = ["run", "--all-features", "--", "--verbose"] [tasks.docker-stop] command = "docker" diff --git a/tools/abci-test/src/main.rs b/tools/abci-test/src/main.rs index e69cf48a3..275ef4c9c 100644 --- a/tools/abci-test/src/main.rs +++ b/tools/abci-test/src/main.rs @@ -2,8 +2,8 @@ use futures::StreamExt; use structopt::StructOpt; -use tendermint::abci::Transaction; use tendermint_config::net::Address; +use tendermint_rpc::abci::Transaction; use tendermint_rpc::event::EventData; use tendermint_rpc::query::EventType; use tendermint_rpc::{Client, SubscriptionClient, WebSocketClient}; diff --git a/tools/docker/README.md b/tools/docker/README.md index b1dfeddae..30070e31a 100644 --- a/tools/docker/README.md +++ b/tools/docker/README.md @@ -1,42 +1,56 @@ -# Docker descriptions -This folder contains `Dockerfile` configurations that are used during development and testing. +# Docker images + +This folder contains `Dockerfile` configurations that are used during +development and testing. The folders are named `-`, like `tendermint-0.34.0`. -The created images are uploaded to DockerHub, under the informaldev organization. For example: `informaldev/tendermint:0.34.0`. +The created images are uploaded to DockerHub, under the informaldev +organization. For example: `informaldev/tendermint:0.34.0`. ## tendermint -This image is used during CI testing in the tendermint-rs crate and it can be used during fixture creation with `rpc-probe`. -It tests compatibility with the Tendermint Go implementation. -It is a GitHub Actions "Services"-compatible image: a standalone image that can run on its own. It can create its own -configuration if one was not provided. This ensures that the configuration file is always compatible with the Tendermint -version built into it. + +This image is used during CI testing in the tendermint-rs crate and it can be +used during fixture creation with `rpc-probe`. It tests compatibility with the +Tendermint Go implementation. It is a GitHub Actions "Services"-compatible +image: a standalone image that can run on its own. It can create its own +configuration if one was not provided. This ensures that the configuration file +is always compatible with the Tendermint version built into it. ## gaiad -This image will be used for `rpc-probe`, to generate fixtures for CI testing from a gaiad node. -Contrary to the `tendermint` image, the configuration here is pre-created so the genesis file can be populated with -additional wallets. The corresponding private keys are also saved into a test keyring. +This image will be used for `rpc-probe`, to generate fixtures for CI testing +from a gaiad node. + +Contrary to the `tendermint` image, the configuration here is pre-created so the +genesis file can be populated with additional wallets. The corresponding private +keys are also saved into a test keyring. -All the configuration is in the `n0` folder. Two wallets are created `c0` and `c1` (the validator's key is `n0`.) -Both wallets have `uatom`, `stake` and `n0token` added. +All the configuration is in the `n0` folder. Two wallets are created `c0` and +`c1` (the validator's key is `n0`.) Both wallets have `uatom`, `stake` and +`n0token` added. -Both wallets have an initial signed transaction created for easier population of the network before testing. These transactions -will send uatom tokens from c0 -> c1 and vice versa. They are both signed as `sequence 0` in the wallet, so they can only -be executed as the first transaction of the corresponding wallet. +Both wallets have an initial signed transaction created for easier population of +the network before testing. These transactions will send uatom tokens from c0 -> +c1 and vice versa. They are both signed as `sequence 0` in the wallet, so they +can only be executed as the first transaction of the corresponding wallet. # abci-harness -This image is used during CI testing in the abci-rs crate. -It tests compatibility with the Tendermint Go implementation. -It derives from the Tendermint Docker image above, but it expects a volume attached at `/abci` that contains the ABCI -application to be tested. The name of the ABCI application is `kvstore-rs` by default. This can be changed by setting the -`ABCI_APP` environment variable. - -The image will fire up a Tendermint node (auto-creating the configuration) and then execute the ABCI application -from the attached volume. It logs the Tendermint node log into kvstore-rs.tendermint and the ABCI application log into + +This image is used during CI testing in the abci-rs crate. It tests +compatibility with the Tendermint Go implementation. It derives from the +Tendermint Docker image above, but it expects a volume attached at `/abci` that +contains the ABCI application to be tested. The name of the ABCI application is +`kvstore-rs` by default. This can be changed by setting the `ABCI_APP` +environment variable. + +The image will fire up a Tendermint node (auto-creating the configuration) and +then execute the ABCI application from the attached volume. It logs the +Tendermint node log into kvstore-rs.tendermint and the ABCI application log into kvstore-rs.log on the attached volume. -This image has both the `muslc` and `glibc` libraries installed for easy testing of dynamically linked binaries. +This image has both the `muslc` and `glibc` libraries installed for easy testing +of dynamically linked binaries. Example: ```bash diff --git a/tools/docker/abci-harness-0.35.0/.gitignore b/tools/docker/abci-harness-0.35.0/.gitignore new file mode 100644 index 000000000..0c8c39bef --- /dev/null +++ b/tools/docker/abci-harness-0.35.0/.gitignore @@ -0,0 +1 @@ +tendermint \ No newline at end of file diff --git a/tools/docker/abci-harness-0.35.0/Dockerfile b/tools/docker/abci-harness-0.35.0/Dockerfile new file mode 100644 index 000000000..68c82dc87 --- /dev/null +++ b/tools/docker/abci-harness-0.35.0/Dockerfile @@ -0,0 +1,44 @@ +FROM alpine:3.15 +LABEL maintainer="hello@informal.systems" + +ARG TM_VERSION=0.35.0 +ARG TM_ARCHIVE_HASH=c70dc4538991183905c1eef17263b713666675a995d154a75a52cf0022338724 +ARG GLIBC_VERSION=2.34-r0 +ENV TM_HOME=/tendermint + +#GLIBC for Alpine from: https://github.com/sgerrand/alpine-pkg-glibc +RUN wget https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \ + -O /etc/apk/keys/sgerrand.rsa.pub && \ + wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk \ + https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk \ + https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-i18n-${GLIBC_VERSION}.apk && \ + apk add --no-cache glibc-${GLIBC_VERSION}.apk glibc-bin-${GLIBC_VERSION}.apk glibc-i18n-${GLIBC_VERSION}.apk && \ + rm glibc-${GLIBC_VERSION}.apk glibc-bin-${GLIBC_VERSION}.apk glibc-i18n-${GLIBC_VERSION}.apk && \ + /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 && \ + apk --no-cache add jq bash file && \ + wget https://github.com/freshautomations/sconfig/releases/download/v0.1.0/sconfig_linux_amd64 \ + -O /usr/bin/sconfig && \ + chmod 755 /usr/bin/sconfig && \ + addgroup tendermint && \ + adduser -S -G tendermint tendermint -h "$TM_HOME" && \ + cd /tmp && \ + wget "https://github.com/tendermint/tendermint/releases/download/v${TM_VERSION}/tendermint_${TM_VERSION}_linux_amd64.tar.gz" \ + -O tendermint.tar.gz && \ + echo "${TM_ARCHIVE_HASH} tendermint.tar.gz" > checksum.txt && \ + sha256sum -c checksum.txt && \ + tar xf tendermint.tar.gz && \ + mv tendermint /usr/bin/tendermint && \ + rm /tmp/checksum.txt && \ + rm /tmp/tendermint.tar.gz && \ + chown -R tendermint:tendermint ${TM_HOME} && \ + mkdir -p /var/log/abci && \ + chown tendermint:tendermint /var/log/abci +USER tendermint +WORKDIR $TM_HOME + +EXPOSE 26656 26657 26658 26660 +STOPSIGNAL SIGTERM + +COPY entrypoint /usr/bin/entrypoint +ENTRYPOINT ["/usr/bin/entrypoint"] +VOLUME [ "$TM_HOME", "/abci", "/var/log/abci" ] diff --git a/tools/docker/abci-harness-0.35.0/entrypoint b/tools/docker/abci-harness-0.35.0/entrypoint new file mode 100755 index 000000000..5731479ee --- /dev/null +++ b/tools/docker/abci-harness-0.35.0/entrypoint @@ -0,0 +1,39 @@ +#!/usr/bin/env sh +set -euo pipefail + +ABCI_PATH="/abci/${ABCI_APP:-kvstore-rs}" + +if [ ! -x "${ABCI_PATH}" ]; then + echo "Could not find executable ABCI app at ${ABCI_PATH} ." + echo "Add a volume with the file and use the ABCI_APP environment variable to point to a different file." + exit 1 +else + FILE_TYPE="$(file -b "${ABCI_PATH}")" + if [ -n "${FILE_TYPE##ELF 64-bit*}" ]; then + echo "File is not an ELF 64-bit binary (${FILE_TYPE})." + echo "Build the ABCI application for Linux using Docker:" + echo "docker run -it --rm --user \"\$(id -u)\":\"\$(id -g)\" -v \"\$PWD\":/usr/src/myapp -w /usr/src/myapp rust:latest cargo build-abci" + exit 1 + fi +fi + +if [ ! -d "${TM_HOME}/config" ]; then + + echo "Running tendermint init to create configuration." + /usr/bin/tendermint init validator + + sconfig -s ${TM_HOME}/config/config.toml \ + moniker=${MONIKER:-dockernode} \ + consensus.timeout-commit=500ms \ + rpc.laddr=tcp://0.0.0.0:26657 \ + p2p.addr-book-strict=false \ + instrumentation.prometheus=true + + sconfig -s ${TM_HOME}/config/genesis.json \ + chain_id=${CHAIN_ID:-dockerchain} + +fi + +exec /usr/bin/tendermint node 2>&1 > /var/log/abci/tendermint.log & + +exec "${ABCI_PATH}" "$@" 2>&1 | tee /var/log/abci/abci-app.log diff --git a/tools/docker/tendermint-0.35.0/.gitignore b/tools/docker/tendermint-0.35.0/.gitignore new file mode 100644 index 000000000..9059c6848 --- /dev/null +++ b/tools/docker/tendermint-0.35.0/.gitignore @@ -0,0 +1 @@ +tendermint diff --git a/tools/docker/tendermint-0.35.0/Dockerfile b/tools/docker/tendermint-0.35.0/Dockerfile new file mode 100644 index 000000000..9a7bb1aca --- /dev/null +++ b/tools/docker/tendermint-0.35.0/Dockerfile @@ -0,0 +1,33 @@ +FROM alpine:3.15 +LABEL maintainer="hello@informal.systems" + +ARG TM_VERSION=0.35.0 +ARG TM_ARCHIVE_HASH=c70dc4538991183905c1eef17263b713666675a995d154a75a52cf0022338724 +ENV TM_HOME=/tendermint + +RUN apk --no-cache add jq bash && \ + wget https://github.com/freshautomations/sconfig/releases/download/v0.1.0/sconfig_linux_amd64 \ + -O /usr/bin/sconfig && \ + chmod 755 /usr/bin/sconfig && \ + addgroup tendermint && \ + adduser -S -G tendermint tendermint -h "$TM_HOME" && \ + cd /tmp && \ + wget "https://github.com/tendermint/tendermint/releases/download/v${TM_VERSION}/tendermint_${TM_VERSION}_linux_amd64.tar.gz" \ + -O tendermint.tar.gz && \ + echo "${TM_ARCHIVE_HASH} tendermint.tar.gz" > checksum.txt && \ + sha256sum -c checksum.txt && \ + tar xf tendermint.tar.gz && \ + mv tendermint /usr/bin/tendermint && \ + rm /tmp/checksum.txt && \ + rm /tmp/tendermint.tar.gz && \ + chown -R tendermint:tendermint ${TM_HOME} +USER tendermint +WORKDIR $TM_HOME + +EXPOSE 26656 26657 26660 +STOPSIGNAL SIGTERM + +COPY entrypoint /usr/bin/entrypoint +ENTRYPOINT ["/usr/bin/entrypoint"] +CMD ["node"] +VOLUME [ "$TM_HOME" ] diff --git a/tools/docker/tendermint-0.35.0/entrypoint b/tools/docker/tendermint-0.35.0/entrypoint new file mode 100755 index 000000000..8e99d2320 --- /dev/null +++ b/tools/docker/tendermint-0.35.0/entrypoint @@ -0,0 +1,22 @@ +#!/usr/bin/env sh +set -euo pipefail + +if [ ! -d "${TM_HOME}/config" ]; then + + echo "Running tendermint init to create configuration." + /usr/bin/tendermint init validator + + sconfig -s ${TM_HOME}/config/config.toml \ + proxy-app=${PROXY_APP:-kvstore} \ + moniker=${MONIKER:-dockernode} \ + consensus.timeout-commit=500ms \ + rpc.laddr=tcp://0.0.0.0:26657 \ + p2p.addr-book-strict=false \ + instrumentation.prometheus=true + + sconfig -s ${TM_HOME}/config/genesis.json \ + chain_id=${CHAIN_ID:-dockerchain} + +fi + +exec /usr/bin/tendermint "$@" diff --git a/tools/kvstore-test/Makefile.toml b/tools/kvstore-test/Makefile.toml index 7f811cd39..2df64e61f 100644 --- a/tools/kvstore-test/Makefile.toml +++ b/tools/kvstore-test/Makefile.toml @@ -1,6 +1,6 @@ [env] CONTAINER_NAME = "kvstore-test" -DOCKER_IMAGE = "informaldev/tendermint:0.34.13" +DOCKER_IMAGE = "informaldev/tendermint:0.35.0" HOST_RPC_PORT = 26657 CARGO_MAKE_WAIT_MILLISECONDS = 1000 RUST_LOG = "debug" diff --git a/tools/kvstore-test/tests/light-client.rs b/tools/kvstore-test/tests/light-client.rs index c81185794..0b04931ae 100644 --- a/tools/kvstore-test/tests/light-client.rs +++ b/tools/kvstore-test/tests/light-client.rs @@ -23,7 +23,6 @@ use tendermint_light_client::{ types::{Height, PeerId, Status, TrustThreshold}, }; -use tendermint::abci::transaction::Hash as TxHash; use tendermint_rpc as rpc; use std::convert::TryFrom; @@ -33,7 +32,11 @@ struct TestEvidenceReporter; #[contracts::contract_trait] impl EvidenceReporter for TestEvidenceReporter { - fn report(&self, evidence: Evidence, peer: PeerId) -> Result { + fn report( + &self, + evidence: Evidence, + peer: PeerId, + ) -> Result { panic!( "unexpected fork detected for peer {} with evidence: {:?}", peer, evidence diff --git a/tools/kvstore-test/tests/tendermint.rs b/tools/kvstore-test/tests/tendermint.rs index 38ddca661..869feb50f 100644 --- a/tools/kvstore-test/tests/tendermint.rs +++ b/tools/kvstore-test/tests/tendermint.rs @@ -23,10 +23,10 @@ mod rpc { use futures::StreamExt; use std::convert::TryFrom; use std::sync::atomic::{AtomicU8, Ordering}; - use tendermint::abci::Log; - use tendermint::abci::{Code, Transaction}; use tendermint::block::Height; use tendermint::merkle::simple_hash_from_byte_vectors; + use tendermint_rpc::abci::Log; + use tendermint_rpc::abci::{Code, Transaction}; use tendermint_rpc::endpoint::tx::Response as ResultTx; use tendermint_rpc::event::{Event, EventData, TxInfo}; use tendermint_rpc::query::{EventType, Query}; @@ -107,12 +107,7 @@ mod rpc { // Check for empty merkle root. // See: https://github.com/informalsystems/tendermint-rs/issues/562 let computed_data_hash = simple_hash_from_byte_vectors( - block_info - .block - .data - .iter() - .map(|t| t.to_owned().into()) - .collect(), + block_info.block.data.iter().map(|t| t.to_owned()).collect(), ); assert_eq!( computed_data_hash, @@ -475,7 +470,7 @@ mod rpc { http_client: &HttpClient, websocket_client: &mut WebSocketClient, tx: Transaction, - ) -> Result<(tendermint::abci::transaction::Hash, TxInfo), tendermint_rpc::Error> { + ) -> Result<(tendermint_rpc::abci::transaction::Hash, TxInfo), tendermint_rpc::Error> { let mut subs = websocket_client.subscribe(EventType::Tx.into()).await?; let r = http_client.broadcast_tx_async(tx.clone()).await?; diff --git a/tools/proto-compiler/src/constants.rs b/tools/proto-compiler/src/constants.rs index 6a0fa439c..865ec42d9 100644 --- a/tools/proto-compiler/src/constants.rs +++ b/tools/proto-compiler/src/constants.rs @@ -6,7 +6,7 @@ pub const TENDERMINT_REPO: &str = "https://github.com/tendermint/tendermint"; // Tag: v0.34.0-rc4 // Branch: master // Commit ID (full length): d7d0ffea13c60c98b812d243ba5a2c375f341c15 -pub const TENDERMINT_COMMITISH: &str = "v0.34.9"; +pub const TENDERMINT_COMMITISH: &str = "v0.35.0"; /// Predefined custom attributes for message annotations const PRIMITIVE_ENUM: &str = r#"#[derive(::num_derive::FromPrimitive, ::num_derive::ToPrimitive)]"#; @@ -20,8 +20,7 @@ const HEXSTRING: &str = r#"#[serde(with = "crate::serializers::bytes::hexstring" const BASE64STRING: &str = r#"#[serde(with = "crate::serializers::bytes::base64string")]"#; const VEC_BASE64STRING: &str = r#"#[serde(with = "crate::serializers::bytes::vec_base64string")]"#; const OPTIONAL: &str = r#"#[serde(with = "crate::serializers::optional")]"#; -const VEC_SKIP_IF_EMPTY: &str = - r#"#[serde(skip_serializing_if = "::prost::alloc::vec::Vec::is_empty", with = "serde_bytes")]"#; +const BYTES_SKIP_IF_EMPTY: &str = r#"#[serde(skip_serializing_if = "bytes::Bytes::is_empty")]"#; const NULLABLEVECARRAY: &str = r#"#[serde(with = "crate::serializers::txs")]"#; const NULLABLE: &str = r#"#[serde(with = "crate::serializers::nullable")]"#; const ALIAS_POWER_QUOTED: &str = @@ -30,6 +29,7 @@ const PART_SET_HEADER_TOTAL: &str = r#"#[serde(with = "crate::serializers::part_set_header_total")]"#; const RENAME_EDPUBKEY: &str = r#"#[serde(rename = "tendermint/PubKeyEd25519", with = "crate::serializers::bytes::base64string")]"#; const RENAME_SECPPUBKEY: &str = r#"#[serde(rename = "tendermint/PubKeySecp256k1", with = "crate::serializers::bytes::base64string")]"#; +const RENAME_SRPUBKEY: &str = r#"#[serde(rename = "tendermint/PubKeySr25519", with = "crate::serializers::bytes::base64string")]"#; const RENAME_DUPLICATEVOTE: &str = r#"#[serde(rename = "tendermint/DuplicateVoteEvidence")]"#; const RENAME_LIGHTCLIENTATTACK: &str = r#"#[serde(rename = "tendermint/LightClientAttackEvidence")]"#; @@ -90,7 +90,7 @@ pub static CUSTOM_FIELD_ATTRIBUTES: &[(&str, &str)] = &[ (".tendermint.version.Consensus.app", QUOTED_WITH_DEFAULT), ( ".tendermint.abci.ResponseInfo.last_block_app_hash", - VEC_SKIP_IF_EMPTY, + BYTES_SKIP_IF_EMPTY, ), (".tendermint.abci.ResponseInfo.app_version", QUOTED), (".tendermint.types.BlockID.hash", HEXSTRING), @@ -144,6 +144,7 @@ pub static CUSTOM_FIELD_ATTRIBUTES: &[(&str, &str)] = &[ ".tendermint.crypto.PublicKey.sum.secp256k1", RENAME_SECPPUBKEY, ), + (".tendermint.crypto.PublicKey.sum.sr25519", RENAME_SRPUBKEY), ( ".tendermint.types.Evidence.sum.duplicate_vote_evidence", RENAME_DUPLICATEVOTE, diff --git a/tools/proto-compiler/src/functions.rs b/tools/proto-compiler/src/functions.rs index a3e992049..541e0cb72 100644 --- a/tools/proto-compiler/src/functions.rs +++ b/tools/proto-compiler/src/functions.rs @@ -2,13 +2,13 @@ use git2::build::{CheckoutBuilder, RepoBuilder}; use git2::{AutotagOption, Commit, FetchOptions, Oid, Reference, Repository}; use std::fs::{copy, create_dir_all, remove_dir_all, File}; use std::io::Write; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use subtle_encoding::hex; use walkdir::WalkDir; /// Clone or open+fetch a repository and check out a specific commitish /// In case of an existing repository, the origin remote will be set to `url`. -pub fn get_commitish(dir: &PathBuf, url: &str, commitish: &str) { +pub fn get_commitish(dir: &Path, url: &str, commitish: &str) { let repo = if dir.exists() { fetch_existing(dir, url) } else { @@ -17,7 +17,7 @@ pub fn get_commitish(dir: &PathBuf, url: &str, commitish: &str) { checkout_commitish(&repo, commitish) } -fn clone_new(dir: &PathBuf, url: &str) -> Repository { +fn clone_new(dir: &Path, url: &str) -> Repository { println!( " [info] => Cloning {} into {} folder", url, @@ -34,7 +34,7 @@ fn clone_new(dir: &PathBuf, url: &str) -> Repository { builder.clone(url, dir).unwrap() } -fn fetch_existing(dir: &PathBuf, url: &str) -> Repository { +fn fetch_existing(dir: &Path, url: &str) -> Repository { println!( " [info] => Fetching from {} into existing {} folder", url, @@ -115,7 +115,7 @@ fn find_reference_or_commit<'a>( ) -> (Option>, Commit<'a>) { let mut tried_origin = false; // we tried adding 'origin/' to the commitish - let mut try_reference = repo.resolve_reference_from_short_name(&commitish); + let mut try_reference = repo.resolve_reference_from_short_name(commitish); if try_reference.is_err() { // Local branch might be missing, try the remote branch try_reference = repo.resolve_reference_from_short_name(&format!("origin/{}", commitish)); @@ -151,7 +151,7 @@ fn find_reference_or_commit<'a>( } /// Copy generated files to target folder -pub fn copy_files(src_dir: &PathBuf, target_dir: &PathBuf) { +pub fn copy_files(src_dir: &Path, target_dir: &Path) { // Remove old compiled files remove_dir_all(target_dir).unwrap_or_default(); create_dir_all(target_dir).unwrap(); @@ -203,7 +203,7 @@ pub fn find_proto_files(proto_paths: Vec) -> Vec { } /// Create tendermint.rs with library information -pub fn generate_tendermint_lib(prost_dir: &PathBuf, tendermint_lib_target: &PathBuf) { +pub fn generate_tendermint_lib(prost_dir: &Path, tendermint_lib_target: &Path) { let file_names = WalkDir::new(prost_dir) .into_iter() .filter_map(|e| e.ok()) @@ -238,7 +238,7 @@ pub fn generate_tendermint_lib(prost_dir: &PathBuf, tendermint_lib_target: &Path ); for part in parts { - tab_count = tab_count - 1; + tab_count -= 1; let tabs = tab.repeat(tab_count); //{tabs} pub mod {part} { //{inner_content} diff --git a/tools/proto-compiler/src/main.rs b/tools/proto-compiler/src/main.rs index 8be0203d4..7de037997 100644 --- a/tools/proto-compiler/src/main.rs +++ b/tools/proto-compiler/src/main.rs @@ -55,8 +55,12 @@ fn main() { // List available proto files let protos = find_proto_files(proto_paths); - // Compile proto files with added annotations, exchange prost_types to our own let mut pb = prost_build::Config::new(); + + // Use shared Bytes buffers for ABCI messages: + pb.bytes(&[".tendermint.abci"]); + + // Compile proto files with added annotations, exchange prost_types to our own pb.out_dir(&out_dir); for type_attribute in CUSTOM_TYPE_ATTRIBUTES { pb.type_attribute(type_attribute.0, type_attribute.1); diff --git a/tools/rpc-probe/Makefile.toml b/tools/rpc-probe/Makefile.toml index ee1f5a6d4..00e4fbe7b 100644 --- a/tools/rpc-probe/Makefile.toml +++ b/tools/rpc-probe/Makefile.toml @@ -1,6 +1,6 @@ [env] CONTAINER_NAME = "kvstore-rpc-probe" -DOCKER_IMAGE = "informaldev/tendermint:0.34.13" +DOCKER_IMAGE = "informaldev/tendermint:0.35.0" HOST_RPC_PORT = 26657 CARGO_MAKE_WAIT_MILLISECONDS = 3500 @@ -10,7 +10,7 @@ dependencies = [ "docker-up", "wait", "run", "docker-down" ] [tasks.run] command = "cargo" -args = ["run"] +args = ["run", "--", "--verbose"] [tasks.docker-down] dependencies = [ "docker-stop", "docker-rm" ] diff --git a/tools/rpc-probe/src/client.rs b/tools/rpc-probe/src/client.rs index 905cbe5e2..1085125b9 100644 --- a/tools/rpc-probe/src/client.rs +++ b/tools/rpc-probe/src/client.rs @@ -39,9 +39,10 @@ impl Client { response_tx, }) .await?; - response_rx.recv().await.ok_or_else(|| { - Error::InternalError("internal channel communication problem".to_string()) - })? + response_rx + .recv() + .await + .ok_or_else(|| Error::Internal("internal channel communication problem".to_string()))? } pub async fn subscribe( @@ -59,7 +60,7 @@ impl Client { }) .await?; let response = response_rx.recv().await.ok_or_else(|| { - Error::InternalError("internal channel communication problem".to_string()) + Error::Internal("internal channel communication problem".to_string()) })??; Ok((subscription_rx, response)) } @@ -93,7 +94,7 @@ impl Client { return Ok(()); } } - Err(Error::InternalError(format!( + Err(Error::Internal(format!( "subscription terminated before we could reach target height of {}", h ))) @@ -105,7 +106,7 @@ impl Client { async fn send_cmd(&mut self, cmd: DriverCommand) -> Result<()> { self.cmd_tx.send(cmd).map_err(|e| { - Error::InternalError(format!( + Error::Internal(format!( "WebSocket driver channel receiving end closed unexpectedly: {}", e.to_string() )) @@ -155,7 +156,7 @@ impl ClientDriver { Some(res) = self.stream.next() => match res { Ok(msg) => self.handle_incoming_msg(msg).await?, Err(e) => return Err( - Error::WebSocketError( + Error::WebSocket( format!("failed to read from WebSocket connection: {}", e), ), ), @@ -179,7 +180,7 @@ impl ClientDriver { async fn send_msg(&mut self, msg: Message) -> Result<()> { self.stream.send(msg).await.map_err(|e| { - Error::WebSocketError(format!("failed to write to WebSocket connection: {}", e)) + Error::WebSocket(format!("failed to write to WebSocket connection: {}", e)) }) } diff --git a/tools/rpc-probe/src/error.rs b/tools/rpc-probe/src/error.rs index a1124f304..dbbf77d37 100644 --- a/tools/rpc-probe/src/error.rs +++ b/tools/rpc-probe/src/error.rs @@ -7,10 +7,10 @@ pub type Result = std::result::Result; #[derive(Debug, Clone, Error)] pub enum Error { #[error("an internal error occurred: {0}")] - InternalError(String), + Internal(String), #[error("WebSocket connection error: {0}")] - WebSocketError(String), + WebSocket(String), #[error("timed out: {0}")] Timeout(String), @@ -25,18 +25,18 @@ pub enum Error { InvalidParamValue(String), #[error("I/O error: {0}")] - IoError(String), + Io(String), #[error("unexpected success response")] - UnexpectedSuccess, + UnexpectedSuccessResponse, #[error("unexpected error response: {0}")] - UnexpectedError(String), + UnexpectedErrorResponse(String), } impl From for Error { fn from(e: async_tungstenite::tungstenite::Error) -> Self { - Self::WebSocketError(e.to_string()) + Self::WebSocket(e.to_string()) } } @@ -54,13 +54,13 @@ impl From for Error { impl From> for Error { fn from(e: tokio::sync::mpsc::error::SendError) -> Self { - Self::InternalError(format!("failed to send to channel: {}", e)) + Self::Internal(format!("failed to send to channel: {}", e)) } } impl From for Error { fn from(e: tokio::task::JoinError) -> Self { - Self::InternalError(format!( + Self::Internal(format!( "failed while waiting for async task to join: {}", e )) @@ -69,6 +69,6 @@ impl From for Error { impl From for Error { fn from(e: std::io::Error) -> Self { - Self::IoError(e.to_string()) + Self::Io(e.to_string()) } } diff --git a/tools/rpc-probe/src/kvstore.rs b/tools/rpc-probe/src/kvstore.rs index a5f4b0eaf..274de641d 100644 --- a/tools/rpc-probe/src/kvstore.rs +++ b/tools/rpc-probe/src/kvstore.rs @@ -114,6 +114,17 @@ pub fn subscribe(query: &str) -> PlannedInteraction { PlannedSubscription::new(query).into() } +pub fn tx(hash: &str, prove: bool) -> PlannedInteraction { + Request::new( + "tx", + json!({ + "hash": hash, + "prove": prove, + }), + ) + .into() +} + pub fn tx_search( query: &str, prove: bool, diff --git a/tools/rpc-probe/src/plan.rs b/tools/rpc-probe/src/plan.rs index 74e7ceaa1..596fd4483 100644 --- a/tools/rpc-probe/src/plan.rs +++ b/tools/rpc-probe/src/plan.rs @@ -366,14 +366,14 @@ async fn execute_request( let response_json = match client.request(&request_json).await { Ok(r) => { if expect_error { - return Err(Error::UnexpectedSuccess); + return Err(Error::UnexpectedSuccessResponse); } r } Err(e) => match e { Error::Failed(_, r) => { if !expect_error { - return Err(Error::UnexpectedError( + return Err(Error::UnexpectedErrorResponse( serde_json::to_string_pretty(&r).unwrap(), )); } @@ -399,7 +399,7 @@ async fn execute_subscription( match client.subscribe(&uuid_v4(), &subs.subscription.query).await { Ok(r) => { if expect_error { - return Err(Error::UnexpectedSuccess); + return Err(Error::UnexpectedSuccessResponse); } r } @@ -408,7 +408,7 @@ async fn execute_subscription( // queries). Error::Failed(_, r) => { if !expect_error { - return Err(Error::UnexpectedError( + return Err(Error::UnexpectedErrorResponse( serde_json::to_string_pretty(&r).unwrap(), )); } diff --git a/tools/rpc-probe/src/quick.rs b/tools/rpc-probe/src/quick.rs index 33df58aa9..63edac51e 100644 --- a/tools/rpc-probe/src/quick.rs +++ b/tools/rpc-probe/src/quick.rs @@ -54,6 +54,16 @@ pub fn quick_probe_plan(output_path: &Path, request_wait: Duration) -> Result 1", false, 1, 10, "asc").with_name("tx_search_no_prove"), tx_search("tx.height > 1", true, 1, 10, "asc").with_name("tx_search_with_prove"), ]), From 0a53b18aae6890f76df66fd1fc48f189933234d4 Mon Sep 17 00:00:00 2001 From: Mikhail Zabaluev Date: Thu, 2 Dec 2021 10:53:51 +0200 Subject: [PATCH 05/58] rpc: Remove ErrorDetail::Server (#1040) This does not seem to be produced anywhere. --- .../breaking-changes/1040-rpc-remove-server-error.md | 2 ++ rpc/src/error.rs | 8 -------- 2 files changed, 2 insertions(+), 8 deletions(-) create mode 100644 .changelog/unreleased/breaking-changes/1040-rpc-remove-server-error.md diff --git a/.changelog/unreleased/breaking-changes/1040-rpc-remove-server-error.md b/.changelog/unreleased/breaking-changes/1040-rpc-remove-server-error.md new file mode 100644 index 000000000..20adc552e --- /dev/null +++ b/.changelog/unreleased/breaking-changes/1040-rpc-remove-server-error.md @@ -0,0 +1,2 @@ +- `[tendermint-rpc]` Remove the `ErrorDetail::Server` variant + ([#1039](https://github.com/informalsystems/tendermint-rs/issues/1039)) diff --git a/rpc/src/error.rs b/rpc/src/error.rs index 6bc732eec..8421cd16c 100644 --- a/rpc/src/error.rs +++ b/rpc/src/error.rs @@ -98,14 +98,6 @@ define_error! { format_args!("parse error: {}", e.reason) }, - Server - { - reason: String - } - | e | { - format_args!("server error: {}", e.reason) - }, - ClientInternal { reason: String From 9b6bd82e8ff7abe6d8550674fb606a032d2d7bcf Mon Sep 17 00:00:00 2001 From: Mikhail Zabaluev Date: Tue, 7 Dec 2021 18:28:51 +0200 Subject: [PATCH 06/58] ADR-010: Time API improvements (#1035) --- docs/architecture/adr-010-time-api-sanity.md | 150 +++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 docs/architecture/adr-010-time-api-sanity.md diff --git a/docs/architecture/adr-010-time-api-sanity.md b/docs/architecture/adr-010-time-api-sanity.md new file mode 100644 index 000000000..4b1ae7069 --- /dev/null +++ b/docs/architecture/adr-010-time-api-sanity.md @@ -0,0 +1,150 @@ +# ADR 010: Improvements of Time API, internal representation, and serialization + +## Changelog + +* 2021-11-29: Created the ADR. + +## Context + +The `Time` type is defined in `tendermint` to provide a data type for time +calculations with better safety and ergonomics than the `prost`-dictated +`Timestamp` struct, defined in `tendermint-proto` based on Google's +common protobuf message description. +[Concerns](https://github.com/informalsystems/tendermint-rs/issues/865) have +been raised about the need for such a type in the API; however, as we +currently lack a well-supported library in the Rust ecosystem that would provide +the desirable formatting through serde and enforce a range of usable values, +the domain type seems to be necessary. + +The current API of `Time` has the following problems: + +* It's a newtype struct publicly exposing a `DateTime` inner value + provided by the `chrono` crate. `chrono` has a known + [issue][RUSTSEC-2020-0159] with soundness and security and there is no ETA yet + on getting it fixed. + The dependency on chrono triggers cargo audit failures for every project + using the `tendermint` library. + +* The range of usable values supported by `Time` has not been explicitly + defined or enforced. Currently `Time` allows values which can't have + a valid RFC 3339 representation and whose equivalent Unix timestamp values + are not allowed by the Google protobuf specification of `Timestamp`. + +* The serde implementations for `Time` and the proto `Timestamp` struct + always serialize or expect the value as a string, even in serialization + formats that are not human-readable and allow a more efficient binary + representation. + +* Arithmetic operators have been provided for `Time` via `Add`/`Sub` trait + implementations. However, the `Result` output type is + [suprising][guideline-overload] and makes for poor usability of overloaded + operators. + +* Arithmetic and comparison operations are much slower on parsed date/time + structures than on an integer timestamp representation. + If `Time` is meant to be used in performance-sensitive workloads + for operations with date-time values, such as offsetting by a duration, + time difference, or time comparisons, its internal representation should be + more optimized for integer arithmetics. + +* The `Time::as_rfc3339` conversion method is + [named improperly][guideline-naming] with regard to Rust naming guidelines. + +[RUSTSEC-2020-0159]: https://rustsec.org/advisories/RUSTSEC-2020-0159.html +[guideline-overload]: https://rust-lang.github.io/api-guidelines/predictability.html#c-overload +[guideline-naming]: https://rust-lang.github.io/api-guidelines/naming.html#c-conv + +## Decision + +Make these changes, possibly in steps: + +* Make the inner member(s) of the `Time` struct private. + +* Specify that only date-times in the year range 1-9999 inclusive + can be represented by a `Time` value. This matches the restrictions + specified in the Google protobuf message definition for `Timestamp`. + +* Remove conversions from/to `chrono::DateTime`, + introducing these impls instead: + * `impl TryFrom for Time` + (fallible due to the additional range restrictions) + * `impl From