diff --git a/.circleci/config.yml b/.circleci/config.yml index a8d42872e..7a77d8d21 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -62,7 +62,7 @@ jobs: name: Get metalinter command: | export PATH="$GOBIN:$PATH" - make get_tools + make get_dev_tools - run: name: Lint source command: | diff --git a/CHANGELOG.md b/CHANGELOG.md index 547ab5345..29d753a6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Changelog +## 0.22.0 + +*July 16th, 2018* + +BREAKING CHANGES +* [x/gov] Increase VotingPeriod, DepositPeriod, and MinDeposit + +IMPROVEMENTS +* [gaiad] Default config updates: + - `timeout_commit=5000` so blocks only made every 5s + - `prof_listen_addr=localhost:6060` so profile server is on by default + - `p2p.send_rate` and `p2p.recv_rate` increases 10x (~5MB/s) + +BUG FIXES +* [server] Fix to actually overwrite default tendermint config + +## 0.21.1 + +*July 14th, 2018* + +BUG FIXES +* [build] Added Ledger build support via `LEDGER_ENABLED=true|false` + * True by default except when cross-compiling + ## 0.21.0 *July 13th, 2018* @@ -24,6 +48,8 @@ BUG FIXES * [keys] \#1629 - updating password no longer asks for a new password when the first entered password was incorrect * [lcd] importing an account would create a random account * [server] 'gaiad init' command family now writes provided name as the moniker in `config.toml` +* [build] Added Ledger build support via `LEDGER_ENABLED=true|false` + * True by default except when cross-compiling ## 0.20.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0fcf36def..de349501c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing -Thank you for considering making contributions to Cosmos-SDK and related repositories! Start by taking a look at this [coding repo](https://github.com/tendermint/coding) for overall information on repository workflow and standards. +Thank you for considering making contributions to Cosmos-SDK and related repositories! Start by taking a look at this [coding repo](https://github.com/tendermint/coding) for overall information on repository workflow and standards. Note, we use `make get_dev_tools` and `make update_dev_tools` for installing the linting tools. Please follow standard github best practices: fork the repo, branch from the tip of develop, make some commits, and submit a pull request to develop. See the [open issues](https://github.com/cosmos/cosmos-sdk/issues) for things we need help with! @@ -67,6 +67,29 @@ tested by circle using `go test -v -race ./...`. If not, they will need a `circle.yml`. Ideally, every repo has a `Makefile` that defines `make test` and includes its continuous integration status using a badge in the `README.md`. +We expect tests to use `require` or `assert` rather than `t.Skip` or `t.Fail`, +unless there is a reason to do otherwise. +When testing a function under a variety of different inputs, we prefer to use +[table driven tests](https://github.com/golang/go/wiki/TableDrivenTests). +Table driven test error messages should follow the following format +`, tc #, i #`. +`` is an optional short description of whats failing, `tc` is the +index within the table of the testcase that is failing, and `i` is when there +is a loop, exactly which iteration of the loop failed. +The idea is you should be able to see the +error message and figure out exactly what failed. +Here is an example check: + +``` + +for tcIndex, tc := range cases { + + for i := 0; i < tc.numTxsToTest; i++ { + + require.Equal(t, expectedTx[:32], calculatedTx[:32], + "First 32 bytes of the txs differed. tc #%d, i #%d", tcIndex, i) + ``` + ## Branching Model and Release User-facing repos should adhere to the branching model: http://nvie.com/posts/a-successful-git-branching-model/. diff --git a/Gopkg.lock b/Gopkg.lock index ee1b5cf1e..cf5c97909 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,60 +2,76 @@ [[projects]] - branch = "master" + digest = "1:09a7f74eb6bb3c0f14d8926610c87f569c5cff68e978d30e9a3540aeb626fdf0" name = "github.com/bartekn/go-bip39" packages = ["."] + pruneopts = "UT" revision = "a05967ea095d81c8fe4833776774cfaff8e5036c" [[projects]] branch = "master" + digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d" name = "github.com/beorn7/perks" packages = ["quantile"] + pruneopts = "UT" revision = "3a771d992973f24aa725d07868b467d1ddfceafb" [[projects]] + digest = "1:1343a2963481a305ca4d051e84bc2abd16b601ee22ed324f8d605de1adb291b0" name = "github.com/bgentry/speakeasy" packages = ["."] + pruneopts = "UT" revision = "4aabc24848ce5fd31929f7d1e4ea74d3709c14cd" version = "v0.1.0" [[projects]] branch = "master" + digest = "1:70f6b224a59b2fa453debffa85c77f71063d8754b90c8c4fbad5794e2c382b0f" name = "github.com/brejski/hid" packages = ["."] + pruneopts = "UT" revision = "06112dcfcc50a7e0e4fd06e17f9791e788fdaafc" [[projects]] branch = "master" + digest = "1:6aabc1566d6351115d561d038da82a4c19b46c3b6e17f4a0a2fa60260663dc79" name = "github.com/btcsuite/btcd" packages = ["btcec"] + pruneopts = "UT" revision = "fdfc19097e7ac6b57035062056f5b7b4638b8898" [[projects]] - branch = "master" + digest = "1:386de157f7d19259a7f9c81f26ce011223ce0f090353c1152ffdf730d7d10ac2" name = "github.com/btcsuite/btcutil" packages = ["bech32"] - revision = "ab6388e0c60ae4834a1f57511e20c17b5f78be4b" + pruneopts = "UT" + revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4" [[projects]] + digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39" name = "github.com/davecgh/go-spew" packages = ["spew"] + pruneopts = "UT" revision = "346938d642f2ec3594ed81d874461961cd0faa76" version = "v1.1.0" [[projects]] - branch = "master" + digest = "1:c7644c73a3d23741fdba8a99b1464e021a224b7e205be497271a8003a15ca41b" name = "github.com/ebuchman/fail-test" packages = ["."] + pruneopts = "UT" revision = "95f809107225be108efcf10a3509e4ea6ceef3c4" [[projects]] + digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" name = "github.com/fsnotify/fsnotify" packages = ["."] + pruneopts = "UT" revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" version = "v1.4.7" [[projects]] + digest = "1:fa30c0652956e159cdb97dcb2ef8b8db63ed668c02a5c3a40961c8f0641252fe" name = "github.com/go-kit/kit" packages = [ "log", @@ -64,24 +80,30 @@ "metrics", "metrics/discard", "metrics/internal/lv", - "metrics/prometheus" + "metrics/prometheus", ] + pruneopts = "UT" revision = "4dc7be5d2d12881735283bcab7352178e190fc71" version = "v0.6.0" [[projects]] + digest = "1:31a18dae27a29aa074515e43a443abfd2ba6deb6d69309d8d7ce789c45f34659" name = "github.com/go-logfmt/logfmt" packages = ["."] + pruneopts = "UT" revision = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5" version = "v0.3.0" [[projects]] + digest = "1:c4a2528ccbcabf90f9f3c464a5fc9e302d592861bbfd0b7135a7de8a943d0406" name = "github.com/go-stack/stack" packages = ["."] + pruneopts = "UT" revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" version = "v1.7.0" [[projects]] + digest = "1:af1306bff89268721ea2550d504413c9487ebfca11e2ff8f39ae79b99a720ff5" name = "github.com/gogo/protobuf" packages = [ "gogoproto", @@ -89,49 +111,61 @@ "proto", "protoc-gen-gogo/descriptor", "sortkeys", - "types" + "types", ] + pruneopts = "UT" revision = "1adfc126b41513cc696b209667c8656ea7aac67c" version = "v1.0.0" [[projects]] + digest = "1:cb22af0ed7c72d495d8be1106233ee553898950f15fd3f5404406d44c2e86888" name = "github.com/golang/protobuf" packages = [ "proto", "ptypes", "ptypes/any", "ptypes/duration", - "ptypes/timestamp" + "ptypes/timestamp", ] + pruneopts = "UT" revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" version = "v1.1.0" [[projects]] branch = "master" + digest = "1:4a0c6bb4805508a6287675fac876be2ac1182539ca8a32468d8128882e9d5009" name = "github.com/golang/snappy" packages = ["."] + pruneopts = "UT" revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" [[projects]] + digest = "1:c79fb010be38a59d657c48c6ba1d003a8aa651fa56b579d959d74573b7dff8e1" name = "github.com/gorilla/context" packages = ["."] + pruneopts = "UT" revision = "08b5f424b9271eedf6f9f0ce86cb9396ed337a42" version = "v1.1.1" [[projects]] + digest = "1:e73f5b0152105f18bc131fba127d9949305c8693f8a762588a82a48f61756f5f" name = "github.com/gorilla/mux" packages = ["."] + pruneopts = "UT" revision = "e3702bed27f0d39777b0b37b664b6280e8ef8fbf" version = "v1.6.2" [[projects]] + digest = "1:43dd08a10854b2056e615d1b1d22ac94559d822e1f8b6fcc92c1a1057e85188e" name = "github.com/gorilla/websocket" packages = ["."] + pruneopts = "UT" revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b" version = "v1.2.0" [[projects]] branch = "master" + digest = "1:8951fe6e358876736d8fa1f3992624fdbb2dec6bc49401c1381d1ef8abbb544f" name = "github.com/hashicorp/hcl" packages = [ ".", @@ -142,162 +176,206 @@ "hcl/token", "json/parser", "json/scanner", - "json/token" + "json/token", ] + pruneopts = "UT" revision = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168" [[projects]] + digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be" name = "github.com/inconshreveable/mousetrap" packages = ["."] + pruneopts = "UT" revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" version = "v1.0" [[projects]] branch = "master" + digest = "1:39b27d1381a30421f9813967a5866fba35dc1d4df43a6eefe3b7a5444cb07214" name = "github.com/jmhodges/levigo" packages = ["."] + pruneopts = "UT" revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9" [[projects]] branch = "master" + digest = "1:a64e323dc06b73892e5bb5d040ced475c4645d456038333883f58934abbf6f72" name = "github.com/kr/logfmt" packages = ["."] + pruneopts = "UT" revision = "b84e30acd515aadc4b783ad4ff83aff3299bdfe0" [[projects]] + digest = "1:c568d7727aa262c32bdf8a3f7db83614f7af0ed661474b24588de635c20024c7" name = "github.com/magiconair/properties" packages = ["."] + pruneopts = "UT" revision = "c2353362d570a7bfa228149c62842019201cfb71" version = "v1.8.0" [[projects]] + digest = "1:d4d17353dbd05cb52a2a52b7fe1771883b682806f68db442b436294926bbfafb" name = "github.com/mattn/go-isatty" packages = ["."] + pruneopts = "UT" revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39" version = "v0.0.3" [[projects]] + digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc" name = "github.com/matttproud/golang_protobuf_extensions" packages = ["pbutil"] + pruneopts = "UT" revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" version = "v1.0.1" [[projects]] branch = "master" + digest = "1:e730597b38a4d56e2361e0b6236cb800e52c73cace2ff91396f4ff35792ddfa7" name = "github.com/mitchellh/mapstructure" packages = ["."] + pruneopts = "UT" revision = "bb74f1db0675b241733089d5a1faa5dd8b0ef57b" [[projects]] + digest = "1:95741de3af260a92cc5c7f3f3061e85273f5a81b5db20d4bd68da74bd521675e" name = "github.com/pelletier/go-toml" packages = ["."] + pruneopts = "UT" revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" version = "v1.2.0" [[projects]] + digest = "1:40e195917a951a8bf867cd05de2a46aaf1806c50cf92eebf4c16f78cd196f747" name = "github.com/pkg/errors" packages = ["."] + pruneopts = "UT" revision = "645ef00459ed84a119197bfb8d8205042c6df63d" version = "v0.8.0" [[projects]] + digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe" name = "github.com/pmezard/go-difflib" packages = ["difflib"] + pruneopts = "UT" revision = "792786c7400a136282c1664665ae0a8db921c6c2" version = "v1.0.0" [[projects]] - branch = "master" + digest = "1:98225904b7abff96c052b669b25788f18225a36673fba022fb93514bb9a2a64e" name = "github.com/prometheus/client_golang" packages = [ "prometheus", - "prometheus/promhttp" + "prometheus/promhttp", ] + pruneopts = "UT" revision = "ae27198cdd90bf12cd134ad79d1366a6cf49f632" [[projects]] branch = "master" + digest = "1:0f37e09b3e92aaeda5991581311f8dbf38944b36a3edec61cc2d1991f527554a" name = "github.com/prometheus/client_model" packages = ["go"] - revision = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c" + pruneopts = "UT" + revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f" [[projects]] branch = "master" + digest = "1:4d291d51042ed9de40eef61a3c1b56e969d6e0f8aa5fd3da5e958ec66bee68e4" name = "github.com/prometheus/common" packages = [ "expfmt", "internal/bitbucket.org/ww/goautoneg", - "model" + "model", ] + pruneopts = "UT" revision = "7600349dcfe1abd18d72d3a1770870d9800a7801" [[projects]] branch = "master" + digest = "1:55d7449d6987dabf272b4e81b2f9c449f05b17415c939b68d1e82f57e3374b7f" name = "github.com/prometheus/procfs" packages = [ ".", "internal/util", "nfs", - "xfs" + "xfs", ] + pruneopts = "UT" revision = "ae68e2d4c00fed4943b5f6698d504a5fe083da8a" [[projects]] - branch = "master" + digest = "1:c4556a44e350b50a490544d9b06e9fba9c286c21d6c0e47f54f3a9214597298c" name = "github.com/rcrowley/go-metrics" packages = ["."] + pruneopts = "UT" revision = "e2704e165165ec55d062f5919b4b29494e9fa790" [[projects]] + digest = "1:37ace7f35375adec11634126944bdc45a673415e2fcc07382d03b75ec76ea94c" name = "github.com/spf13/afero" packages = [ ".", - "mem" + "mem", ] + pruneopts = "UT" revision = "787d034dfe70e44075ccc060d346146ef53270ad" version = "v1.1.1" [[projects]] + digest = "1:516e71bed754268937f57d4ecb190e01958452336fa73dbac880894164e91c1f" name = "github.com/spf13/cast" packages = ["."] + pruneopts = "UT" revision = "8965335b8c7107321228e3e3702cab9832751bac" version = "v1.2.0" [[projects]] + digest = "1:627ab2f549a6a55c44f46fa24a4307f4d0da81bfc7934ed0473bf38b24051d26" name = "github.com/spf13/cobra" packages = ["."] + pruneopts = "UT" revision = "7b2c5ac9fc04fc5efafb60700713d4fa609b777b" version = "v0.0.1" [[projects]] branch = "master" + digest = "1:080e5f630945ad754f4b920e60b4d3095ba0237ebf88dc462eb28002932e3805" name = "github.com/spf13/jwalterweatherman" packages = ["."] + pruneopts = "UT" revision = "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394" [[projects]] + digest = "1:9424f440bba8f7508b69414634aef3b2b3a877e522d8a4624692412805407bb7" name = "github.com/spf13/pflag" packages = ["."] + pruneopts = "UT" revision = "583c0c0531f06d5278b7d917446061adc344b5cd" version = "v1.0.1" [[projects]] + digest = "1:f8e1a678a2571e265f4bf91a3e5e32aa6b1474a55cb0ea849750cc177b664d96" name = "github.com/spf13/viper" packages = ["."] + pruneopts = "UT" revision = "25b30aa063fc18e48662b86996252eabdcf2f0c7" version = "v1.0.0" [[projects]] + digest = "1:73697231b93fb74a73ebd8384b68b9a60c57ea6b13c56d2425414566a72c8e6d" name = "github.com/stretchr/testify" packages = [ "assert", - "require" + "require", ] + pruneopts = "UT" revision = "12b6f73e6084dad08a7c6e575284b177ecafbc71" version = "v1.2.1" [[projects]] branch = "master" + digest = "1:922191411ad8f61bcd8018ac127589bb489712c1d1a0ab2497aca4b16de417d2" name = "github.com/syndtr/goleveldb" packages = [ "leveldb", @@ -311,33 +389,41 @@ "leveldb/opt", "leveldb/storage", "leveldb/table", - "leveldb/util" + "leveldb/util", ] + pruneopts = "UT" revision = "c4c61651e9e37fa117f53c5a906d3b63090d8445" [[projects]] branch = "master" + digest = "1:203b409c21115233a576f99e8f13d8e07ad82b25500491f7e1cca12588fb3232" name = "github.com/tendermint/ed25519" packages = [ ".", "edwards25519", - "extra25519" + "extra25519", ] + pruneopts = "UT" revision = "d8387025d2b9d158cf4efb07e7ebf814bcce2057" [[projects]] + digest = "1:e9113641c839c21d8eaeb2c907c7276af1eddeed988df8322168c56b7e06e0e1" name = "github.com/tendermint/go-amino" packages = ["."] + pruneopts = "UT" revision = "2106ca61d91029c931fd54968c2bb02dc96b1412" version = "0.10.1" [[projects]] + digest = "1:d4a15d404afbf591e8be16fcda7f5ac87948d5c7531f9d909fd84cc730ab16e2" name = "github.com/tendermint/iavl" packages = ["."] + pruneopts = "UT" revision = "35f66e53d9b01e83b30de68b931f54b2477a94c9" version = "v0.9.2" [[projects]] + digest = "1:5f41a7655812fa5901c71735dc8845f33184e94a2020c770f60a1a80ed228cb3" name = "github.com/tendermint/tendermint" packages = [ "abci/client", @@ -392,18 +478,22 @@ "state/txindex/kv", "state/txindex/null", "types", - "version" + "version", ] - revision = "5ff65274b84ea905787a48512cc3124385bddf2f" - version = "v0.22.2" + pruneopts = "UT" + revision = "c64a3c74c870d725ba1356f75b4afadf0928c297" + version = "v0.22.4" [[projects]] + digest = "1:5bd938386bd1f61a581bf8cd6ff2b7b2f79c542929176db4ceb44965440dae07" name = "github.com/zondax/ledger-goclient" packages = ["."] - revision = "065cbf938a16f20335c40cfe180f9cd4955c6a5a" + pruneopts = "UT" + revision = "39ba4728c137c75718a21f9b4b3280fa31b9139b" [[projects]] branch = "master" + digest = "1:e8206c1653e050116ec8c9a823a86413fc9f9ee3c2f3ae977c96d6a1747f7325" name = "golang.org/x/crypto" packages = [ "blowfish", @@ -416,12 +506,13 @@ "pbkdf2", "poly1305", "ripemd160", - "salsa20/salsa" + "salsa20/salsa", ] + pruneopts = "UT" revision = "a49355c7e3f8fe157a85be2f77e6e269a0f89602" [[projects]] - branch = "master" + digest = "1:04dda8391c3e2397daf254ac68003f30141c069b228d06baec8324a5f81dc1e9" name = "golang.org/x/net" packages = [ "context", @@ -431,17 +522,21 @@ "idna", "internal/timeseries", "netutil", - "trace" + "trace", ] + pruneopts = "UT" revision = "292b43bbf7cb8d35ddf40f8d5100ef3837cced3f" [[projects]] branch = "master" + digest = "1:d773e525476aefa22ea944a5425a9bfb99819b2e67eeb9b1966454fd57522bbf" name = "golang.org/x/sys" packages = ["unix"] + pruneopts = "UT" revision = "1b2967e3c290b7c545b3db0deeda16e9be4f98a2" [[projects]] + digest = "1:7509ba4347d1f8de6ae9be8818b0cd1abc3deeffe28aeaf4be6d4b6b5178d9ca" name = "golang.org/x/text" packages = [ "collate", @@ -457,18 +552,22 @@ "unicode/bidi", "unicode/cldr", "unicode/norm", - "unicode/rangetable" + "unicode/rangetable", ] + pruneopts = "UT" revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" version = "v0.3.0" [[projects]] branch = "master" + digest = "1:601e63e7d4577f907118bec825902505291918859d223bce015539e79f1160e3" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] + pruneopts = "UT" revision = "e92b116572682a5b432ddd840aeaba2a559eeff1" [[projects]] + digest = "1:4d7b5d9746840266938cdb21a40f8eba7137d9153c4ed404d6bb2a450d06f690" name = "google.golang.org/grpc" packages = [ ".", @@ -493,20 +592,63 @@ "stats", "status", "tap", - "transport" + "transport", ] + pruneopts = "UT" revision = "d11072e7ca9811b1100b80ca0269ac831f06d024" version = "v1.11.3" [[projects]] + digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202" name = "gopkg.in/yaml.v2" packages = ["."] + pruneopts = "UT" revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" version = "v2.2.1" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "5c3ab73a85af1b3110b5f7ddbb27e77bb9cf42848ee29efcad9d78c0ecc26519" + input-imports = [ + "github.com/bartekn/go-bip39", + "github.com/bgentry/speakeasy", + "github.com/btcsuite/btcd/btcec", + "github.com/golang/protobuf/proto", + "github.com/gorilla/mux", + "github.com/mattn/go-isatty", + "github.com/pkg/errors", + "github.com/spf13/cobra", + "github.com/spf13/pflag", + "github.com/spf13/viper", + "github.com/stretchr/testify/assert", + "github.com/stretchr/testify/require", + "github.com/tendermint/go-amino", + "github.com/tendermint/iavl", + "github.com/tendermint/tendermint/abci/server", + "github.com/tendermint/tendermint/abci/types", + "github.com/tendermint/tendermint/cmd/tendermint/commands", + "github.com/tendermint/tendermint/config", + "github.com/tendermint/tendermint/crypto", + "github.com/tendermint/tendermint/crypto/merkle", + "github.com/tendermint/tendermint/crypto/tmhash", + "github.com/tendermint/tendermint/libs/bech32", + "github.com/tendermint/tendermint/libs/cli", + "github.com/tendermint/tendermint/libs/cli/flags", + "github.com/tendermint/tendermint/libs/common", + "github.com/tendermint/tendermint/libs/db", + "github.com/tendermint/tendermint/libs/log", + "github.com/tendermint/tendermint/node", + "github.com/tendermint/tendermint/p2p", + "github.com/tendermint/tendermint/privval", + "github.com/tendermint/tendermint/proxy", + "github.com/tendermint/tendermint/rpc/client", + "github.com/tendermint/tendermint/rpc/core/types", + "github.com/tendermint/tendermint/rpc/lib/client", + "github.com/tendermint/tendermint/rpc/lib/server", + "github.com/tendermint/tendermint/types", + "github.com/zondax/ledger-goclient", + "golang.org/x/crypto/blowfish", + "golang.org/x/crypto/ripemd160", + ] solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 0bb13c3e3..3db675ebb 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -10,11 +10,6 @@ # name = "github.com/user/project" # version = "1.0.0" # -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# # [[override]] # name = "github.com/x/y" # version = "2.4.0" @@ -62,15 +57,15 @@ [[override]] name = "github.com/tendermint/tendermint" - version = "=0.22.2" + version = "=0.22.4" [[constraint]] name = "github.com/bartekn/go-bip39" - branch = "master" + revision = "a05967ea095d81c8fe4833776774cfaff8e5036c" [[constraint]] name = "github.com/zondax/ledger-goclient" - revision = "065cbf938a16f20335c40cfe180f9cd4955c6a5a" + revision = "39ba4728c137c75718a21f9b4b3280fa31b9139b" [prune] go-tests = true diff --git a/Makefile b/Makefile index 4d761ede1..a606a0ace 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,10 @@ PACKAGES=$(shell go list ./... | grep -v '/vendor/') PACKAGES_NOCLITEST=$(shell go list ./... | grep -v '/vendor/' | grep -v github.com/cosmos/cosmos-sdk/cmd/gaia/cli_test) COMMIT_HASH := $(shell git rev-parse --short HEAD) -BUILD_FLAGS = -tags netgo -ldflags "-X github.com/cosmos/cosmos-sdk/version.GitCommit=${COMMIT_HASH}" - +BUILD_TAGS = netgo ledger +BUILD_FLAGS = -tags "${BUILD_TAGS}" -ldflags "-X github.com/cosmos/cosmos-sdk/version.GitCommit=${COMMIT_HASH}" +GCC := $(shell command -v gcc 2> /dev/null) +LEDGER_ENABLED ?= true all: get_tools get_vendor_deps install install_examples test_lint test ######################################## @@ -11,10 +13,19 @@ all: get_tools get_vendor_deps install install_examples test_lint test ci: get_tools get_vendor_deps install test_cover test_lint test ######################################## -### Build +### Build/Install -# This can be unified later, here for easy demos -build: +check-ledger: +ifeq ($(LEDGER_ENABLED),true) +ifndef GCC +$(error "gcc not installed for ledger support, please install") +endif +else +TMP_BUILD_TAGS := $(BUILD_TAGS) +BUILD_TAGS = $(filter-out ledger, $(TMP_BUILD_TAGS)) +endif + +build: check-ledger ifeq ($(OS),Windows_NT) go build $(BUILD_FLAGS) -o build/gaiad.exe ./cmd/gaia/cmd/gaiad go build $(BUILD_FLAGS) -o build/gaiacli.exe ./cmd/gaia/cmd/gaiacli @@ -23,6 +34,9 @@ else go build $(BUILD_FLAGS) -o build/gaiacli ./cmd/gaia/cmd/gaiacli endif +build-linux: + LEDGER_ENABLED=false GOOS=linux GOARCH=amd64 $(MAKE) build + build_examples: ifeq ($(OS),Windows_NT) go build $(BUILD_FLAGS) -o build/basecoind.exe ./examples/basecoin/cmd/basecoind @@ -36,7 +50,7 @@ else go build $(BUILD_FLAGS) -o build/democli ./examples/democoin/cmd/democli endif -install: +install: check-ledger go install $(BUILD_FLAGS) ./cmd/gaia/cmd/gaiad go install $(BUILD_FLAGS) ./cmd/gaia/cmd/gaiacli @@ -59,14 +73,19 @@ dist: check_tools: cd tools && $(MAKE) check_tools +check_dev_tools: + cd tools && $(MAKE) check_dev_tools + update_tools: cd tools && $(MAKE) update_tools -get_tools: - cd tools && $(MAKE) get_tools +update_dev_tools: + cd tools && $(MAKE) update_dev_tools + +get_dev_tools: + cd tools && $(MAKE) get_dev_tools get_vendor_deps: - @rm -rf vendor/ @echo "--> Running dep ensure" @dep ensure -v @@ -105,6 +124,8 @@ test_lint: gometalinter.v2 --config=tools/gometalinter.json ./... !(gometalinter.v2 --disable-all --enable='errcheck' --vendor ./... | grep -v "client/") find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs gofmt -d -s + dep status >> /dev/null + !(grep -n branch Gopkg.toml) format: find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs gofmt -w -s @@ -141,10 +162,6 @@ devdoc_update: ######################################## ### Local validator nodes using docker and docker-compose -# Build linux binary -build-linux: - GOOS=linux GOARCH=amd64 $(MAKE) build - build-docker-gaiadnode: $(MAKE) -C networks/local @@ -181,4 +198,8 @@ remotenet-status: # To avoid unintended conflicts with file names, always add to .PHONY # unless there is a reason not to. # https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html -.PHONY: build build_examples install install_examples install_debug dist check_tools get_tools get_vendor_deps draw_deps test test_cli test_unit test_cover test_lint benchmark devdoc_init devdoc devdoc_save devdoc_update build-linux build-docker-gaiadnode localnet-start localnet-stop remotenet-start remotenet-stop remotenet-status format +.PHONY: build build_examples install install_examples install_debug dist \ +check_tools get_tools get_vendor_deps draw_deps test test_cli test_unit \ +test_cover test_lint benchmark devdoc_init devdoc devdoc_save devdoc_update \ +build-linux build-docker-gaiadnode localnet-start localnet-stop remotenet-start \ +remotenet-stop remotenet-status format check-ledger diff --git a/PENDING.md b/PENDING.md new file mode 100644 index 000000000..3d6d0d92d --- /dev/null +++ b/PENDING.md @@ -0,0 +1,17 @@ +## PENDING + +BREAKING CHANGES +* [baseapp] Msgs are no longer run on CheckTx, removed `ctx.IsCheckTx()` +* [x/stake] Fixed the period check for the inflation calculation + +FEATURES +* [lcd] Can now query governance proposals by ProposalStatus + +IMPROVEMENTS +* [baseapp] Allow any alphanumeric character in route +* [cli] Improve error messages for all txs when the account doesn't exist +* [tools] Remove `rm -rf vendor/` from `make get_vendor_deps` +* [x/stake] Add revoked to human-readable validator + +BUG FIXES +* \#1666 Add intra-tx counter to the genesis validators diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index b5e47c170..fa419be2a 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -411,7 +411,11 @@ func (app *BaseApp) BeginBlock(req abci.RequestBeginBlock) (res abci.ResponseBeg return } -// Implements ABCI +// CheckTx implements ABCI +// CheckTx runs the "basic checks" to see whether or not a transaction can possibly be executed, +// first decoding, then the ante handler (which checks signatures/fees/ValidateBasic), +// then finally the route match to see whether a handler exists. CheckTx does not run the actual +// Msg handler function(s). func (app *BaseApp) CheckTx(txBytes []byte) (res abci.ResponseCheckTx) { // Decode the Tx. var result sdk.Result @@ -489,16 +493,11 @@ func (app *BaseApp) getContextForAnte(mode runTxMode, txBytes []byte) (ctx sdk.C ctx = ctx.WithSigningValidators(app.signedValidators) } - // Simulate a DeliverTx for gas calculation - if mode == runTxModeSimulate { - ctx = ctx.WithIsCheckTx(false) - } - return } // Iterates through msgs and executes them -func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg) (result sdk.Result) { +func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg, mode runTxMode) (result sdk.Result) { // accumulate results logs := make([]string, 0, len(msgs)) var data []byte // NOTE: we just append them all (?!) @@ -512,7 +511,11 @@ func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg) (result sdk.Result) return sdk.ErrUnknownRequest("Unrecognized Msg type: " + msgType).Result() } - msgResult := handler(ctx, msg) + var msgResult sdk.Result + // Skip actual execution for CheckTx + if mode != runTxModeCheck { + msgResult = handler(ctx, msg) + } // NOTE: GasWanted is determined by ante handler and // GasUsed by the GasMeter @@ -590,9 +593,9 @@ func (app *BaseApp) runTx(mode runTxMode, txBytes []byte, tx sdk.Tx) (result sdk // run the ante handler if app.anteHandler != nil { - newCtx, anteResult, abort := app.anteHandler(ctx, tx) + newCtx, result, abort := app.anteHandler(ctx, tx) if abort { - return anteResult + return result } if !newCtx.IsZero() { ctx = newCtx @@ -611,7 +614,7 @@ func (app *BaseApp) runTx(mode runTxMode, txBytes []byte, tx sdk.Tx) (result sdk } ctx = ctx.WithMultiStore(msCache) - result = app.runMsgs(ctx, msgs) + result = app.runMsgs(ctx, msgs, mode) result.GasWanted = gasWanted // only update state if all messages pass and we're not in a simulation diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index 08cf59b54..c34c6d270 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -287,7 +287,7 @@ func (tx txTest) GetMsgs() []sdk.Msg { return tx.Msgs } const ( typeMsgCounter = "msgCounter" - typeMsgCounter2 = "msgCounterTwo" // NOTE: no numerics (?) + typeMsgCounter2 = "msgCounter2" ) // ValidateBasic() fails on negative counters. diff --git a/baseapp/router.go b/baseapp/router.go index abbbf9e12..4be3aec74 100644 --- a/baseapp/router.go +++ b/baseapp/router.go @@ -31,12 +31,12 @@ func NewRouter() *router { } } -var isAlpha = regexp.MustCompile(`^[a-zA-Z]+$`).MatchString +var isAlphaNumeric = regexp.MustCompile(`^[a-zA-Z0-9]+$`).MatchString // AddRoute - TODO add description func (rtr *router) AddRoute(r string, h sdk.Handler) Router { - if !isAlpha(r) { - panic("route expressions can only contain alphabet characters") + if !isAlphaNumeric(r) { + panic("route expressions can only contain alphanumeric characters") } rtr.routes = append(rtr.routes, route{r, h}) diff --git a/client/context/helpers.go b/client/context/helpers.go index 00ff8a81c..7742dfe03 100644 --- a/client/context/helpers.go +++ b/client/context/helpers.go @@ -186,6 +186,11 @@ func (ctx CoreContext) SignAndBuild(name, passphrase string, msgs []sdk.Msg, cdc // sign and build the transaction from the msg func (ctx CoreContext) ensureSignBuild(name string, msgs []sdk.Msg, cdc *wire.Codec) (tyBytes []byte, err error) { + err = EnsureAccountExists(ctx, name) + if err != nil { + return nil, err + } + ctx, err = EnsureAccountNumber(ctx) if err != nil { return nil, err diff --git a/client/context/viper.go b/client/context/viper.go index 611ad1b92..6c7646079 100644 --- a/client/context/viper.go +++ b/client/context/viper.go @@ -3,6 +3,7 @@ package context import ( "fmt" + "github.com/pkg/errors" "github.com/spf13/viper" tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands" @@ -10,6 +11,9 @@ import ( tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/keys" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth" ) // NewCoreContextFromViper - return a new context with parameters from the command line @@ -68,6 +72,36 @@ func defaultChainID() (string, error) { return doc.ChainID, nil } +// EnsureAccountExists - Make sure account exists +func EnsureAccountExists(ctx CoreContext, name string) error { + keybase, err := keys.GetKeyBase() + if err != nil { + return err + } + + if name == "" { + return errors.Errorf("must provide a from address name") + } + + info, err := keybase.Get(name) + if err != nil { + return errors.Errorf("no key for: %s", name) + } + + accAddr := sdk.AccAddress(info.GetPubKey().Address()) + + Acc, err := ctx.QueryStore(auth.AddressStoreKey(accAddr), ctx.AccountStore) + if err != nil { + return err + } + + // Check if account was found + if Acc == nil { + return errors.Errorf("No account with address %s was found in the state.\nAre you sure there has been a transaction involving it?", accAddr) + } + return nil +} + // EnsureAccount - automatically set account number if none provided func EnsureAccountNumber(ctx CoreContext) (CoreContext, error) { // Should be viper.IsSet, but this does not work - https://github.com/spf13/viper/pull/331 diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go new file mode 100644 index 000000000..f5b2d263e --- /dev/null +++ b/client/lcd/lcd_test.go @@ -0,0 +1,1028 @@ +package lcd + +import ( + "encoding/hex" + "fmt" + "net/http" + "regexp" + "testing" + + "github.com/spf13/viper" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + cryptoKeys "github.com/cosmos/cosmos-sdk/crypto/keys" + abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/libs/common" + p2p "github.com/tendermint/tendermint/p2p" + ctypes "github.com/tendermint/tendermint/rpc/core/types" + + client "github.com/cosmos/cosmos-sdk/client" + keys "github.com/cosmos/cosmos-sdk/client/keys" + rpc "github.com/cosmos/cosmos-sdk/client/rpc" + tests "github.com/cosmos/cosmos-sdk/tests" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/wire" + "github.com/cosmos/cosmos-sdk/x/auth" + "github.com/cosmos/cosmos-sdk/x/gov" + "github.com/cosmos/cosmos-sdk/x/slashing" + "github.com/cosmos/cosmos-sdk/x/stake" +) + +func init() { + cryptoKeys.BcryptSecurityParameter = 1 +} + +func TestKeys(t *testing.T) { + name, password := "test", "1234567890" + addr, seed := CreateAddr(t, "test", password, GetKB(t)) + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + defer cleanup() + + // get seed + // TODO Do we really need this endpoint? + res, body := Request(t, port, "GET", "/keys/seed", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + reg, err := regexp.Compile(`([a-z]+ ){12}`) + require.Nil(t, err) + match := reg.MatchString(seed) + require.True(t, match, "Returned seed has wrong format", seed) + + newName := "test_newname" + newPassword := "0987654321" + + // add key + jsonStr := []byte(fmt.Sprintf(`{"name":"%s", "password":"%s", "seed":"%s"}`, newName, newPassword, seed)) + res, body = Request(t, port, "POST", "/keys", jsonStr) + + require.Equal(t, http.StatusOK, res.StatusCode, body) + var resp keys.KeyOutput + err = wire.Cdc.UnmarshalJSON([]byte(body), &resp) + require.Nil(t, err, body) + + addr2Bech32 := resp.Address.String() + _, err = sdk.AccAddressFromBech32(addr2Bech32) + require.NoError(t, err, "Failed to return a correct bech32 address") + + // test if created account is the correct account + expectedInfo, _ := GetKB(t).CreateKey(newName, seed, newPassword) + expectedAccount := sdk.AccAddress(expectedInfo.GetPubKey().Address().Bytes()) + assert.Equal(t, expectedAccount.String(), addr2Bech32) + + // existing keys + res, body = Request(t, port, "GET", "/keys", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var m [2]keys.KeyOutput + err = cdc.UnmarshalJSON([]byte(body), &m) + require.Nil(t, err) + + addrBech32 := addr.String() + + require.Equal(t, name, m[0].Name, "Did not serve keys name correctly") + require.Equal(t, addrBech32, m[0].Address.String(), "Did not serve keys Address correctly") + require.Equal(t, newName, m[1].Name, "Did not serve keys name correctly") + require.Equal(t, addr2Bech32, m[1].Address.String(), "Did not serve keys Address correctly") + + // select key + keyEndpoint := fmt.Sprintf("/keys/%s", newName) + res, body = Request(t, port, "GET", keyEndpoint, nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var m2 keys.KeyOutput + err = cdc.UnmarshalJSON([]byte(body), &m2) + require.Nil(t, err) + + require.Equal(t, newName, m2.Name, "Did not serve keys name correctly") + require.Equal(t, addr2Bech32, m2.Address.String(), "Did not serve keys Address correctly") + + // update key + jsonStr = []byte(fmt.Sprintf(`{ + "old_password":"%s", + "new_password":"12345678901" + }`, newPassword)) + + res, body = Request(t, port, "PUT", keyEndpoint, jsonStr) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + // here it should say unauthorized as we changed the password before + res, body = Request(t, port, "PUT", keyEndpoint, jsonStr) + require.Equal(t, http.StatusUnauthorized, res.StatusCode, body) + + // delete key + jsonStr = []byte(`{"password":"12345678901"}`) + res, body = Request(t, port, "DELETE", keyEndpoint, jsonStr) + require.Equal(t, http.StatusOK, res.StatusCode, body) +} + +func TestVersion(t *testing.T) { + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{}) + defer cleanup() + + // node info + res, body := Request(t, port, "GET", "/version", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + reg, err := regexp.Compile(`\d+\.\d+\.\d+(-dev)?`) + require.Nil(t, err) + match := reg.MatchString(body) + require.True(t, match, body) + + // node info + res, body = Request(t, port, "GET", "/node_version", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + reg, err = regexp.Compile(`\d+\.\d+\.\d+(-dev)?`) + require.Nil(t, err) + match = reg.MatchString(body) + require.True(t, match, body) +} + +func TestNodeStatus(t *testing.T) { + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{}) + defer cleanup() + + // node info + res, body := Request(t, port, "GET", "/node_info", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var nodeInfo p2p.NodeInfo + err := cdc.UnmarshalJSON([]byte(body), &nodeInfo) + require.Nil(t, err, "Couldn't parse node info") + + require.NotEqual(t, p2p.NodeInfo{}, nodeInfo, "res: %v", res) + + // syncing + res, body = Request(t, port, "GET", "/syncing", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + // we expect that there is no other node running so the syncing state is "false" + require.Equal(t, "false", body) +} + +func TestBlock(t *testing.T) { + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{}) + defer cleanup() + + var resultBlock ctypes.ResultBlock + + res, body := Request(t, port, "GET", "/blocks/latest", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + err := cdc.UnmarshalJSON([]byte(body), &resultBlock) + require.Nil(t, err, "Couldn't parse block") + + require.NotEqual(t, ctypes.ResultBlock{}, resultBlock) + + // -- + + res, body = Request(t, port, "GET", "/blocks/1", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + err = wire.Cdc.UnmarshalJSON([]byte(body), &resultBlock) + require.Nil(t, err, "Couldn't parse block") + + require.NotEqual(t, ctypes.ResultBlock{}, resultBlock) + + // -- + + res, body = Request(t, port, "GET", "/blocks/1000000000", nil) + require.Equal(t, http.StatusNotFound, res.StatusCode, body) +} + +func TestValidators(t *testing.T) { + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{}) + defer cleanup() + + var resultVals rpc.ResultValidatorsOutput + + res, body := Request(t, port, "GET", "/validatorsets/latest", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + err := cdc.UnmarshalJSON([]byte(body), &resultVals) + require.Nil(t, err, "Couldn't parse validatorset") + + require.NotEqual(t, rpc.ResultValidatorsOutput{}, resultVals) + + require.Contains(t, resultVals.Validators[0].Address.String(), "cosmosvaladdr") + require.Contains(t, resultVals.Validators[0].PubKey, "cosmosvalpub") + + // -- + + res, body = Request(t, port, "GET", "/validatorsets/1", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + err = cdc.UnmarshalJSON([]byte(body), &resultVals) + require.Nil(t, err, "Couldn't parse validatorset") + + require.NotEqual(t, rpc.ResultValidatorsOutput{}, resultVals) + + // -- + + res, body = Request(t, port, "GET", "/validatorsets/1000000000", nil) + require.Equal(t, http.StatusNotFound, res.StatusCode, body) +} + +func TestCoinSend(t *testing.T) { + name, password := "test", "1234567890" + addr, seed := CreateAddr(t, "test", password, GetKB(t)) + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + defer cleanup() + + bz, err := hex.DecodeString("8FA6AB57AD6870F6B5B2E57735F38F2F30E73CB6") + require.NoError(t, err) + someFakeAddr := sdk.AccAddress(bz) + + // query empty + res, body := Request(t, port, "GET", fmt.Sprintf("/accounts/%s", someFakeAddr), nil) + require.Equal(t, http.StatusNoContent, res.StatusCode, body) + + acc := getAccount(t, port, addr) + initialBalance := acc.GetCoins() + + // create TX + receiveAddr, resultTx := doSend(t, port, seed, name, password, addr) + tests.WaitForHeight(resultTx.Height+1, port) + + // check if tx was committed + require.Equal(t, uint32(0), resultTx.CheckTx.Code) + require.Equal(t, uint32(0), resultTx.DeliverTx.Code) + + // query sender + acc = getAccount(t, port, addr) + coins := acc.GetCoins() + mycoins := coins[0] + + require.Equal(t, "steak", mycoins.Denom) + require.Equal(t, initialBalance[0].Amount.SubRaw(1), mycoins.Amount) + + // query receiver + acc = getAccount(t, port, receiveAddr) + coins = acc.GetCoins() + mycoins = coins[0] + + require.Equal(t, "steak", mycoins.Denom) + require.Equal(t, int64(1), mycoins.Amount.Int64()) +} + +func TestIBCTransfer(t *testing.T) { + name, password := "test", "1234567890" + addr, seed := CreateAddr(t, "test", password, GetKB(t)) + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + defer cleanup() + + acc := getAccount(t, port, addr) + initialBalance := acc.GetCoins() + + // create TX + resultTx := doIBCTransfer(t, port, seed, name, password, addr) + + tests.WaitForHeight(resultTx.Height+1, port) + + // check if tx was committed + require.Equal(t, uint32(0), resultTx.CheckTx.Code) + require.Equal(t, uint32(0), resultTx.DeliverTx.Code) + + // query sender + acc = getAccount(t, port, addr) + coins := acc.GetCoins() + mycoins := coins[0] + + require.Equal(t, "steak", mycoins.Denom) + require.Equal(t, initialBalance[0].Amount.SubRaw(1), mycoins.Amount) + + // TODO: query ibc egress packet state +} + +func TestTxs(t *testing.T) { + name, password := "test", "1234567890" + addr, seed := CreateAddr(t, "test", password, GetKB(t)) + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + defer cleanup() + + // query wrong + res, body := Request(t, port, "GET", "/txs", nil) + require.Equal(t, http.StatusBadRequest, res.StatusCode, body) + + // query empty + res, body = Request(t, port, "GET", fmt.Sprintf("/txs?tag=sender_bech32='%s'", "cosmosaccaddr1jawd35d9aq4u76sr3fjalmcqc8hqygs9gtnmv3"), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + require.Equal(t, "[]", body) + + // create TX + receiveAddr, resultTx := doSend(t, port, seed, name, password, addr) + + tests.WaitForHeight(resultTx.Height+1, port) + + // check if tx is findable + res, body = Request(t, port, "GET", fmt.Sprintf("/txs/%s", resultTx.Hash), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + type txInfo struct { + Hash common.HexBytes `json:"hash"` + Height int64 `json:"height"` + Tx sdk.Tx `json:"tx"` + Result abci.ResponseDeliverTx `json:"result"` + } + var indexedTxs []txInfo + + // check if tx is queryable + res, body = Request(t, port, "GET", fmt.Sprintf("/txs?tag=tx.hash='%s'", resultTx.Hash), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + require.NotEqual(t, "[]", body) + + err := cdc.UnmarshalJSON([]byte(body), &indexedTxs) + require.NoError(t, err) + require.Equal(t, 1, len(indexedTxs)) + + // XXX should this move into some other testfile for txs in general? + // test if created TX hash is the correct hash + require.Equal(t, resultTx.Hash, indexedTxs[0].Hash) + + // query sender + // also tests url decoding + res, body = Request(t, port, "GET", fmt.Sprintf("/txs?tag=sender_bech32=%%27%s%%27", addr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + err = cdc.UnmarshalJSON([]byte(body), &indexedTxs) + require.NoError(t, err) + require.Equal(t, 1, len(indexedTxs), "%v", indexedTxs) // there are 2 txs created with doSend + require.Equal(t, resultTx.Height, indexedTxs[0].Height) + + // query recipient + res, body = Request(t, port, "GET", fmt.Sprintf("/txs?tag=recipient_bech32='%s'", receiveAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + err = cdc.UnmarshalJSON([]byte(body), &indexedTxs) + require.NoError(t, err) + require.Equal(t, 1, len(indexedTxs)) + require.Equal(t, resultTx.Height, indexedTxs[0].Height) +} + +func TestValidatorsQuery(t *testing.T) { + cleanup, pks, port := InitializeTestLCD(t, 2, []sdk.AccAddress{}) + defer cleanup() + require.Equal(t, 2, len(pks)) + + validators := getValidators(t, port) + require.Equal(t, len(validators), 2) + + // make sure all the validators were found (order unknown because sorted by owner addr) + foundVal1, foundVal2 := false, false + pk1Bech := sdk.MustBech32ifyValPub(pks[0]) + pk2Bech := sdk.MustBech32ifyValPub(pks[1]) + if validators[0].PubKey == pk1Bech || validators[1].PubKey == pk1Bech { + foundVal1 = true + } + if validators[0].PubKey == pk2Bech || validators[1].PubKey == pk2Bech { + foundVal2 = true + } + require.True(t, foundVal1, "pk1Bech %v, owner1 %v, owner2 %v", pk1Bech, validators[0].Owner, validators[1].Owner) + require.True(t, foundVal2, "pk2Bech %v, owner1 %v, owner2 %v", pk2Bech, validators[0].Owner, validators[1].Owner) +} + +func TestBonding(t *testing.T) { + name, password, denom := "test", "1234567890", "steak" + addr, seed := CreateAddr(t, "test", password, GetKB(t)) + cleanup, pks, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + defer cleanup() + + validator1Owner := sdk.AccAddress(pks[0].Address()) + + // create bond TX + resultTx := doDelegate(t, port, seed, name, password, addr, validator1Owner) + tests.WaitForHeight(resultTx.Height+1, port) + + // check if tx was committed + require.Equal(t, uint32(0), resultTx.CheckTx.Code) + require.Equal(t, uint32(0), resultTx.DeliverTx.Code) + + // query sender + acc := getAccount(t, port, addr) + coins := acc.GetCoins() + + require.Equal(t, int64(40), coins.AmountOf(denom).Int64()) + + // query validator + bond := getDelegation(t, port, addr, validator1Owner) + require.Equal(t, "60/1", bond.Shares.String()) + + ////////////////////// + // testing unbonding + + // create unbond TX + resultTx = doBeginUnbonding(t, port, seed, name, password, addr, validator1Owner) + tests.WaitForHeight(resultTx.Height+1, port) + + // query validator + bond = getDelegation(t, port, addr, validator1Owner) + require.Equal(t, "30/1", bond.Shares.String()) + + // check if tx was committed + require.Equal(t, uint32(0), resultTx.CheckTx.Code) + require.Equal(t, uint32(0), resultTx.DeliverTx.Code) + + // should the sender should have not received any coins as the unbonding has only just begun + // query sender + acc = getAccount(t, port, addr) + coins = acc.GetCoins() + require.Equal(t, int64(40), coins.AmountOf("steak").Int64()) + + // TODO add redelegation, need more complex capabilities such to mock context and +} + +func TestSubmitProposal(t *testing.T) { + name, password := "test", "1234567890" + addr, seed := CreateAddr(t, "test", password, GetKB(t)) + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + defer cleanup() + + // create SubmitProposal TX + resultTx := doSubmitProposal(t, port, seed, name, password, addr) + tests.WaitForHeight(resultTx.Height+1, port) + + // check if tx was committed + require.Equal(t, uint32(0), resultTx.CheckTx.Code) + require.Equal(t, uint32(0), resultTx.DeliverTx.Code) + + var proposalID int64 + cdc.UnmarshalBinaryBare(resultTx.DeliverTx.GetData(), &proposalID) + + // query proposal + proposal := getProposal(t, port, proposalID) + require.Equal(t, "Test", proposal.GetTitle()) +} + +func TestDeposit(t *testing.T) { + name, password := "test", "1234567890" + addr, seed := CreateAddr(t, "test", password, GetKB(t)) + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + defer cleanup() + + // create SubmitProposal TX + resultTx := doSubmitProposal(t, port, seed, name, password, addr) + tests.WaitForHeight(resultTx.Height+1, port) + + // check if tx was committed + require.Equal(t, uint32(0), resultTx.CheckTx.Code) + require.Equal(t, uint32(0), resultTx.DeliverTx.Code) + + var proposalID int64 + cdc.UnmarshalBinaryBare(resultTx.DeliverTx.GetData(), &proposalID) + + // query proposal + proposal := getProposal(t, port, proposalID) + require.Equal(t, "Test", proposal.GetTitle()) + + // create SubmitProposal TX + resultTx = doDeposit(t, port, seed, name, password, addr, proposalID) + tests.WaitForHeight(resultTx.Height+1, port) + + // query proposal + proposal = getProposal(t, port, proposalID) + require.True(t, proposal.GetTotalDeposit().IsEqual(sdk.Coins{sdk.NewCoin("steak", 10)})) + + // query deposit + deposit := getDeposit(t, port, proposalID, addr) + require.True(t, deposit.Amount.IsEqual(sdk.Coins{sdk.NewCoin("steak", 10)})) +} + +func TestVote(t *testing.T) { + name, password := "test", "1234567890" + addr, seed := CreateAddr(t, "test", password, GetKB(t)) + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + defer cleanup() + + // create SubmitProposal TX + resultTx := doSubmitProposal(t, port, seed, name, password, addr) + tests.WaitForHeight(resultTx.Height+1, port) + + // check if tx was committed + require.Equal(t, uint32(0), resultTx.CheckTx.Code) + require.Equal(t, uint32(0), resultTx.DeliverTx.Code) + + var proposalID int64 + cdc.UnmarshalBinaryBare(resultTx.DeliverTx.GetData(), &proposalID) + + // query proposal + proposal := getProposal(t, port, proposalID) + require.Equal(t, "Test", proposal.GetTitle()) + + // create SubmitProposal TX + resultTx = doDeposit(t, port, seed, name, password, addr, proposalID) + tests.WaitForHeight(resultTx.Height+1, port) + + // query proposal + proposal = getProposal(t, port, proposalID) + require.Equal(t, gov.StatusVotingPeriod, proposal.GetStatus()) + + // create SubmitProposal TX + resultTx = doVote(t, port, seed, name, password, addr, proposalID) + tests.WaitForHeight(resultTx.Height+1, port) + + vote := getVote(t, port, proposalID, addr) + require.Equal(t, proposalID, vote.ProposalID) + require.Equal(t, gov.OptionYes, vote.Option) +} + +func TestUnrevoke(t *testing.T) { + _, password := "test", "1234567890" + addr, _ := CreateAddr(t, "test", password, GetKB(t)) + cleanup, pks, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + defer cleanup() + + // XXX: any less than this and it fails + tests.WaitForHeight(3, port) + + signingInfo := getSigningInfo(t, port, sdk.ValAddress(pks[0].Address())) + tests.WaitForHeight(4, port) + require.Equal(t, true, signingInfo.IndexOffset > 0) + require.Equal(t, int64(0), signingInfo.JailedUntil) + require.Equal(t, true, signingInfo.SignedBlocksCounter > 0) +} + +func TestProposalsQuery(t *testing.T) { + name, password1 := "test", "1234567890" + name2, password2 := "test2", "1234567890" + addr, seed := CreateAddr(t, "test", password1, GetKB(t)) + addr2, seed2 := CreateAddr(t, "test2", password2, GetKB(t)) + cleanup, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr, addr2}) + defer cleanup() + + // Addr1 proposes (and deposits) proposals #1 and #2 + resultTx := doSubmitProposal(t, port, seed, name, password1, addr) + var proposalID1 int64 + cdc.UnmarshalBinaryBare(resultTx.DeliverTx.GetData(), &proposalID1) + tests.WaitForHeight(resultTx.Height+1, port) + resultTx = doSubmitProposal(t, port, seed, name, password1, addr) + var proposalID2 int64 + cdc.UnmarshalBinaryBare(resultTx.DeliverTx.GetData(), &proposalID2) + tests.WaitForHeight(resultTx.Height+1, port) + + // Addr2 proposes (and deposits) proposals #3 + resultTx = doSubmitProposal(t, port, seed2, name2, password2, addr2) + var proposalID3 int64 + cdc.UnmarshalBinaryBare(resultTx.DeliverTx.GetData(), &proposalID3) + tests.WaitForHeight(resultTx.Height+1, port) + + // Addr2 deposits on proposals #2 & #3 + resultTx = doDeposit(t, port, seed2, name2, password2, addr2, proposalID2) + tests.WaitForHeight(resultTx.Height+1, port) + resultTx = doDeposit(t, port, seed2, name2, password2, addr2, proposalID3) + tests.WaitForHeight(resultTx.Height+1, port) + + // Only proposals #1 should be in Deposit Period + proposals := getProposalsFilterStatus(t, port, gov.StatusDepositPeriod) + require.Len(t, proposals, 1) + require.Equal(t, proposalID1, proposals[0].GetProposalID()) + // Only proposals #2 and #3 should be in Voting Period + proposals = getProposalsFilterStatus(t, port, gov.StatusVotingPeriod) + require.Len(t, proposals, 2) + require.Equal(t, proposalID2, proposals[0].GetProposalID()) + require.Equal(t, proposalID3, proposals[1].GetProposalID()) + + // Addr1 votes on proposals #2 & #3 + resultTx = doVote(t, port, seed, name, password1, addr, proposalID2) + tests.WaitForHeight(resultTx.Height+1, port) + resultTx = doVote(t, port, seed, name, password1, addr, proposalID3) + tests.WaitForHeight(resultTx.Height+1, port) + + // Addr2 votes on proposal #3 + resultTx = doVote(t, port, seed2, name2, password2, addr2, proposalID3) + tests.WaitForHeight(resultTx.Height+1, port) + + // Test query all proposals + proposals = getProposalsAll(t, port) + require.Equal(t, proposalID1, (proposals[0]).GetProposalID()) + require.Equal(t, proposalID2, (proposals[1]).GetProposalID()) + require.Equal(t, proposalID3, (proposals[2]).GetProposalID()) + + // Test query deposited by addr1 + proposals = getProposalsFilterDepositer(t, port, addr) + require.Equal(t, proposalID1, (proposals[0]).GetProposalID()) + + // Test query deposited by addr2 + proposals = getProposalsFilterDepositer(t, port, addr2) + require.Equal(t, proposalID2, (proposals[0]).GetProposalID()) + require.Equal(t, proposalID3, (proposals[1]).GetProposalID()) + + // Test query voted by addr1 + proposals = getProposalsFilterVoter(t, port, addr) + require.Equal(t, proposalID2, (proposals[0]).GetProposalID()) + require.Equal(t, proposalID3, (proposals[1]).GetProposalID()) + + // Test query voted by addr2 + proposals = getProposalsFilterVoter(t, port, addr2) + require.Equal(t, proposalID3, (proposals[0]).GetProposalID()) + + // Test query voted and deposited by addr1 + proposals = getProposalsFilterVoterDepositer(t, port, addr, addr) + require.Equal(t, proposalID2, (proposals[0]).GetProposalID()) +} + +//_____________________________________________________________________________ +// get the account to get the sequence +func getAccount(t *testing.T, port string, addr sdk.AccAddress) auth.Account { + res, body := Request(t, port, "GET", fmt.Sprintf("/accounts/%s", addr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var acc auth.Account + err := cdc.UnmarshalJSON([]byte(body), &acc) + require.Nil(t, err) + return acc +} + +func doSend(t *testing.T, port, seed, name, password string, addr sdk.AccAddress) (receiveAddr sdk.AccAddress, resultTx ctypes.ResultBroadcastTxCommit) { + + // create receive address + kb := client.MockKeyBase() + receiveInfo, _, err := kb.CreateMnemonic("receive_address", cryptoKeys.English, "1234567890", cryptoKeys.SigningAlgo("secp256k1")) + require.Nil(t, err) + receiveAddr = sdk.AccAddress(receiveInfo.GetPubKey().Address()) + + acc := getAccount(t, port, addr) + accnum := acc.GetAccountNumber() + sequence := acc.GetSequence() + chainID := viper.GetString(client.FlagChainID) + + // send + coinbz, err := cdc.MarshalJSON(sdk.NewCoin("steak", 1)) + if err != nil { + panic(err) + } + + jsonStr := []byte(fmt.Sprintf(`{ + "name":"%s", + "password":"%s", + "account_number":"%d", + "sequence":"%d", + "gas": "10000", + "amount":[%s], + "chain_id":"%s" + }`, name, password, accnum, sequence, coinbz, chainID)) + res, body := Request(t, port, "POST", fmt.Sprintf("/accounts/%s/send", receiveAddr), jsonStr) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + err = cdc.UnmarshalJSON([]byte(body), &resultTx) + require.Nil(t, err) + + return receiveAddr, resultTx +} + +func doIBCTransfer(t *testing.T, port, seed, name, password string, addr sdk.AccAddress) (resultTx ctypes.ResultBroadcastTxCommit) { + // create receive address + kb := client.MockKeyBase() + receiveInfo, _, err := kb.CreateMnemonic("receive_address", cryptoKeys.English, "1234567890", cryptoKeys.SigningAlgo("secp256k1")) + require.Nil(t, err) + receiveAddr := sdk.AccAddress(receiveInfo.GetPubKey().Address()) + + chainID := viper.GetString(client.FlagChainID) + + // get the account to get the sequence + acc := getAccount(t, port, addr) + accnum := acc.GetAccountNumber() + sequence := acc.GetSequence() + + // send + jsonStr := []byte(fmt.Sprintf(`{ + "name":"%s", + "password": "%s", + "account_number":"%d", + "sequence": "%d", + "gas": "100000", + "chain_id": "%s", + "amount":[ + { + "denom": "%s", + "amount": "1" + } + ] + }`, name, password, accnum, sequence, chainID, "steak")) + res, body := Request(t, port, "POST", fmt.Sprintf("/ibc/testchain/%s/send", receiveAddr), jsonStr) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + err = cdc.UnmarshalJSON([]byte(body), &resultTx) + require.Nil(t, err) + + return resultTx +} + +func getSigningInfo(t *testing.T, port string, validatorAddr sdk.ValAddress) slashing.ValidatorSigningInfo { + res, body := Request(t, port, "GET", fmt.Sprintf("/slashing/signing_info/%s", validatorAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var signingInfo slashing.ValidatorSigningInfo + err := cdc.UnmarshalJSON([]byte(body), &signingInfo) + require.Nil(t, err) + return signingInfo +} + +func getDelegation(t *testing.T, port string, delegatorAddr, validatorAddr sdk.AccAddress) stake.Delegation { + + // get the account to get the sequence + res, body := Request(t, port, "GET", fmt.Sprintf("/stake/%s/delegation/%s", delegatorAddr, validatorAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var bond stake.Delegation + err := cdc.UnmarshalJSON([]byte(body), &bond) + require.Nil(t, err) + return bond +} + +func doDelegate(t *testing.T, port, seed, name, password string, delegatorAddr, validatorAddr sdk.AccAddress) (resultTx ctypes.ResultBroadcastTxCommit) { + // get the account to get the sequence + acc := getAccount(t, port, delegatorAddr) + accnum := acc.GetAccountNumber() + sequence := acc.GetSequence() + + chainID := viper.GetString(client.FlagChainID) + + // send + jsonStr := []byte(fmt.Sprintf(`{ + "name": "%s", + "password": "%s", + "account_number": "%d", + "sequence": "%d", + "gas": "10000", + "chain_id": "%s", + "delegations": [ + { + "delegator_addr": "%s", + "validator_addr": "%s", + "delegation": { "denom": "%s", "amount": "60" } + } + ], + "begin_unbondings": [], + "complete_unbondings": [], + "begin_redelegates": [], + "complete_redelegates": [] + }`, name, password, accnum, sequence, chainID, delegatorAddr, validatorAddr, "steak")) + res, body := Request(t, port, "POST", "/stake/delegations", jsonStr) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var results []ctypes.ResultBroadcastTxCommit + err := cdc.UnmarshalJSON([]byte(body), &results) + require.Nil(t, err) + + return results[0] +} + +func doBeginUnbonding(t *testing.T, port, seed, name, password string, + delegatorAddr, validatorAddr sdk.AccAddress) (resultTx ctypes.ResultBroadcastTxCommit) { + + // get the account to get the sequence + acc := getAccount(t, port, delegatorAddr) + accnum := acc.GetAccountNumber() + sequence := acc.GetSequence() + + chainID := viper.GetString(client.FlagChainID) + + // send + jsonStr := []byte(fmt.Sprintf(`{ + "name": "%s", + "password": "%s", + "account_number": "%d", + "sequence": "%d", + "gas": "20000", + "chain_id": "%s", + "delegations": [], + "begin_unbondings": [ + { + "delegator_addr": "%s", + "validator_addr": "%s", + "shares": "30" + } + ], + "complete_unbondings": [], + "begin_redelegates": [], + "complete_redelegates": [] + }`, name, password, accnum, sequence, chainID, delegatorAddr, validatorAddr)) + res, body := Request(t, port, "POST", "/stake/delegations", jsonStr) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var results []ctypes.ResultBroadcastTxCommit + err := cdc.UnmarshalJSON([]byte(body), &results) + require.Nil(t, err) + + return results[0] +} + +func doBeginRedelegation(t *testing.T, port, seed, name, password string, + delegatorAddr, validatorSrcAddr, validatorDstAddr sdk.AccAddress) (resultTx ctypes.ResultBroadcastTxCommit) { + + // get the account to get the sequence + acc := getAccount(t, port, delegatorAddr) + accnum := acc.GetAccountNumber() + sequence := acc.GetSequence() + + chainID := viper.GetString(client.FlagChainID) + + // send + jsonStr := []byte(fmt.Sprintf(`{ + "name": "%s", + "password": "%s", + "account_number": "%d", + "sequence": "%d", + "gas": "10000", + "chain_id": "%s", + "delegations": [], + "begin_unbondings": [], + "complete_unbondings": [], + "begin_redelegates": [ + { + "delegator_addr": "%s", + "validator_src_addr": "%s", + "validator_dst_addr": "%s", + "shares": "30" + } + ], + "complete_redelegates": [] + }`, name, password, accnum, sequence, chainID, delegatorAddr, validatorSrcAddr, validatorDstAddr)) + res, body := Request(t, port, "POST", "/stake/delegations", jsonStr) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var results []ctypes.ResultBroadcastTxCommit + err := cdc.UnmarshalJSON([]byte(body), &results) + require.Nil(t, err) + + return results[0] +} + +func getValidators(t *testing.T, port string) []stake.BechValidator { + // get the account to get the sequence + res, body := Request(t, port, "GET", "/stake/validators", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var validators []stake.BechValidator + err := cdc.UnmarshalJSON([]byte(body), &validators) + require.Nil(t, err) + return validators +} + +func getProposal(t *testing.T, port string, proposalID int64) gov.Proposal { + res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals/%d", proposalID), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var proposal gov.Proposal + err := cdc.UnmarshalJSON([]byte(body), &proposal) + require.Nil(t, err) + return proposal +} + +func getDeposit(t *testing.T, port string, proposalID int64, depositerAddr sdk.AccAddress) gov.Deposit { + res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals/%d/deposits/%s", proposalID, depositerAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var deposit gov.Deposit + err := cdc.UnmarshalJSON([]byte(body), &deposit) + require.Nil(t, err) + return deposit +} + +func getVote(t *testing.T, port string, proposalID int64, voterAddr sdk.AccAddress) gov.Vote { + res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals/%d/votes/%s", proposalID, voterAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var vote gov.Vote + err := cdc.UnmarshalJSON([]byte(body), &vote) + require.Nil(t, err) + return vote +} + +func getProposalsAll(t *testing.T, port string) []gov.Proposal { + res, body := Request(t, port, "GET", "/gov/proposals", nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var proposals []gov.Proposal + err := cdc.UnmarshalJSON([]byte(body), &proposals) + require.Nil(t, err) + return proposals +} + +func getProposalsFilterDepositer(t *testing.T, port string, depositerAddr sdk.AccAddress) []gov.Proposal { + res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals?depositer=%s", depositerAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var proposals []gov.Proposal + err := cdc.UnmarshalJSON([]byte(body), &proposals) + require.Nil(t, err) + return proposals +} + +func getProposalsFilterVoter(t *testing.T, port string, voterAddr sdk.AccAddress) []gov.Proposal { + res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals?voter=%s", voterAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var proposals []gov.Proposal + err := cdc.UnmarshalJSON([]byte(body), &proposals) + require.Nil(t, err) + return proposals +} + +func getProposalsFilterVoterDepositer(t *testing.T, port string, voterAddr, depositerAddr sdk.AccAddress) []gov.Proposal { + res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals?depositer=%s&voter=%s", depositerAddr, voterAddr), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var proposals []gov.Proposal + err := cdc.UnmarshalJSON([]byte(body), &proposals) + require.Nil(t, err) + return proposals +} + +func getProposalsFilterStatus(t *testing.T, port string, status gov.ProposalStatus) []gov.Proposal { + res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals?status=%s", status), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var proposals []gov.Proposal + err := cdc.UnmarshalJSON([]byte(body), &proposals) + require.Nil(t, err) + return proposals +} + +func doSubmitProposal(t *testing.T, port, seed, name, password string, proposerAddr sdk.AccAddress) (resultTx ctypes.ResultBroadcastTxCommit) { + // get the account to get the sequence + acc := getAccount(t, port, proposerAddr) + accnum := acc.GetAccountNumber() + sequence := acc.GetSequence() + + chainID := viper.GetString(client.FlagChainID) + + // submitproposal + jsonStr := []byte(fmt.Sprintf(`{ + "title": "Test", + "description": "test", + "proposal_type": "Text", + "proposer": "%s", + "initial_deposit": [{ "denom": "steak", "amount": "5" }], + "base_req": { + "name": "%s", + "password": "%s", + "chain_id": "%s", + "account_number":"%d", + "sequence":"%d", + "gas":"100000" + } + }`, proposerAddr, name, password, chainID, accnum, sequence)) + res, body := Request(t, port, "POST", "/gov/proposals", jsonStr) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var results ctypes.ResultBroadcastTxCommit + err := cdc.UnmarshalJSON([]byte(body), &results) + require.Nil(t, err) + + return results +} + +func doDeposit(t *testing.T, port, seed, name, password string, proposerAddr sdk.AccAddress, proposalID int64) (resultTx ctypes.ResultBroadcastTxCommit) { + // get the account to get the sequence + acc := getAccount(t, port, proposerAddr) + accnum := acc.GetAccountNumber() + sequence := acc.GetSequence() + + chainID := viper.GetString(client.FlagChainID) + + // deposit on proposal + jsonStr := []byte(fmt.Sprintf(`{ + "depositer": "%s", + "amount": [{ "denom": "steak", "amount": "5" }], + "base_req": { + "name": "%s", + "password": "%s", + "chain_id": "%s", + "account_number":"%d", + "sequence": "%d", + "gas":"100000" + } + }`, proposerAddr, name, password, chainID, accnum, sequence)) + res, body := Request(t, port, "POST", fmt.Sprintf("/gov/proposals/%d/deposits", proposalID), jsonStr) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var results ctypes.ResultBroadcastTxCommit + err := cdc.UnmarshalJSON([]byte(body), &results) + require.Nil(t, err) + + return results +} + +func doVote(t *testing.T, port, seed, name, password string, proposerAddr sdk.AccAddress, proposalID int64) (resultTx ctypes.ResultBroadcastTxCommit) { + // get the account to get the sequence + acc := getAccount(t, port, proposerAddr) + accnum := acc.GetAccountNumber() + sequence := acc.GetSequence() + + chainID := viper.GetString(client.FlagChainID) + + // vote on proposal + jsonStr := []byte(fmt.Sprintf(`{ + "voter": "%s", + "option": "Yes", + "base_req": { + "name": "%s", + "password": "%s", + "chain_id": "%s", + "account_number": "%d", + "sequence": "%d", + "gas":"100000" + } + }`, proposerAddr, name, password, chainID, accnum, sequence)) + res, body := Request(t, port, "POST", fmt.Sprintf("/gov/proposals/%d/votes", proposalID), jsonStr) + fmt.Println(res) + require.Equal(t, http.StatusOK, res.StatusCode, body) + + var results ctypes.ResultBroadcastTxCommit + err := cdc.UnmarshalJSON([]byte(body), &results) + require.Nil(t, err) + + return results +} diff --git a/client/lcd/test_helpers.go b/client/lcd/test_helpers.go index 0dfab1a50..e1296ca60 100644 --- a/client/lcd/test_helpers.go +++ b/client/lcd/test_helpers.go @@ -151,7 +151,7 @@ func InitializeTestLCD(t *testing.T, nValidators int, initAddrs []sdk.AccAddress appState, err := wire.MarshalJSONIndent(cdc, genesisState) require.NoError(t, err) - genDoc.AppStateJSON = appState + genDoc.AppState = appState // LCD listen address var listenAddr string diff --git a/cmd/gaia/testnets/README.md b/cmd/gaia/testnets/README.md index 86dc62e74..241cf4928 100644 --- a/cmd/gaia/testnets/README.md +++ b/cmd/gaia/testnets/README.md @@ -1,13 +1,13 @@ -# Connect to the `gaia-6002` Testnet +# Connect to the `gaia-7001` Testnet -Note: We are aware this documentation is a work in progress. We are actively +_**NOTE:**_ We are aware this documentation is a work in progress. We are actively working to improve the tooling and the documentation to make this process as painless as possible. In the meantime, join the [Validator Chat](https://riot.im/app/#/room/#cosmos_validators:matrix.org) for technical support, and [open issues](https://github.com/cosmos/cosmos-sdk) if you run into any! Thanks very much for your patience and support. :) ## Setting Up a New Node -These instructions are for setting up a brand new full node from scratch. If you ran a full node on a previous testnet, please skip to [Upgrading From Previous Testnet](#upgrading-from-previous-testnet). +These instructions are for setting up a brand new full node from scratch. If you ran a full node on a previous testnet you will need to start from scratch due to some breaking changes in key format. ### Install Go @@ -29,7 +29,7 @@ Next, let's install the testnet's version of the Cosmos SDK. mkdir -p $GOPATH/src/github.com/cosmos cd $GOPATH/src/github.com/cosmos git clone https://github.com/cosmos/cosmos-sdk -cd cosmos-sdk && git checkout v0.19.0 +cd cosmos-sdk && git checkout v0.22.0 make get_tools && make get_vendor_deps && make install ``` @@ -37,10 +37,10 @@ That will install the `gaiad` and `gaiacli` binaries. Verify that everything is ```bash $ gaiad version -0.19.0-c6711810 +0.22.0 $ gaiacli version -0.19.0-c6711810 +0.22.0 ``` ### Node Setup @@ -48,23 +48,24 @@ $ gaiacli version Create the required configuration files, and initialize the node: ```bash -gaiad init --name +gaiad init --name ``` > *NOTE:* Note that only ASCII characters are supported for the `--name`. Using Unicode renders your node unreachable. -You can also edit this `name` in the `~/.gaiad/config/config.toml` file: +You can also edit this `moniker` in the `~/.gaiad/config/config.toml` file: ```toml # A custom human readable name for this node -moniker = "" +moniker = "" ``` -Your full node has been initialized! Please skip to [Genesis & Seeds](#genesis--seeds). +Your full node has been initialized! ## Upgrading From Previous Testnet -These instructions are for full nodes that have ran on previous testnets and would like to upgrade to the latest testnet. +These instructions are for full nodes that have ran on previous testnets and +would like to upgrade to the latest testnet. ### Reset Data @@ -75,11 +76,20 @@ rm $HOME/.gaiad/config/addrbook.json $HOME/.gaiad/config/genesis.json gaiad unsafe_reset_all ``` -Your node is now in a pristine state while keeping the original `priv_validator.json` and `config.toml`. If you had any sentry nodes or full nodes setup before, -your node will still try to connect to them, but may fail if they haven't also -been upgraded. +Your node is now in a pristine state while keeping the original `priv_validator.json` and `config.toml`. +If you had any sentry nodes or full nodes setup before, your node will still try to connect to them, +but may fail if they haven't also been upgraded. -**WARNING:** Make sure that every node has a unique `priv_validator.json`. Do not copy the `priv_validator.json` from an old node to multiple new nodes. Running two nodes with the same `priv_validator.json` will cause you to double sign. +**WARNING:** Make sure that every node has a unique `priv_validator.json`. +Do not copy the `priv_validator.json` from an old node to multiple new nodes. +Running two nodes with the same `priv_validator.json` will cause you to double sign. + +NOTE: key formats changed between gaia-6002 and gaia-7000. If you're trying to upgrade from gaia-6002, +you will also need to delete your `priv_validator.json`: + +``` +rm $HOME/.gaiad/config/priv_validator.json +``` ### Software Upgrade @@ -87,7 +97,7 @@ Now it is time to upgrade the software: ```bash cd $GOPATH/src/github.com/cosmos/cosmos-sdk -git fetch --all && git checkout v0.19.0 +git fetch --all && git checkout v0.22.0 make update_tools && make get_vendor_deps && make install ``` @@ -97,11 +107,11 @@ Your full node has been cleanly upgraded! ### Copy the Genesis File -Copy the testnet's `genesis.json` file and place it in `gaiad`'s config directory. +Fetch the testnet's `genesis.json` file and place it in `gaiad`'s config directory. ```bash mkdir -p $HOME/.gaiad/config -cp -a $GOPATH/src/github.com/cosmos/cosmos-sdk/cmd/gaia/testnets/gaia-6002/genesis.json $HOME/.gaiad/config/genesis.json +curl https://gist.githubusercontent.com/cwgoes/311da6ba05be6e113185a716538a44c3/raw/7b6e784cf29761b5781488006313bd69d164aa6c/chris-final.json > $HOME/.gaiad/config/genesis.json ``` ### Add Seed Nodes @@ -110,7 +120,7 @@ Your node needs to know how to find peers. You'll need to add healthy seed nodes ```toml # Comma separated list of seed nodes to connect to -seeds = "38aa9bec3998f12ae9088b21a2d910d19d565c27@gaia-6002.coinculture.net:46656,1e124dd15bd9955a7ea844ab003b1b47f0998b70@seed.cosmos.cryptium.ch:46656" +seeds = "718145d422a823fd2a4e1e36e91b92bb0c4ddf8e@gaia-7000.coinculture.net:26656,5922bf29b48a18c2300b85cc53f424fce23927ab@67.207.73.206:26656,7c8b8fd03577cd4817f5be1f03d506f879df98d8@gaia-7000-seed1.interblock.io:26656,a28737ff02391a6e00a1d3b79befd57e68e8264c@gaia-7000-seed2.interblock.io:26656,987ffd26640cd03d08ed7e53b24dfaa7956e612d@gaia-7000-seed3.interblock.io:26656" ``` If those seeds aren't working, you can find more seeds and persistent peers on the [Cosmos Explorer](https://explorecosmos.network/nodes). Open the the `Full Nodes` pane and select nodes that do not have private (`10.x.x.x`) or [local IP addresses](https://en.wikipedia.org/wiki/Private_network). The `Persistent Peer` field contains the connection string. For best results use 4-6. @@ -183,7 +193,7 @@ View the validator pubkey for your node by typing: gaiad tendermint show_validator ``` -**WARNING:** We strongly recommend NOT using the same passphrase for multiple keys. The Tendermint team and the Interchain Foundation will not be responsible for the loss of funds. +**WARNING:** We strongly recommend NOT using the same passphrase for multiple keys. The Tendermint team and the Interchain Foundation will not be responsible for the loss of funds. This is not as important on the testnets, but is good security practice and should be followed. ## Fund your account @@ -199,7 +209,7 @@ gaiacli account ## Run a Validator Node -[Validators](https://cosmos.network/validators) are responsible for committing new blocks to the blockchain through voting. A validator's stake is slashed if they become unavailable, double sign a transaction, or don't cast their votes. If you only want to run a full node, a VM in the cloud is fine. However, if you are want to become a validator for the Hub's `mainnet`, you should research hardened setups. Please read [Sentry Node Architecture](https://github.com/cosmos/cosmos/blob/master/VALIDATORS_FAQ.md#how-can-validators-protect-themselves-from-denial-of-service-attacks) to protect your node from DDOS and ensure high-availability. Also see the [technical requirements](https://github.com/cosmos/cosmos/blob/master/VALIDATORS_FAQ.md#technical-requirements)). There's also more info on our [website](https://cosmos.network/validators). +[Validators](https://cosmos.network/validators) are responsible for committing new blocks to the blockchain through voting. A validator's stake is slashed if they become unavailable, double sign a transaction, or don't cast their votes. If you only want to run a full node, a VM in the cloud is fine. However, if you are want to become a validator for the Hub's `mainnet`, you should research hardened setups. Please read [Sentry Node Architecture](https://forum.cosmos.network/t/sentry-node-architecture-overview/454) to protect your node from DDOS and ensure high-availability. Also see the [technical requirements](https://github.com/cosmos/cosmos/blob/master/VALIDATORS_FAQ.md#technical-requirements)). There's also more info on our [website](https://cosmos.network/validators). ### Create Your Validator @@ -219,7 +229,7 @@ gaiacli stake create-validator \ --pubkey=$(gaiad tendermint show_validator) \ --address-validator= --moniker="choose a moniker" \ - --chain-id=gaia-6002 \ + --chain-id=gaia-7001 \ --from= ``` @@ -236,7 +246,7 @@ gaiacli stake edit-validator --website="https://cosmos.network" \ --keybase-sig="6A0D65E29A4CBC8E" --details="To infinity and beyond!" - --chain-id=gaia-6002 \ + --chain-id=gaia-7001 \ --from= ``` @@ -246,7 +256,7 @@ View the validator's information with this command: ```bash gaiacli stake validator \ --address-validator= \ - --chain-id=gaia-6002 + --chain-id=gaia-7001 ``` Your validator is active if the following command returns anything: @@ -261,7 +271,7 @@ You should also be able to see your validator on the [Explorer](https://explorec ### Problem #1: My validator has `voting_power: 0` -Your validator has become auto-unbonded. In `gaia-6002`, we unbond validators if they do not vote on `50` of the last `100` blocks. Since blocks are proposed every ~2 seconds, a validator unresponsive for ~100 seconds will become unbonded. This usually happens when your `gaiad` process crashes. +Your validator has become auto-unbonded. In `gaia-7001`, we unbond validators if they do not vote on `50` of the last `100` blocks. Since blocks are proposed every ~2 seconds, a validator unresponsive for ~100 seconds will become unbonded. This usually happens when your `gaiad` process crashes. Here's how you can return the voting power back to your validator. First, if `gaiad` is not running, start it up again: @@ -272,7 +282,7 @@ gaiad start Wait for your full node to catch up to the latest block. Next, run the following command. Note that `` is the address of your validator account, and `` is the name of the validator account. You can find this info by running `gaiacli keys list`. ```bash -gaiacli stake unrevoke --chain-id=gaia-6002 --from= +gaiacli stake unrevoke --chain-id=gaia-7001 --from= ``` **WARNING:** If you don't wait for `gaiad` to sync before running `unrevoke`, you will receive an error message telling you your validator is still jailed. @@ -322,12 +332,12 @@ gaiacli stake delegate \ --address-delegator= \ --address-validator= \ --from= \ - --chain-id=gaia-6002 + --chain-id=gaia-7001 ``` While tokens are bonded, they are pooled with all the other bonded tokens in the network. Validators and delegators obtain a percentage of shares that equal their stake in this pool. -> _*NOTE:*_ Don't use more `steak` thank you have! You can always get more by using the [Faucet](https://faucetcosmos.network/)! +> _*NOTE:*_ Don't use more `steak` thank you have! You can always get more by using the [Faucet](https://gaia.faucetcosmos.network/)! ### Unbond Tokens @@ -339,7 +349,7 @@ gaiacli stake unbond \ --address-validator= \ --shares=MAX \ --from= \ - --chain-id=gaia-6002 + --chain-id=gaia-7001 ``` You can check your balance and your stake delegation to see that the unbonding went through successfully. @@ -350,7 +360,7 @@ gaiacli account gaiacli stake delegation \ --address-delegator= \ --address-validator= \ - --chain-id=gaia-6002 + --chain-id=gaia-7001 ``` ## Governance @@ -384,7 +394,7 @@ gaiacli gov submit-proposal \ --proposer= \ --deposit=<40steak> \ --from= \ - --chain-id=gaia-7000 + --chain-id=gaia-7001 ``` @@ -398,7 +408,7 @@ gaiacli gov deposit \ --depositer= \ --deposit=<200steak> \ --from= \ - --chain-id=gaia-7000 + --chain-id=gaia-7001 ``` > _NOTE_: Proposals that don't meet this requirement will be deleted after `MaxDepositPeriod` is reached. @@ -410,7 +420,7 @@ Once created, you can now query information of the proposal: ```bash gaiacli gov query-proposal \ --proposalID= \ - --chain-id=gaia-7000 + --chain-id=gaia-7001 ``` ### Vote on a proposal @@ -423,7 +433,7 @@ gaiacli gov vote \ --voter= \ --option= \ --from= \ - --chain-id=gaia-7000 + --chain-id=gaia-7001 ``` #### Query vote @@ -434,7 +444,7 @@ Check the vote with the option you just submitted: gaiacli gov query-vote \ --proposalID= \ --voter= \ - --chain-id=gaia-7000 + --chain-id=gaia-7001 ``` ## Other Operations @@ -444,7 +454,7 @@ gaiacli gov query-vote \ ```bash gaiacli send \ --amount=10faucetToken \ - --chain-id=gaia-6002 \ + --chain-id=gaia-7001 \ --from= \ --to= ``` diff --git a/cmd/gaia/testnets/STATUS.md b/cmd/gaia/testnets/STATUS.md index 00f7a5860..185df94c6 100644 --- a/cmd/gaia/testnets/STATUS.md +++ b/cmd/gaia/testnets/STATUS.md @@ -1,5 +1,24 @@ # TESTNET STATUS +## *July 17, 2018, 4:00 EST* - New Testnet Gaia-7001 + +- New testnet with fixes for the genesis file +- Increased max validators to 128 + +## *July 17, 2018, 3:00 EST* - Gaia-7000 consensus failure + +- Misconfiguration in the genesis file led to a consensus failure +- New genesis file for gaia-7001 will be up soon + +## *July 17, 2018, 2:40 EST* - Gaia-7000 is making blocks! + +- Gaia-7000 is live and making blocks! + +## *July 16, 2018, 17:00 EST* - New Testnet Gaia-7000 + +- Gaia-7000 is up! +- 108 validators in the genesis.json file. + ## *July 2, 2018, 1:00 EST* - Gaia-6002 slashing failure - Gaia-6002 has been halted due to a slashing issue. diff --git a/cmd/gaia/testnets/gaia-7000/genesis.json b/cmd/gaia/testnets/gaia-7000/genesis.json new file mode 100644 index 000000000..7ada516d4 --- /dev/null +++ b/cmd/gaia/testnets/gaia-7000/genesis.json @@ -0,0 +1,5680 @@ +{ + "genesis_time": "2018-07-16T19:57:28.971479541Z", + "chain_id": "gaia-7000", + "consensus_params": { + "block_size_params": { + "max_bytes": "22020096", + "max_txs": "10000", + "max_gas": "-1" + }, + "tx_size_params": { + "max_bytes": "10240", + "max_gas": "-1" + }, + "block_gossip_params": { + "block_part_size_bytes": "65536" + }, + "evidence_params": { + "max_age": "100000" + } + }, + "validators": [ + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "MRCeBDANSjH6IsxO0z6tRe+xqoZvIGhdfl1t+SXGUpM=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "tOEqjO2t51PEgO9Tv0B7qM0yPmy1n5tMa3Beg0tp3ns=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "S8s6fdAQNQ3bN9SNVAsHB/j8uv1CM1roxeLesL+fh4g=" + }, + "power": "100", + "name": "validatorluigi001" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2JoNf1gavJ1d6XFIumO1Mki5GVMOcg58AioHksU3maE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2JoNf1gavJ1d6XFIumO1Mki5GVMOcg58AioHksU3maE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "k3YLQYEN2QMP6XITRsBmgb+pNGhJ5Jbg0bzUW977kK0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "EREUrXXl1OJqLQag0P4h6vJ2H+8GEwyNAjgn1XEJU+I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "heNintBalqaJwCOjLb9+mX/cQ1ytMlV7ZroPIlkwZqo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nb2oRB12DlEQkFn7KSjSVkj5rDoSTsuBFa09+gmNJ7o=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bZSEBDNIOr0xJ/PxaAScJIyG6hqFtryBAMNwghAOTTU=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8K3clCjVU33BTIpUhdahGmu++WxHj4NUE9krCRkk++s=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RBuRRNEzA9RA1Wrdi9PPFQJ29/n/bqN9O2tQv9Gq248=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RwPRoiY5C0covekqbr3VrQwxWGHioUUIf2+TOq8LIC0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2qtEBT+Tc+SD2wJsdrVMHXrBKfvesxtmtSKDK5fXwA0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "gU5mmVLUSzn/fIEMgiiB4LARRoWlqjUGHr3A4SndWO8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "xlO2cnii42KisAn8OcstC/3XV5+I0FlcSbWuyy5MVA8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "q5ezDn4DcWFPWvMayPJI35nXr//jjF8fGHsuiHjpDcU=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PSqbJOwglJb1yrj3aWebBpXb2ujXcR037s1Cyj2HoW4=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "A6GzeXUM3vsXaDAEYMSDgSKkqn9AoUYjs8empH46MGY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "81fx09BivOOxeGL7QisF8aKRZjjcARpiSaCOX9mJfY8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UjTvuOew2EaooduJBiYmBWeF5ai0yFJG8uio5YXpJgg=" + }, + "power": "1", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "y7p9JSVZBnRxjAI9v5Pxl37hMtyuHf6B4Ghqzm6+ii0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oG8Q5o+SN4wqMLvlIfVgQPnsQzNEKeH0D/XGM8JlGrY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PxJbo5FKA6mXtgwclRQVNIjOCQK3Q7WkLQrvM9lYbGI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Q/UShqqVDOUSNYBrR1G/1X1s+YXEVXEJzeXmYvfYIr0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEWWDBwFW+/BpTCvNCLW7AP98hndBukzSbrwCb7sooo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "MZi48DJZOgRbE0ZStR66omv6Ez1Wkjvf2D/41q6Nd0I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Go9GXHI6SCQo2QKMxkAkgYLhfo3XrVjWLR2nE2AvYyk=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "P9RgE4RMQT/aHap2oICpwpgKeBAwxPUwuU9zIffKFNM=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "1+EkFYvTDmz4WQRbK+kznRHoaZVLludtkDrMuM6h++E=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEMDwUVoyJT7MNfOYKa25xU+Lnsz/ciH8rFUri4diLI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "lUMCRAeu47BsOhNvCQTQJQeB68z0/VaElC9j5gDt9y8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VnAr7ZIjvUXpWmzbkt8skHp0oRNc3V89SfvgaZydwfw=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u4GEbsk9IEF56V1am5dRtAWXz4iFQkO03FVL87BZXIM=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "BaaCxmYHKJ6obIzTCdRtjw1cc8d2mUJcMbLWCjf1aLo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "N3K5kDdfcKJurfaa6s2zfKgtYvz1Pagz7VWi9ZfX8yM=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "DsTbM0AgHfhSUKvOGkxudDOY3ojYT6bifhpelqHs8+s=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "j9be+ddLChInrFz6/820/uYh4WZBzlp61klyJBDy/ZY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Xi7nIgj4PqVXrpKLfJhcyxyVY1d3HRo72sKKPDmuU78=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2p8s/pRBZPjYWKKMlR7AOXypDzDmPo762iXlKpCwtco=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nsofE1FmSr1TiDR0gfnxfMDQ8o2pC+1NE7Oa9ceztSg=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WvmTBjsCN4ueGpEdySRwsRC5knBRLfY439/e4mG+YAY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "c0i2uKsYBv8fubnI60lZIWA1y4zw1bFgsq5MmWBHKak=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "AJR2ex094A1nJEWQsZYjALWsrSl1/huGZ37z2ZsMrpg=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "LSDd6ab46sHxwJSrg5YLpsPG2o6EcsZ3rDikpHzMNmI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dnFjFoTM9sP/RjQkXBK1YpYn3v5W+j0+g/OfUHS4xu8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "L0I4JoDfktbDWe0fCDL/nQlBPkF5mNgqamnM5JKJ1Uc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dPpZD53AbAMtW6sK+rTnXYe2GGGoSCNWsCtsmArLiIs=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VakMQSPBEuSC9Nwuv8WWhrZVUmH31bUR4+G6pJhkgE8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KI+kCESWD9cB8se4uxRrFVAI5viyNNUXUyMCc903yQc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8Qu1LFMt7qlZNmYQWrsXUA80aIx0rrFPPXs2s6NBdU8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WRsXnLz3gf8o4lYYeCZjAXgPU1cdmOOYPdy7aY63iIA=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R/3f7VruxWpu+2hiHlVpplTwoOou5kfQI1k/6/9H/y8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "HjSC7VkhKih6xMhudlqfaFE8ZZnP8RKJPv4iqR7RhcE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "cLM/HeUFsXlnYnYod695u6NBDS0trMq8sVRdABnF7uc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Epd2FDKZwDybzT38Z7WB0y2jiLn9/2OLzmY3Zu18l6I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ENAVynNXVpj/IdYx9kCPKaPs4bWSxRIHNlmS9QiDuZQ=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "j2w5BFOnZTrPN4SFpmQyfRomnUwbEbz1A+kr3z1icjo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "I2ILaY31gonxYQhlIk4PFUIN+Pk7+9dDTK1C/s+Vcb0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wRufybSUsTMnUeQkP74uJNDRKeM8jBLAS64T0BRfpY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2gOiMAdnIdND4cA75E7naQdyyIYDAdcjF3uO6OiEZlU=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2S8Y/vnLM3W+MYxNCxcUItIBfdZL/T4A8vRg89n0wLg=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kol7Gj60Fct4X8T1rHLJQ0z/b14UqqSae8h1e37rLL8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UBTju7UZfXLVPPYb1a8gPZ69BeCv2Fho7YVo2EUbxKc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "0HqB2x6x5HzeozpHatePECw07x1UcDdSz8kQGNznnA8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "H0SIA/BU6Xj8oT5bQkvLpEITN3CqFLbMeBcQ72NZrAE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Xnh8TL3BbIs9VTUenmnx6r2UAHpGCj3G9FV0mzc+mU4=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "X62YB48gO2SsWGnjYxH+aGfLQcjnP+T0hnErdWZ859g=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8pfpbIxBBiu88hpxS3CeRpv7kClEjl8SwVgckDNBGlE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UuxXNPImsE5Wp+utGfJywZBHuuGE4RmL0CArc6td82w=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Sl3NKLaYEgDaovqTkKVZh2ihRFbSmyVjC63wpv3ecdc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "SYjCs2AlY04xdfJGPD+gyO9NZ/zQ0Lfb/TLrjgOLS68=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oI1+4FoeI/knjsjDyCJtgZPaeyKON8tCTcM9QX0BHa8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nts1nu73aBgIdSaYye4coIuE1iBNeCuTZZC8LQ37ac8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "NQX4yKpOztKrmgBhGIC5WOALOLOq3LTpbzsN4ZLXGec=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "BB4a/Xh5z+dkGCRlF+pSGC3iDOoDrFse/xzQAtmxMF4=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ydjx2ea+PVuChrny6X2dluJwyXta+BsNQRsgHXp8fXw=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "pPGLc4NhNaehdoV2antWuyr0GmBVEG1NhD9NiSRrTi0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VBVHOLnWGptY26J0wqXoZI2Dnu96pccMb08zlsaxPCQ=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "aUViYC2znC55sleHfmsIN9hZ45SbYPbDcYA0gVzglsc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "riYrMXBFLavmf4MU/Ly7emDlciVqfB2/zxJoRsBUlfY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F2wCn9rKafNZsYZwoLGkSQIpr3rk86cjYyuhSjsjRaE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ugb3W6W7WL9Vc4KiSBWIaowBfpqJlzbfBSfrIqZW06A=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "gJDxhwAE6GeGCKQeVaNZ5is7+7MFHXtOG0UsnguKdoA=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "b9RSkt+WmMxVHQExQH0IMPpnR9zDAaJwz/mv1gtyRVY=" + }, + "power": "100", + "name": "smartpesa" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "569Sb+Wpo8VFqXRi4cQhlOD9kS8uBgmJ2rntY3GLtzY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "SNwrT1B+A4g6TY7x0QzVrmVbcbl3cHXzXdD1tFHxLNo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K4kLogLtZxqrYSqRVJfrFm9tUG+Tc3QWXWIewnAgI9w=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TwzOJ4GcN+ZTswub4R8488SrKeWXjY/PaqCF5neXJig=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JXW8iTiWG28E05ZFJIKvCOBwI2RrH/BOBL/MluTZ6+I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "A3zUdVcpj4H+HRZmRW5xixj4dzMgqD7be9GrdXcjdns=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7RhnD9OAZEJ4SV6V3LOZ1gGWubtX25457wCQq+AYYPI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "66j9af4xDJSblMLS+mFbp7d8TaFGu0FOo+0MwEYm2lE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8DScmobjJQmkN44K2xiZkESM/O9MJK/DqlggnIPLpso=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "4JoJuRfaANhdM1x3AWRo1/Cj9DH3VA+fi1SynzknV+w=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "cCoFsZzKZ9SQZbHe4NueVObIezP6ts0tRTZ/aN96dig=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Zp4tk/ieqplJF8xMeef9HV8bYpHSY+3hJ2sH7PfCX1I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "jj0Y/Fy8JSJR3g+PHU6Ce0ecYwHGUVJ4bVyR7WwcyLI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "XQDVMXja3kFk5Jb47BsqJmzcDsM4lE9+r+f/J3O5Jms=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oL/QCr7LEOivyTqpGrmwVd1r+hYI2WB5+kSVzpDMxx4=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "eeImG09hOPo1W7j7lKepN/Lx6I9GGHqVBVEKmznxACc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Abws3eXrUFAH8LeZJIcECakPL945TTmFsBlXONOUeII=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PEg/D54SoiKZ+pic0Z0RzZa/vfYNAAf4kzSc5UKXDYk=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "omAzuJps8KX3/iOC1LjwkMPMH3c6tjfLXwCNWXRBdWw=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nctikQSpoLRl5kV6KarIS761QvEOZCWw6nvc48xWhic=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "NrTRAbZnBqJpW9lRW6LxXxE7EV++y7WiIRV0ifRLovA=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "W0rP8sv4Ae/LZOqlBA9evvYARDt79WpFaI26jw/9Tfk=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JdfJDlE46456GWp+AkSZhzlkUQI41f8aX7611oiWUSc=" + }, + "power": "100", + "name": "" + } + ], + "app_hash": "", + "app_state": { + "accounts": [ + { + "address": "cosmosaccaddr1c2dkaym4teqw6jl9jkq8eu8nf4wzn2lgf4ydyt", + "coins": [ + { + "denom": "faucetToken", + "amount": "1000000" + }, + { + "denom": "steak", + "amount": "10000000" + } + ] + }, + { + "address": "cosmosaccaddr157mg9hnhchfrqvk3enrvmvj29yhmlwf759xrgw", + "coins": [ + { + "denom": "jlandrewsToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr193vn0gk3nsmjkxwz78gce8e8mkmagmvulpg5jt", + "coins": [ + { + "denom": "jackToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr16rcrnftjyl2mctz78825ng8tx5ss22jf6jcp9l", + "coins": [ + { + "denom": "luigi001Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "coins": [ + { + "denom": "irisToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "coins": [ + { + "denom": "irisToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1syhzpjwx6vv3erv2myq7txrjhrp95hrhgcl242", + "coins": [ + { + "denom": "TropicalMongoXToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1uga4nuresex5u8ajjh2pcr39l0s9hszdkp843j", + "coins": [ + { + "denom": "wingmanToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr12wnqvqg79s9jqrul0lva3h72rfmewm7jprrcp5", + "coins": [ + { + "denom": "Nemea7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1lq0mvtgnwe8mp0096un0v8ztcsj8ad92t2cwrq", + "coins": [ + { + "denom": "infinite-castingToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr14e774gfzt5l9ka766ehfgu6n5hgy9f3sehzyv8", + "coins": [ + { + "denom": "cwgoesToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr164jntjfk9zs8x29mc27qansfwvjqs60gj6ermu", + "coins": [ + { + "denom": "lunamintToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1qkc3tghc3fms7eye7vtu0g0370epr4jkje2ne7", + "coins": [ + { + "denom": "skoed-validator-7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr18m09d56pg5p2660de4sjfezpd8ud6jfghndfnt", + "coins": [ + { + "denom": "starfishToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1k9pqxd8fxqlk52uwfxnlsexqj6xnmw5swhss45", + "coins": [ + { + "denom": "jjangg96Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr13q937pwglh24knwa2v23ml0kkpl9vwzjmfmj3q", + "coins": [ + { + "denom": "iaspirationiToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1xvt4e7xd0j9dwv2w83g50tpcltsl90h5dfnz6h", + "coins": [ + { + "denom": "21e800Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1nnyel6v0kx8zmfh9edmre3ua4dt9306cfxsxgd", + "coins": [ + { + "denom": "spptest1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr13cds7hwqyq9ja2hsv4sg7glq9arlk43gcl3cek", + "coins": [ + { + "denom": "windmillToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1y2z20pwqu5qpclque3pqkguruvheum2djtzjw3", + "coins": [ + { + "denom": "pbostrom/Mythos-1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1anuuffusmq5ng3rhlndhnacy45et30jqygtn67", + "coins": [ + { + "denom": "BarytToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1wk0t6na230vxhf6ddresw2c40k5y3ayrww0s2m", + "coins": [ + { + "denom": "P2P.ORG ValidatorToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr12pn4p6r5wjpsep9kn655ng7fh59yez7t0rahru", + "coins": [ + { + "denom": "oleary-labsToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr15rrxdflhq4744qt9m5ysstq3zpykhacf908eez", + "coins": [ + { + "denom": "wancloudsentryToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr17rqsh3fw6rehnwzarz90jkqtt5fupmh50gy556", + "coins": [ + { + "denom": "space4Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1g4q87u438qdh2c8ue4dzdr9ldrqrs77ptm9c70", + "coins": [ + { + "denom": "colony-finderToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1dq7jt3pn7mrce2twac907jue7hjd0p0rgt3qnq", + "coins": [ + { + "denom": "sparkpool-validator-02Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1gg6natrtt5lf02xwr06ujcczvavl54wgljuaut", + "coins": [ + { + "denom": "mining-shipToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1zds6r7jyxyxcpf05r5yyyy3u8q2rvj9kkc6vcv", + "coins": [ + { + "denom": "StakedToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1l0qw5znfd6e8pshpjvyghjjzyr4l6ymla080lt", + "coins": [ + { + "denom": "nyliraToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1rxxcpkmsngd0azkh3n2467m66ls4rwq52yuv27", + "coins": [ + { + "denom": "liangpingToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jsch8k385shvse6j5dfx20483qym5uhq76xpjf", + "coins": [ + { + "denom": "SVNode01Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr19uhnhct0p45ek6qxp3cjjrjtz4pacwcsgzvpuj", + "coins": [ + { + "denom": "vhxnode1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1gghhdtx2sceafvgg8dry5sqrvc8srxghm4qqsy", + "coins": [ + { + "denom": "gregToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1cyayv35tv47t829mel6jm0vqzmrdhf3jq87tqg", + "coins": [ + { + "denom": "bucksterToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr126ayk3hse5zvk9gxfmpsjr9565ef72pv9g20yx", + "coins": [ + { + "denom": "grass-fedToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1fskmzyt2hr8usr3s65dq3rfur3fy6g2hjp23tm", + "coins": [ + { + "denom": "ATEAM1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1lhjta6nt0lewj05m8444tuyhalkrffgpm7njpp", + "coins": [ + { + "denom": "BFF-Validator-7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1pm0gx3lk46gf8vyj5my9w5tk06cuq66ll77ugj", + "coins": [ + { + "denom": "redbricks7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr15w2rengajq9js8hu57kjw88dly5vy7gsqedn0n", + "coins": [ + { + "denom": "kittyfishToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr10505nl7yftsme9jk2glhjhta7w0475uva87paj", + "coins": [ + { + "denom": "ForboleToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr18z3pnjgdtt337z8g5drfts7r3fm6n9a0896h0r", + "coins": [ + { + "denom": "coinoneToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1vmdgku2g0n5p2ef995r4fugu99ze9e5me9kh4d", + "coins": [ + { + "denom": "bmen-companyToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1j2frwt2vq2xer7f060wpsu3y3f63uys2w9lx2e", + "coins": [ + { + "denom": "2400bpsToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1whxd48da3r56n8eecym8zg0c6xmf35fn2myart", + "coins": [ + { + "denom": "devToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jkmn6asju47zuuzrf8rjt7sllaj5cx4kueyv8p", + "coins": [ + { + "denom": "w1m3lToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr120skmenn2a0ra8y6zassrxvnfc5rlme8rqarvs", + "coins": [ + { + "denom": "aetherToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jtt6al0acr8h0uvq489rt9zx9lnau7rlcu30pt", + "coins": [ + { + "denom": "JColToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr135dz5hdtvk3z8vl0zyy5l223kjanv0gudu4905", + "coins": [ + { + "denom": "SaiKrishnaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr182ujqw3r8p5fffjqkf0rxzj29pg5q96nxd2khq", + "coins": [ + { + "denom": "UmbrellaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1qrc3ed8tnz6vc24ftmnht8efs5ufhjmrjkds4x", + "coins": [ + { + "denom": "@MarceldeveloperToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1swydkj5u3jd4jwe7uygu4479zgs4qg6v4ds3c9", + "coins": [ + { + "denom": "stereo-watcherToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1l9jt8xgejkcm4sulhwj8c83ftprz5p9lyq4605", + "coins": [ + { + "denom": "cosmosToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr128ty3kzhcepjacu4q0xjgq60qa3zz8na3jl793", + "coins": [ + { + "denom": "stake.zoneToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1e3qm8jd9357zhdemwnaafmf0wy3f4yqmd307c2", + "coins": [ + { + "denom": "firstblock.ioToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr18wfz5vj26y079surms5sm6avjtezzspfvqs6g4", + "coins": [ + { + "denom": "shensiToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1vrc7zpg5teawwuzkfh6t7c6sy353sukhlarxpa", + "coins": [ + { + "denom": "figmentToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1umaajfgap5ef6yxvk5706kwk8j08l7wh6h9fp2", + "coins": [ + { + "denom": "iqlusionToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1670l5up6e5fddvlc027yvvlvedrzyx0mmsl622", + "coins": [ + { + "denom": "cosmosthecatToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1wx33m9dvglryga0saey0pr99ja0klhcfrwaw7l", + "coins": [ + { + "denom": "snaticoToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr15u9ve7fz8fqaf7r2u3p4f9ru4ze47pau5cxgcg", + "coins": [ + { + "denom": "mpaxeNodeToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1h4q0xkdg30cl9vw0u8ejm0rs337dszy98gnd4a", + "coins": [ + { + "denom": "joltz-secureware.ioToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr12zpkulxv7kn59sgf0tpf24qhqzxsvf3gamkl7g", + "coins": [ + { + "denom": "mwnode1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1g6sc5t9t68vmcj3alk7dfqr54tvastpxac28k6", + "coins": [ + { + "denom": "VNode01Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jck6gp4mqy33sk6a0fr5c8maq53hf4245v3mgg", + "coins": [ + { + "denom": "7768Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jh3grawl62juvx5p8fz5xsy9hpw8w3mngqafe4", + "coins": [ + { + "denom": "block3.communityToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr17nlusdvrk34fq65jemy3umfjfwaxfzv4asyl60", + "coins": [ + { + "denom": "4455Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr18u2sqnuetfnkugp59e9pgyv2dpuvkkxmmsc7m8", + "coins": [ + { + "denom": "dooroomeeToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1xdp4pls4ryvchq2n8v0cpmtwsprvyh8wvg563q", + "coins": [ + { + "denom": "sheiudToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1pmntq5en2rgtr5rzr4e304efrve4lr43z32y5s", + "coins": [ + { + "denom": "Staking Facilities ValidatorToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr197p65z7ge5g55r68thvw4l5e43gnm70jhu5g75", + "coins": [ + { + "denom": "ritter-rammToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr15klp8pypkd8htppzt6pguej57yyvp5p442khcu", + "coins": [ + { + "denom": "meteor-discoverToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jsvgewy7h62v3q43m0l347wlcwyhd4un5q8aa3", + "coins": [ + { + "denom": "COSMODROMEToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr192yhf7f7f9304cy6cu6np3r8a3m9yqzqfeu9je", + "coins": [ + { + "denom": "broadleaf7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1pag7xgpl8njlaksvp2ur5un3htg85vcrxcp5rs", + "coins": [ + { + "denom": "ravenclubToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1p56gv748xfd74qek5e637vhcr6tyjd9ukqfecc", + "coins": [ + { + "denom": "dokia-capitalToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1kwftgznylzerft2ksgkzvvfn5rfpy4nk2ye8na", + "coins": [ + { + "denom": "chainflow08Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1rj74vaqm0xkxl5cjjam63mayh4x6at3m379ulv", + "coins": [ + { + "denom": "MiaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1zpx36km7tk5cksyzxgvcp6g552p3uhwx84r53q", + "coins": [ + { + "denom": "sikka.techToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1gq0qecxs8xdaarrqxxazwavwxm7qz5jzs5anvt", + "coins": [ + { + "denom": "certus.oneToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1cypmdvszcd9kd3jenmqxd03cpceql8rtuvxftp", + "coins": [ + { + "denom": "Gold2Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1klslzz2n2nqvdaa6gwflwpka7gc60vvmh3k450", + "coins": [ + { + "denom": "idoor7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1qkllv8f6qakkw3hk9dqvytys090lk6twsyv8vf", + "coins": [ + { + "denom": "ironforkToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1wf9nug554ugpw4t0wnlppxc6crl2n02qr8v3cd", + "coins": [ + { + "denom": "sunny-mintorToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1t3afuz2kt99jz4pe5k4vjvkdmldn2x0lqzv83w", + "coins": [ + { + "denom": "BlissDynamicsToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr14zfph0h8rexsca6gg6jkwqup3sgl6mwj6eu4e6", + "coins": [ + { + "denom": "smartpesaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1998p0xkdwvul952ydavnx88tmwkhlfa0vhrngj", + "coins": [ + { + "denom": "ianstreamToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jw554408yw2h438q200jyuqgln76xh4ax0q4s0", + "coins": [ + { + "denom": "TruNodeToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1mwmcpq5nhaen8zyy86mrrept2gmp0z5peapkhu", + "coins": [ + { + "denom": "abcinToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1emaa7mwgpnpmc7yptm728ytp9quamsvu9rk4hp", + "coins": [ + { + "denom": "kochacolajToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1tq0zwzyc88l2enrlhtzw0he8rm24xfd5s9aeer", + "coins": [ + { + "denom": "D2R-validator-7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1n9qsfp3x09rhhxptzrgmdlucqhg2ce95fm3fw8", + "coins": [ + { + "denom": "juelianshanaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1sqec04r28jfevkzfkdj4ql2qzr2zwrmg78qzj8", + "coins": [ + { + "denom": "lambda-mixerToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1hfygmryre7r8m9pfqmc85y7kw7ejphmp59k2x8", + "coins": [ + { + "denom": "bkcmToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jvh448tvk368k4md83ys7auledclek0vfpckz2", + "coins": [ + { + "denom": "ramihanToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1fhfcs5npydv8s96wrk9p5ychctslu92t4n5qd4", + "coins": [ + { + "denom": "davinchcodeToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1eg88jsn38mrael6cqu7d2u8j6dynya7fv2p2tl", + "coins": [ + { + "denom": "DoriToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1ukcuqpqw3eq505wkqd2adgn8ugewxr6jtakngs", + "coins": [ + { + "denom": "daefreecaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1na3wr7ujdp3qdej6l5y0k4znzrkaz77t2yjaqf", + "coins": [ + { + "denom": "nuevaxToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1xupfqk73y7rmc6qdgv7rtjy8wsngvt2g2t59t3", + "coins": [ + { + "denom": "inschain_validatorToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr17gvlvfpsfl6hffn5u2hahk22un4ynpykc44tat", + "coins": [ + { + "denom": "gruberxToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1yfseqtj5sjhzz2q2ym09jym4h4nc4yevae0jp2", + "coins": [ + { + "denom": "meleatrustToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1yd0rklq45zg89fywr89ccutlcwp9kehhh0z03k", + "coins": [ + { + "denom": "Cosmodator-7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1arlpxs2ftf5hgetqxxkvd7mqdc28mmaqclyv4y", + "coins": [ + { + "denom": "bharvestToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr12ceualfg92x7du73mtcv0zya4nxvq3tl2m52uz", + "coins": [ + { + "denom": "cryptiumToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1wxf0ck9h2e8p2wmecxtep6cefhexsp4kzc8fxy", + "coins": [ + { + "denom": "finalityToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1pzlud6lg8w9phcwetc5aqp24eflshtv4xlxthf", + "coins": [ + { + "denom": "coscloudToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr10qp8kqwm2cuql0hw2az5mngpmw5xm9ee32exlp", + "coins": [ + { + "denom": "xiaochinaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr14dwnmm6n7tjdpeylpwsdsatdl0umm75dfkqcpa", + "coins": [ + { + "denom": "gazua1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + } + ], + "stake": { + "pool": { + "loose_tokens": "16200", + "bonded_tokens": "0", + "inflation_last_time": "0", + "inflation": "7/100", + "date_last_commission_reset": "0", + "prev_bonded_shares": "0" + }, + "params": { + "inflation_rate_change": "13/100", + "inflation_max": "1/5", + "inflation_min": "7/100", + "goal_bonded": "67/100", + "unbonding_time": "86400", + "max_validators": 100, + "bond_denom": "steak" + }, + "validators": [ + { + "owner": "cosmosaccaddr157mg9hnhchfrqvk3enrvmvj29yhmlwf759xrgw", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "MRCeBDANSjH6IsxO0z6tRe+xqoZvIGhdfl1t+SXGUpM=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "jlandrews", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr193vn0gk3nsmjkxwz78gce8e8mkmagmvulpg5jt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "tOEqjO2t51PEgO9Tv0B7qM0yPmy1n5tMa3Beg0tp3ns=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "jack", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr16rcrnftjyl2mctz78825ng8tx5ss22jf6jcp9l", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "S8s6fdAQNQ3bN9SNVAsHB/j8uv1CM1roxeLesL+fh4g=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "luigi001", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2JoNf1gavJ1d6XFIumO1Mki5GVMOcg58AioHksU3maE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "iris", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2JoNf1gavJ1d6XFIumO1Mki5GVMOcg58AioHksU3maE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "iris", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1syhzpjwx6vv3erv2myq7txrjhrp95hrhgcl242", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "k3YLQYEN2QMP6XITRsBmgb+pNGhJ5Jbg0bzUW977kK0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "TropicalMongoX", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1uga4nuresex5u8ajjh2pcr39l0s9hszdkp843j", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "EREUrXXl1OJqLQag0P4h6vJ2H+8GEwyNAjgn1XEJU+I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "wingman", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr12wnqvqg79s9jqrul0lva3h72rfmewm7jprrcp5", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "heNintBalqaJwCOjLb9+mX/cQ1ytMlV7ZroPIlkwZqo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Nemea7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1lq0mvtgnwe8mp0096un0v8ztcsj8ad92t2cwrq", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nb2oRB12DlEQkFn7KSjSVkj5rDoSTsuBFa09+gmNJ7o=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "infinite-casting", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr14e774gfzt5l9ka766ehfgu6n5hgy9f3sehzyv8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bZSEBDNIOr0xJ/PxaAScJIyG6hqFtryBAMNwghAOTTU=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "cwgoes", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr164jntjfk9zs8x29mc27qansfwvjqs60gj6ermu", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8K3clCjVU33BTIpUhdahGmu++WxHj4NUE9krCRkk++s=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "lunamint", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1qkc3tghc3fms7eye7vtu0g0370epr4jkje2ne7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RBuRRNEzA9RA1Wrdi9PPFQJ29/n/bqN9O2tQv9Gq248=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "skoed-validator-7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr18m09d56pg5p2660de4sjfezpd8ud6jfghndfnt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RwPRoiY5C0covekqbr3VrQwxWGHioUUIf2+TOq8LIC0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "starfish", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1k9pqxd8fxqlk52uwfxnlsexqj6xnmw5swhss45", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2qtEBT+Tc+SD2wJsdrVMHXrBKfvesxtmtSKDK5fXwA0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "jjangg96", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr13q937pwglh24knwa2v23ml0kkpl9vwzjmfmj3q", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "gU5mmVLUSzn/fIEMgiiB4LARRoWlqjUGHr3A4SndWO8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "iaspirationi", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1xvt4e7xd0j9dwv2w83g50tpcltsl90h5dfnz6h", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "xlO2cnii42KisAn8OcstC/3XV5+I0FlcSbWuyy5MVA8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "21e800", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1nnyel6v0kx8zmfh9edmre3ua4dt9306cfxsxgd", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "q5ezDn4DcWFPWvMayPJI35nXr//jjF8fGHsuiHjpDcU=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "spptest1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr13cds7hwqyq9ja2hsv4sg7glq9arlk43gcl3cek", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PSqbJOwglJb1yrj3aWebBpXb2ujXcR037s1Cyj2HoW4=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "windmill", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1y2z20pwqu5qpclque3pqkguruvheum2djtzjw3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "A6GzeXUM3vsXaDAEYMSDgSKkqn9AoUYjs8empH46MGY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "pbostrom/Mythos-1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1anuuffusmq5ng3rhlndhnacy45et30jqygtn67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "81fx09BivOOxeGL7QisF8aKRZjjcARpiSaCOX9mJfY8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Baryt", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1wk0t6na230vxhf6ddresw2c40k5y3ayrww0s2m", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UjTvuOew2EaooduJBiYmBWeF5ai0yFJG8uio5YXpJgg=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "P2P.ORG Validator", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr12pn4p6r5wjpsep9kn655ng7fh59yez7t0rahru", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "y7p9JSVZBnRxjAI9v5Pxl37hMtyuHf6B4Ghqzm6+ii0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "oleary-labs", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr15rrxdflhq4744qt9m5ysstq3zpykhacf908eez", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oG8Q5o+SN4wqMLvlIfVgQPnsQzNEKeH0D/XGM8JlGrY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "wancloudsentry", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr17rqsh3fw6rehnwzarz90jkqtt5fupmh50gy556", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PxJbo5FKA6mXtgwclRQVNIjOCQK3Q7WkLQrvM9lYbGI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "space4", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1g4q87u438qdh2c8ue4dzdr9ldrqrs77ptm9c70", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Q/UShqqVDOUSNYBrR1G/1X1s+YXEVXEJzeXmYvfYIr0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "colony-finder", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1dq7jt3pn7mrce2twac907jue7hjd0p0rgt3qnq", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEWWDBwFW+/BpTCvNCLW7AP98hndBukzSbrwCb7sooo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "sparkpool-validator-02", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1gg6natrtt5lf02xwr06ujcczvavl54wgljuaut", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "MZi48DJZOgRbE0ZStR66omv6Ez1Wkjvf2D/41q6Nd0I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "mining-ship", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1zds6r7jyxyxcpf05r5yyyy3u8q2rvj9kkc6vcv", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Go9GXHI6SCQo2QKMxkAkgYLhfo3XrVjWLR2nE2AvYyk=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Staked", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1l0qw5znfd6e8pshpjvyghjjzyr4l6ymla080lt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "P9RgE4RMQT/aHap2oICpwpgKeBAwxPUwuU9zIffKFNM=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "nylira", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1rxxcpkmsngd0azkh3n2467m66ls4rwq52yuv27", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "1+EkFYvTDmz4WQRbK+kznRHoaZVLludtkDrMuM6h++E=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "liangping", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jsch8k385shvse6j5dfx20483qym5uhq76xpjf", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEMDwUVoyJT7MNfOYKa25xU+Lnsz/ciH8rFUri4diLI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "SVNode01", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr19uhnhct0p45ek6qxp3cjjrjtz4pacwcsgzvpuj", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "lUMCRAeu47BsOhNvCQTQJQeB68z0/VaElC9j5gDt9y8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "vhxnode1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1gghhdtx2sceafvgg8dry5sqrvc8srxghm4qqsy", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VnAr7ZIjvUXpWmzbkt8skHp0oRNc3V89SfvgaZydwfw=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "greg", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1cyayv35tv47t829mel6jm0vqzmrdhf3jq87tqg", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u4GEbsk9IEF56V1am5dRtAWXz4iFQkO03FVL87BZXIM=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "buckster", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr126ayk3hse5zvk9gxfmpsjr9565ef72pv9g20yx", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "BaaCxmYHKJ6obIzTCdRtjw1cc8d2mUJcMbLWCjf1aLo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "grass-fed", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1fskmzyt2hr8usr3s65dq3rfur3fy6g2hjp23tm", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "N3K5kDdfcKJurfaa6s2zfKgtYvz1Pagz7VWi9ZfX8yM=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ATEAM1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1lhjta6nt0lewj05m8444tuyhalkrffgpm7njpp", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "DsTbM0AgHfhSUKvOGkxudDOY3ojYT6bifhpelqHs8+s=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "BFF-Validator-7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1pm0gx3lk46gf8vyj5my9w5tk06cuq66ll77ugj", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "j9be+ddLChInrFz6/820/uYh4WZBzlp61klyJBDy/ZY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "redbricks7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr15w2rengajq9js8hu57kjw88dly5vy7gsqedn0n", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Xi7nIgj4PqVXrpKLfJhcyxyVY1d3HRo72sKKPDmuU78=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "kittyfish", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr10505nl7yftsme9jk2glhjhta7w0475uva87paj", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2p8s/pRBZPjYWKKMlR7AOXypDzDmPo762iXlKpCwtco=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Forbole", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr18z3pnjgdtt337z8g5drfts7r3fm6n9a0896h0r", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nsofE1FmSr1TiDR0gfnxfMDQ8o2pC+1NE7Oa9ceztSg=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "coinone", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1vmdgku2g0n5p2ef995r4fugu99ze9e5me9kh4d", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WvmTBjsCN4ueGpEdySRwsRC5knBRLfY439/e4mG+YAY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "bmen-company", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1j2frwt2vq2xer7f060wpsu3y3f63uys2w9lx2e", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "c0i2uKsYBv8fubnI60lZIWA1y4zw1bFgsq5MmWBHKak=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "2400bps", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1whxd48da3r56n8eecym8zg0c6xmf35fn2myart", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "AJR2ex094A1nJEWQsZYjALWsrSl1/huGZ37z2ZsMrpg=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "dev", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jkmn6asju47zuuzrf8rjt7sllaj5cx4kueyv8p", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "LSDd6ab46sHxwJSrg5YLpsPG2o6EcsZ3rDikpHzMNmI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "w1m3l", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr120skmenn2a0ra8y6zassrxvnfc5rlme8rqarvs", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dnFjFoTM9sP/RjQkXBK1YpYn3v5W+j0+g/OfUHS4xu8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "aether", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jtt6al0acr8h0uvq489rt9zx9lnau7rlcu30pt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "L0I4JoDfktbDWe0fCDL/nQlBPkF5mNgqamnM5JKJ1Uc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "JCol", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr135dz5hdtvk3z8vl0zyy5l223kjanv0gudu4905", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dPpZD53AbAMtW6sK+rTnXYe2GGGoSCNWsCtsmArLiIs=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "SaiKrishna", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr182ujqw3r8p5fffjqkf0rxzj29pg5q96nxd2khq", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VakMQSPBEuSC9Nwuv8WWhrZVUmH31bUR4+G6pJhkgE8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Umbrella", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1qrc3ed8tnz6vc24ftmnht8efs5ufhjmrjkds4x", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KI+kCESWD9cB8se4uxRrFVAI5viyNNUXUyMCc903yQc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "@Marceldeveloper", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1swydkj5u3jd4jwe7uygu4479zgs4qg6v4ds3c9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8Qu1LFMt7qlZNmYQWrsXUA80aIx0rrFPPXs2s6NBdU8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "stereo-watcher", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1l9jt8xgejkcm4sulhwj8c83ftprz5p9lyq4605", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WRsXnLz3gf8o4lYYeCZjAXgPU1cdmOOYPdy7aY63iIA=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "cosmos", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr128ty3kzhcepjacu4q0xjgq60qa3zz8na3jl793", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R/3f7VruxWpu+2hiHlVpplTwoOou5kfQI1k/6/9H/y8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "stake.zone", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1e3qm8jd9357zhdemwnaafmf0wy3f4yqmd307c2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "HjSC7VkhKih6xMhudlqfaFE8ZZnP8RKJPv4iqR7RhcE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "firstblock.io", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr18wfz5vj26y079surms5sm6avjtezzspfvqs6g4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "cLM/HeUFsXlnYnYod695u6NBDS0trMq8sVRdABnF7uc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "shensi", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1vrc7zpg5teawwuzkfh6t7c6sy353sukhlarxpa", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Epd2FDKZwDybzT38Z7WB0y2jiLn9/2OLzmY3Zu18l6I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "figment", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1umaajfgap5ef6yxvk5706kwk8j08l7wh6h9fp2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ENAVynNXVpj/IdYx9kCPKaPs4bWSxRIHNlmS9QiDuZQ=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "iqlusion", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1670l5up6e5fddvlc027yvvlvedrzyx0mmsl622", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "j2w5BFOnZTrPN4SFpmQyfRomnUwbEbz1A+kr3z1icjo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "cosmosthecat", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1wx33m9dvglryga0saey0pr99ja0klhcfrwaw7l", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "I2ILaY31gonxYQhlIk4PFUIN+Pk7+9dDTK1C/s+Vcb0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "snatico", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr15u9ve7fz8fqaf7r2u3p4f9ru4ze47pau5cxgcg", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wRufybSUsTMnUeQkP74uJNDRKeM8jBLAS64T0BRfpY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "mpaxeNode", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1h4q0xkdg30cl9vw0u8ejm0rs337dszy98gnd4a", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2gOiMAdnIdND4cA75E7naQdyyIYDAdcjF3uO6OiEZlU=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "joltz-secureware.io", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr12zpkulxv7kn59sgf0tpf24qhqzxsvf3gamkl7g", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2S8Y/vnLM3W+MYxNCxcUItIBfdZL/T4A8vRg89n0wLg=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "mwnode1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1g6sc5t9t68vmcj3alk7dfqr54tvastpxac28k6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kol7Gj60Fct4X8T1rHLJQ0z/b14UqqSae8h1e37rLL8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "VNode01", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jck6gp4mqy33sk6a0fr5c8maq53hf4245v3mgg", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UBTju7UZfXLVPPYb1a8gPZ69BeCv2Fho7YVo2EUbxKc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "7768", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jh3grawl62juvx5p8fz5xsy9hpw8w3mngqafe4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "0HqB2x6x5HzeozpHatePECw07x1UcDdSz8kQGNznnA8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "block3.community", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr17nlusdvrk34fq65jemy3umfjfwaxfzv4asyl60", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "H0SIA/BU6Xj8oT5bQkvLpEITN3CqFLbMeBcQ72NZrAE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "4455", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr18u2sqnuetfnkugp59e9pgyv2dpuvkkxmmsc7m8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Xnh8TL3BbIs9VTUenmnx6r2UAHpGCj3G9FV0mzc+mU4=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "dooroomee", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1xdp4pls4ryvchq2n8v0cpmtwsprvyh8wvg563q", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "X62YB48gO2SsWGnjYxH+aGfLQcjnP+T0hnErdWZ859g=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "sheiud", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1pmntq5en2rgtr5rzr4e304efrve4lr43z32y5s", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8pfpbIxBBiu88hpxS3CeRpv7kClEjl8SwVgckDNBGlE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Staking Facilities Validator", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr197p65z7ge5g55r68thvw4l5e43gnm70jhu5g75", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UuxXNPImsE5Wp+utGfJywZBHuuGE4RmL0CArc6td82w=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ritter-ramm", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr15klp8pypkd8htppzt6pguej57yyvp5p442khcu", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Sl3NKLaYEgDaovqTkKVZh2ihRFbSmyVjC63wpv3ecdc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "meteor-discover", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jsvgewy7h62v3q43m0l347wlcwyhd4un5q8aa3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "SYjCs2AlY04xdfJGPD+gyO9NZ/zQ0Lfb/TLrjgOLS68=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "COSMODROME", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr192yhf7f7f9304cy6cu6np3r8a3m9yqzqfeu9je", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oI1+4FoeI/knjsjDyCJtgZPaeyKON8tCTcM9QX0BHa8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "broadleaf7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1pag7xgpl8njlaksvp2ur5un3htg85vcrxcp5rs", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nts1nu73aBgIdSaYye4coIuE1iBNeCuTZZC8LQ37ac8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ravenclub", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1p56gv748xfd74qek5e637vhcr6tyjd9ukqfecc", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "NQX4yKpOztKrmgBhGIC5WOALOLOq3LTpbzsN4ZLXGec=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "dokia-capital", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1kwftgznylzerft2ksgkzvvfn5rfpy4nk2ye8na", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "BB4a/Xh5z+dkGCRlF+pSGC3iDOoDrFse/xzQAtmxMF4=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "chainflow08", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1rj74vaqm0xkxl5cjjam63mayh4x6at3m379ulv", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ydjx2ea+PVuChrny6X2dluJwyXta+BsNQRsgHXp8fXw=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Mia", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1zpx36km7tk5cksyzxgvcp6g552p3uhwx84r53q", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "pPGLc4NhNaehdoV2antWuyr0GmBVEG1NhD9NiSRrTi0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "sikka.tech", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1gq0qecxs8xdaarrqxxazwavwxm7qz5jzs5anvt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VBVHOLnWGptY26J0wqXoZI2Dnu96pccMb08zlsaxPCQ=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "certus.one", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1cypmdvszcd9kd3jenmqxd03cpceql8rtuvxftp", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "aUViYC2znC55sleHfmsIN9hZ45SbYPbDcYA0gVzglsc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Gold2", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1klslzz2n2nqvdaa6gwflwpka7gc60vvmh3k450", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "riYrMXBFLavmf4MU/Ly7emDlciVqfB2/zxJoRsBUlfY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "idoor7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1qkllv8f6qakkw3hk9dqvytys090lk6twsyv8vf", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F2wCn9rKafNZsYZwoLGkSQIpr3rk86cjYyuhSjsjRaE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ironfork", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1wf9nug554ugpw4t0wnlppxc6crl2n02qr8v3cd", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ugb3W6W7WL9Vc4KiSBWIaowBfpqJlzbfBSfrIqZW06A=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "sunny-mintor", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1t3afuz2kt99jz4pe5k4vjvkdmldn2x0lqzv83w", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "gJDxhwAE6GeGCKQeVaNZ5is7+7MFHXtOG0UsnguKdoA=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "BlissDynamics", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr14zfph0h8rexsca6gg6jkwqup3sgl6mwj6eu4e6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "b9RSkt+WmMxVHQExQH0IMPpnR9zDAaJwz/mv1gtyRVY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "smartpesa", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1998p0xkdwvul952ydavnx88tmwkhlfa0vhrngj", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "569Sb+Wpo8VFqXRi4cQhlOD9kS8uBgmJ2rntY3GLtzY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ianstream", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jw554408yw2h438q200jyuqgln76xh4ax0q4s0", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "SNwrT1B+A4g6TY7x0QzVrmVbcbl3cHXzXdD1tFHxLNo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "TruNode", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1mwmcpq5nhaen8zyy86mrrept2gmp0z5peapkhu", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K4kLogLtZxqrYSqRVJfrFm9tUG+Tc3QWXWIewnAgI9w=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "abcin", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1emaa7mwgpnpmc7yptm728ytp9quamsvu9rk4hp", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TwzOJ4GcN+ZTswub4R8488SrKeWXjY/PaqCF5neXJig=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "kochacolaj", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1tq0zwzyc88l2enrlhtzw0he8rm24xfd5s9aeer", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JXW8iTiWG28E05ZFJIKvCOBwI2RrH/BOBL/MluTZ6+I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "D2R-validator-7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1n9qsfp3x09rhhxptzrgmdlucqhg2ce95fm3fw8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "A3zUdVcpj4H+HRZmRW5xixj4dzMgqD7be9GrdXcjdns=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "juelianshana", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1sqec04r28jfevkzfkdj4ql2qzr2zwrmg78qzj8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7RhnD9OAZEJ4SV6V3LOZ1gGWubtX25457wCQq+AYYPI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "lambda-mixer", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1hfygmryre7r8m9pfqmc85y7kw7ejphmp59k2x8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "66j9af4xDJSblMLS+mFbp7d8TaFGu0FOo+0MwEYm2lE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "bkcm", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jvh448tvk368k4md83ys7auledclek0vfpckz2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8DScmobjJQmkN44K2xiZkESM/O9MJK/DqlggnIPLpso=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ramihan", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1fhfcs5npydv8s96wrk9p5ychctslu92t4n5qd4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "4JoJuRfaANhdM1x3AWRo1/Cj9DH3VA+fi1SynzknV+w=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "davinchcode", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1eg88jsn38mrael6cqu7d2u8j6dynya7fv2p2tl", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "cCoFsZzKZ9SQZbHe4NueVObIezP6ts0tRTZ/aN96dig=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Dori", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1ukcuqpqw3eq505wkqd2adgn8ugewxr6jtakngs", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Zp4tk/ieqplJF8xMeef9HV8bYpHSY+3hJ2sH7PfCX1I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "daefreeca", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1na3wr7ujdp3qdej6l5y0k4znzrkaz77t2yjaqf", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "jj0Y/Fy8JSJR3g+PHU6Ce0ecYwHGUVJ4bVyR7WwcyLI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "nuevax", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1xupfqk73y7rmc6qdgv7rtjy8wsngvt2g2t59t3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "XQDVMXja3kFk5Jb47BsqJmzcDsM4lE9+r+f/J3O5Jms=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "inschain_validator", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr17gvlvfpsfl6hffn5u2hahk22un4ynpykc44tat", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oL/QCr7LEOivyTqpGrmwVd1r+hYI2WB5+kSVzpDMxx4=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "gruberx", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1yfseqtj5sjhzz2q2ym09jym4h4nc4yevae0jp2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "eeImG09hOPo1W7j7lKepN/Lx6I9GGHqVBVEKmznxACc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "meleatrust", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1yd0rklq45zg89fywr89ccutlcwp9kehhh0z03k", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Abws3eXrUFAH8LeZJIcECakPL945TTmFsBlXONOUeII=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Cosmodator-7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1arlpxs2ftf5hgetqxxkvd7mqdc28mmaqclyv4y", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PEg/D54SoiKZ+pic0Z0RzZa/vfYNAAf4kzSc5UKXDYk=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "bharvest", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr12ceualfg92x7du73mtcv0zya4nxvq3tl2m52uz", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "omAzuJps8KX3/iOC1LjwkMPMH3c6tjfLXwCNWXRBdWw=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Adrian Brink - Cryptium Labs", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1wxf0ck9h2e8p2wmecxtep6cefhexsp4kzc8fxy", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nctikQSpoLRl5kV6KarIS761QvEOZCWw6nvc48xWhic=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "finality", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1pzlud6lg8w9phcwetc5aqp24eflshtv4xlxthf", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "NrTRAbZnBqJpW9lRW6LxXxE7EV++y7WiIRV0ifRLovA=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "coscloud", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr10qp8kqwm2cuql0hw2az5mngpmw5xm9ee32exlp", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "W0rP8sv4Ae/LZOqlBA9evvYARDt79WpFaI26jw/9Tfk=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "xiaochina", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr14dwnmm6n7tjdpeylpwsdsatdl0umm75dfkqcpa", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JdfJDlE46456GWp+AkSZhzlkUQI41f8aX7611oiWUSc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "gazua1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + } + ], + "bonds": [ + { + "delegator_addr": "cosmosaccaddr157mg9hnhchfrqvk3enrvmvj29yhmlwf759xrgw", + "validator_addr": "cosmosaccaddr157mg9hnhchfrqvk3enrvmvj29yhmlwf759xrgw", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr193vn0gk3nsmjkxwz78gce8e8mkmagmvulpg5jt", + "validator_addr": "cosmosaccaddr193vn0gk3nsmjkxwz78gce8e8mkmagmvulpg5jt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr16rcrnftjyl2mctz78825ng8tx5ss22jf6jcp9l", + "validator_addr": "cosmosaccaddr16rcrnftjyl2mctz78825ng8tx5ss22jf6jcp9l", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "validator_addr": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "validator_addr": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1syhzpjwx6vv3erv2myq7txrjhrp95hrhgcl242", + "validator_addr": "cosmosaccaddr1syhzpjwx6vv3erv2myq7txrjhrp95hrhgcl242", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1uga4nuresex5u8ajjh2pcr39l0s9hszdkp843j", + "validator_addr": "cosmosaccaddr1uga4nuresex5u8ajjh2pcr39l0s9hszdkp843j", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr12wnqvqg79s9jqrul0lva3h72rfmewm7jprrcp5", + "validator_addr": "cosmosaccaddr12wnqvqg79s9jqrul0lva3h72rfmewm7jprrcp5", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1lq0mvtgnwe8mp0096un0v8ztcsj8ad92t2cwrq", + "validator_addr": "cosmosaccaddr1lq0mvtgnwe8mp0096un0v8ztcsj8ad92t2cwrq", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr14e774gfzt5l9ka766ehfgu6n5hgy9f3sehzyv8", + "validator_addr": "cosmosaccaddr14e774gfzt5l9ka766ehfgu6n5hgy9f3sehzyv8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr164jntjfk9zs8x29mc27qansfwvjqs60gj6ermu", + "validator_addr": "cosmosaccaddr164jntjfk9zs8x29mc27qansfwvjqs60gj6ermu", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1qkc3tghc3fms7eye7vtu0g0370epr4jkje2ne7", + "validator_addr": "cosmosaccaddr1qkc3tghc3fms7eye7vtu0g0370epr4jkje2ne7", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr18m09d56pg5p2660de4sjfezpd8ud6jfghndfnt", + "validator_addr": "cosmosaccaddr18m09d56pg5p2660de4sjfezpd8ud6jfghndfnt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1k9pqxd8fxqlk52uwfxnlsexqj6xnmw5swhss45", + "validator_addr": "cosmosaccaddr1k9pqxd8fxqlk52uwfxnlsexqj6xnmw5swhss45", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr13q937pwglh24knwa2v23ml0kkpl9vwzjmfmj3q", + "validator_addr": "cosmosaccaddr13q937pwglh24knwa2v23ml0kkpl9vwzjmfmj3q", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1xvt4e7xd0j9dwv2w83g50tpcltsl90h5dfnz6h", + "validator_addr": "cosmosaccaddr1xvt4e7xd0j9dwv2w83g50tpcltsl90h5dfnz6h", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1nnyel6v0kx8zmfh9edmre3ua4dt9306cfxsxgd", + "validator_addr": "cosmosaccaddr1nnyel6v0kx8zmfh9edmre3ua4dt9306cfxsxgd", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr13cds7hwqyq9ja2hsv4sg7glq9arlk43gcl3cek", + "validator_addr": "cosmosaccaddr13cds7hwqyq9ja2hsv4sg7glq9arlk43gcl3cek", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1y2z20pwqu5qpclque3pqkguruvheum2djtzjw3", + "validator_addr": "cosmosaccaddr1y2z20pwqu5qpclque3pqkguruvheum2djtzjw3", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1anuuffusmq5ng3rhlndhnacy45et30jqygtn67", + "validator_addr": "cosmosaccaddr1anuuffusmq5ng3rhlndhnacy45et30jqygtn67", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1wk0t6na230vxhf6ddresw2c40k5y3ayrww0s2m", + "validator_addr": "cosmosaccaddr1wk0t6na230vxhf6ddresw2c40k5y3ayrww0s2m", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr12pn4p6r5wjpsep9kn655ng7fh59yez7t0rahru", + "validator_addr": "cosmosaccaddr12pn4p6r5wjpsep9kn655ng7fh59yez7t0rahru", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr15rrxdflhq4744qt9m5ysstq3zpykhacf908eez", + "validator_addr": "cosmosaccaddr15rrxdflhq4744qt9m5ysstq3zpykhacf908eez", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr17rqsh3fw6rehnwzarz90jkqtt5fupmh50gy556", + "validator_addr": "cosmosaccaddr17rqsh3fw6rehnwzarz90jkqtt5fupmh50gy556", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1g4q87u438qdh2c8ue4dzdr9ldrqrs77ptm9c70", + "validator_addr": "cosmosaccaddr1g4q87u438qdh2c8ue4dzdr9ldrqrs77ptm9c70", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1dq7jt3pn7mrce2twac907jue7hjd0p0rgt3qnq", + "validator_addr": "cosmosaccaddr1dq7jt3pn7mrce2twac907jue7hjd0p0rgt3qnq", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1gg6natrtt5lf02xwr06ujcczvavl54wgljuaut", + "validator_addr": "cosmosaccaddr1gg6natrtt5lf02xwr06ujcczvavl54wgljuaut", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1zds6r7jyxyxcpf05r5yyyy3u8q2rvj9kkc6vcv", + "validator_addr": "cosmosaccaddr1zds6r7jyxyxcpf05r5yyyy3u8q2rvj9kkc6vcv", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1l0qw5znfd6e8pshpjvyghjjzyr4l6ymla080lt", + "validator_addr": "cosmosaccaddr1l0qw5znfd6e8pshpjvyghjjzyr4l6ymla080lt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1rxxcpkmsngd0azkh3n2467m66ls4rwq52yuv27", + "validator_addr": "cosmosaccaddr1rxxcpkmsngd0azkh3n2467m66ls4rwq52yuv27", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jsch8k385shvse6j5dfx20483qym5uhq76xpjf", + "validator_addr": "cosmosaccaddr1jsch8k385shvse6j5dfx20483qym5uhq76xpjf", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr19uhnhct0p45ek6qxp3cjjrjtz4pacwcsgzvpuj", + "validator_addr": "cosmosaccaddr19uhnhct0p45ek6qxp3cjjrjtz4pacwcsgzvpuj", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1gghhdtx2sceafvgg8dry5sqrvc8srxghm4qqsy", + "validator_addr": "cosmosaccaddr1gghhdtx2sceafvgg8dry5sqrvc8srxghm4qqsy", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1cyayv35tv47t829mel6jm0vqzmrdhf3jq87tqg", + "validator_addr": "cosmosaccaddr1cyayv35tv47t829mel6jm0vqzmrdhf3jq87tqg", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr126ayk3hse5zvk9gxfmpsjr9565ef72pv9g20yx", + "validator_addr": "cosmosaccaddr126ayk3hse5zvk9gxfmpsjr9565ef72pv9g20yx", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1fskmzyt2hr8usr3s65dq3rfur3fy6g2hjp23tm", + "validator_addr": "cosmosaccaddr1fskmzyt2hr8usr3s65dq3rfur3fy6g2hjp23tm", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1lhjta6nt0lewj05m8444tuyhalkrffgpm7njpp", + "validator_addr": "cosmosaccaddr1lhjta6nt0lewj05m8444tuyhalkrffgpm7njpp", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1pm0gx3lk46gf8vyj5my9w5tk06cuq66ll77ugj", + "validator_addr": "cosmosaccaddr1pm0gx3lk46gf8vyj5my9w5tk06cuq66ll77ugj", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr15w2rengajq9js8hu57kjw88dly5vy7gsqedn0n", + "validator_addr": "cosmosaccaddr15w2rengajq9js8hu57kjw88dly5vy7gsqedn0n", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr10505nl7yftsme9jk2glhjhta7w0475uva87paj", + "validator_addr": "cosmosaccaddr10505nl7yftsme9jk2glhjhta7w0475uva87paj", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr18z3pnjgdtt337z8g5drfts7r3fm6n9a0896h0r", + "validator_addr": "cosmosaccaddr18z3pnjgdtt337z8g5drfts7r3fm6n9a0896h0r", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1vmdgku2g0n5p2ef995r4fugu99ze9e5me9kh4d", + "validator_addr": "cosmosaccaddr1vmdgku2g0n5p2ef995r4fugu99ze9e5me9kh4d", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1j2frwt2vq2xer7f060wpsu3y3f63uys2w9lx2e", + "validator_addr": "cosmosaccaddr1j2frwt2vq2xer7f060wpsu3y3f63uys2w9lx2e", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1whxd48da3r56n8eecym8zg0c6xmf35fn2myart", + "validator_addr": "cosmosaccaddr1whxd48da3r56n8eecym8zg0c6xmf35fn2myart", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jkmn6asju47zuuzrf8rjt7sllaj5cx4kueyv8p", + "validator_addr": "cosmosaccaddr1jkmn6asju47zuuzrf8rjt7sllaj5cx4kueyv8p", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr120skmenn2a0ra8y6zassrxvnfc5rlme8rqarvs", + "validator_addr": "cosmosaccaddr120skmenn2a0ra8y6zassrxvnfc5rlme8rqarvs", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jtt6al0acr8h0uvq489rt9zx9lnau7rlcu30pt", + "validator_addr": "cosmosaccaddr1jtt6al0acr8h0uvq489rt9zx9lnau7rlcu30pt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr135dz5hdtvk3z8vl0zyy5l223kjanv0gudu4905", + "validator_addr": "cosmosaccaddr135dz5hdtvk3z8vl0zyy5l223kjanv0gudu4905", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr182ujqw3r8p5fffjqkf0rxzj29pg5q96nxd2khq", + "validator_addr": "cosmosaccaddr182ujqw3r8p5fffjqkf0rxzj29pg5q96nxd2khq", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1qrc3ed8tnz6vc24ftmnht8efs5ufhjmrjkds4x", + "validator_addr": "cosmosaccaddr1qrc3ed8tnz6vc24ftmnht8efs5ufhjmrjkds4x", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1swydkj5u3jd4jwe7uygu4479zgs4qg6v4ds3c9", + "validator_addr": "cosmosaccaddr1swydkj5u3jd4jwe7uygu4479zgs4qg6v4ds3c9", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1l9jt8xgejkcm4sulhwj8c83ftprz5p9lyq4605", + "validator_addr": "cosmosaccaddr1l9jt8xgejkcm4sulhwj8c83ftprz5p9lyq4605", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr128ty3kzhcepjacu4q0xjgq60qa3zz8na3jl793", + "validator_addr": "cosmosaccaddr128ty3kzhcepjacu4q0xjgq60qa3zz8na3jl793", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1e3qm8jd9357zhdemwnaafmf0wy3f4yqmd307c2", + "validator_addr": "cosmosaccaddr1e3qm8jd9357zhdemwnaafmf0wy3f4yqmd307c2", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr18wfz5vj26y079surms5sm6avjtezzspfvqs6g4", + "validator_addr": "cosmosaccaddr18wfz5vj26y079surms5sm6avjtezzspfvqs6g4", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1vrc7zpg5teawwuzkfh6t7c6sy353sukhlarxpa", + "validator_addr": "cosmosaccaddr1vrc7zpg5teawwuzkfh6t7c6sy353sukhlarxpa", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1umaajfgap5ef6yxvk5706kwk8j08l7wh6h9fp2", + "validator_addr": "cosmosaccaddr1umaajfgap5ef6yxvk5706kwk8j08l7wh6h9fp2", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1670l5up6e5fddvlc027yvvlvedrzyx0mmsl622", + "validator_addr": "cosmosaccaddr1670l5up6e5fddvlc027yvvlvedrzyx0mmsl622", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1wx33m9dvglryga0saey0pr99ja0klhcfrwaw7l", + "validator_addr": "cosmosaccaddr1wx33m9dvglryga0saey0pr99ja0klhcfrwaw7l", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr15u9ve7fz8fqaf7r2u3p4f9ru4ze47pau5cxgcg", + "validator_addr": "cosmosaccaddr15u9ve7fz8fqaf7r2u3p4f9ru4ze47pau5cxgcg", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1h4q0xkdg30cl9vw0u8ejm0rs337dszy98gnd4a", + "validator_addr": "cosmosaccaddr1h4q0xkdg30cl9vw0u8ejm0rs337dszy98gnd4a", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr12zpkulxv7kn59sgf0tpf24qhqzxsvf3gamkl7g", + "validator_addr": "cosmosaccaddr12zpkulxv7kn59sgf0tpf24qhqzxsvf3gamkl7g", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1g6sc5t9t68vmcj3alk7dfqr54tvastpxac28k6", + "validator_addr": "cosmosaccaddr1g6sc5t9t68vmcj3alk7dfqr54tvastpxac28k6", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jck6gp4mqy33sk6a0fr5c8maq53hf4245v3mgg", + "validator_addr": "cosmosaccaddr1jck6gp4mqy33sk6a0fr5c8maq53hf4245v3mgg", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jh3grawl62juvx5p8fz5xsy9hpw8w3mngqafe4", + "validator_addr": "cosmosaccaddr1jh3grawl62juvx5p8fz5xsy9hpw8w3mngqafe4", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr17nlusdvrk34fq65jemy3umfjfwaxfzv4asyl60", + "validator_addr": "cosmosaccaddr17nlusdvrk34fq65jemy3umfjfwaxfzv4asyl60", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr18u2sqnuetfnkugp59e9pgyv2dpuvkkxmmsc7m8", + "validator_addr": "cosmosaccaddr18u2sqnuetfnkugp59e9pgyv2dpuvkkxmmsc7m8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1xdp4pls4ryvchq2n8v0cpmtwsprvyh8wvg563q", + "validator_addr": "cosmosaccaddr1xdp4pls4ryvchq2n8v0cpmtwsprvyh8wvg563q", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1pmntq5en2rgtr5rzr4e304efrve4lr43z32y5s", + "validator_addr": "cosmosaccaddr1pmntq5en2rgtr5rzr4e304efrve4lr43z32y5s", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr197p65z7ge5g55r68thvw4l5e43gnm70jhu5g75", + "validator_addr": "cosmosaccaddr197p65z7ge5g55r68thvw4l5e43gnm70jhu5g75", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr15klp8pypkd8htppzt6pguej57yyvp5p442khcu", + "validator_addr": "cosmosaccaddr15klp8pypkd8htppzt6pguej57yyvp5p442khcu", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jsvgewy7h62v3q43m0l347wlcwyhd4un5q8aa3", + "validator_addr": "cosmosaccaddr1jsvgewy7h62v3q43m0l347wlcwyhd4un5q8aa3", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr192yhf7f7f9304cy6cu6np3r8a3m9yqzqfeu9je", + "validator_addr": "cosmosaccaddr192yhf7f7f9304cy6cu6np3r8a3m9yqzqfeu9je", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1pag7xgpl8njlaksvp2ur5un3htg85vcrxcp5rs", + "validator_addr": "cosmosaccaddr1pag7xgpl8njlaksvp2ur5un3htg85vcrxcp5rs", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1p56gv748xfd74qek5e637vhcr6tyjd9ukqfecc", + "validator_addr": "cosmosaccaddr1p56gv748xfd74qek5e637vhcr6tyjd9ukqfecc", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1kwftgznylzerft2ksgkzvvfn5rfpy4nk2ye8na", + "validator_addr": "cosmosaccaddr1kwftgznylzerft2ksgkzvvfn5rfpy4nk2ye8na", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1rj74vaqm0xkxl5cjjam63mayh4x6at3m379ulv", + "validator_addr": "cosmosaccaddr1rj74vaqm0xkxl5cjjam63mayh4x6at3m379ulv", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1zpx36km7tk5cksyzxgvcp6g552p3uhwx84r53q", + "validator_addr": "cosmosaccaddr1zpx36km7tk5cksyzxgvcp6g552p3uhwx84r53q", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1gq0qecxs8xdaarrqxxazwavwxm7qz5jzs5anvt", + "validator_addr": "cosmosaccaddr1gq0qecxs8xdaarrqxxazwavwxm7qz5jzs5anvt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1cypmdvszcd9kd3jenmqxd03cpceql8rtuvxftp", + "validator_addr": "cosmosaccaddr1cypmdvszcd9kd3jenmqxd03cpceql8rtuvxftp", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1klslzz2n2nqvdaa6gwflwpka7gc60vvmh3k450", + "validator_addr": "cosmosaccaddr1klslzz2n2nqvdaa6gwflwpka7gc60vvmh3k450", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1qkllv8f6qakkw3hk9dqvytys090lk6twsyv8vf", + "validator_addr": "cosmosaccaddr1qkllv8f6qakkw3hk9dqvytys090lk6twsyv8vf", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1wf9nug554ugpw4t0wnlppxc6crl2n02qr8v3cd", + "validator_addr": "cosmosaccaddr1wf9nug554ugpw4t0wnlppxc6crl2n02qr8v3cd", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1t3afuz2kt99jz4pe5k4vjvkdmldn2x0lqzv83w", + "validator_addr": "cosmosaccaddr1t3afuz2kt99jz4pe5k4vjvkdmldn2x0lqzv83w", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr14zfph0h8rexsca6gg6jkwqup3sgl6mwj6eu4e6", + "validator_addr": "cosmosaccaddr14zfph0h8rexsca6gg6jkwqup3sgl6mwj6eu4e6", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1998p0xkdwvul952ydavnx88tmwkhlfa0vhrngj", + "validator_addr": "cosmosaccaddr1998p0xkdwvul952ydavnx88tmwkhlfa0vhrngj", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jw554408yw2h438q200jyuqgln76xh4ax0q4s0", + "validator_addr": "cosmosaccaddr1jw554408yw2h438q200jyuqgln76xh4ax0q4s0", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1mwmcpq5nhaen8zyy86mrrept2gmp0z5peapkhu", + "validator_addr": "cosmosaccaddr1mwmcpq5nhaen8zyy86mrrept2gmp0z5peapkhu", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1emaa7mwgpnpmc7yptm728ytp9quamsvu9rk4hp", + "validator_addr": "cosmosaccaddr1emaa7mwgpnpmc7yptm728ytp9quamsvu9rk4hp", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1tq0zwzyc88l2enrlhtzw0he8rm24xfd5s9aeer", + "validator_addr": "cosmosaccaddr1tq0zwzyc88l2enrlhtzw0he8rm24xfd5s9aeer", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1n9qsfp3x09rhhxptzrgmdlucqhg2ce95fm3fw8", + "validator_addr": "cosmosaccaddr1n9qsfp3x09rhhxptzrgmdlucqhg2ce95fm3fw8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1sqec04r28jfevkzfkdj4ql2qzr2zwrmg78qzj8", + "validator_addr": "cosmosaccaddr1sqec04r28jfevkzfkdj4ql2qzr2zwrmg78qzj8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1hfygmryre7r8m9pfqmc85y7kw7ejphmp59k2x8", + "validator_addr": "cosmosaccaddr1hfygmryre7r8m9pfqmc85y7kw7ejphmp59k2x8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jvh448tvk368k4md83ys7auledclek0vfpckz2", + "validator_addr": "cosmosaccaddr1jvh448tvk368k4md83ys7auledclek0vfpckz2", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1fhfcs5npydv8s96wrk9p5ychctslu92t4n5qd4", + "validator_addr": "cosmosaccaddr1fhfcs5npydv8s96wrk9p5ychctslu92t4n5qd4", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1eg88jsn38mrael6cqu7d2u8j6dynya7fv2p2tl", + "validator_addr": "cosmosaccaddr1eg88jsn38mrael6cqu7d2u8j6dynya7fv2p2tl", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1ukcuqpqw3eq505wkqd2adgn8ugewxr6jtakngs", + "validator_addr": "cosmosaccaddr1ukcuqpqw3eq505wkqd2adgn8ugewxr6jtakngs", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1na3wr7ujdp3qdej6l5y0k4znzrkaz77t2yjaqf", + "validator_addr": "cosmosaccaddr1na3wr7ujdp3qdej6l5y0k4znzrkaz77t2yjaqf", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1xupfqk73y7rmc6qdgv7rtjy8wsngvt2g2t59t3", + "validator_addr": "cosmosaccaddr1xupfqk73y7rmc6qdgv7rtjy8wsngvt2g2t59t3", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr17gvlvfpsfl6hffn5u2hahk22un4ynpykc44tat", + "validator_addr": "cosmosaccaddr17gvlvfpsfl6hffn5u2hahk22un4ynpykc44tat", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1yfseqtj5sjhzz2q2ym09jym4h4nc4yevae0jp2", + "validator_addr": "cosmosaccaddr1yfseqtj5sjhzz2q2ym09jym4h4nc4yevae0jp2", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1yd0rklq45zg89fywr89ccutlcwp9kehhh0z03k", + "validator_addr": "cosmosaccaddr1yd0rklq45zg89fywr89ccutlcwp9kehhh0z03k", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1arlpxs2ftf5hgetqxxkvd7mqdc28mmaqclyv4y", + "validator_addr": "cosmosaccaddr1arlpxs2ftf5hgetqxxkvd7mqdc28mmaqclyv4y", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr12ceualfg92x7du73mtcv0zya4nxvq3tl2m52uz", + "validator_addr": "cosmosaccaddr12ceualfg92x7du73mtcv0zya4nxvq3tl2m52uz", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1wxf0ck9h2e8p2wmecxtep6cefhexsp4kzc8fxy", + "validator_addr": "cosmosaccaddr1wxf0ck9h2e8p2wmecxtep6cefhexsp4kzc8fxy", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1pzlud6lg8w9phcwetc5aqp24eflshtv4xlxthf", + "validator_addr": "cosmosaccaddr1pzlud6lg8w9phcwetc5aqp24eflshtv4xlxthf", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr10qp8kqwm2cuql0hw2az5mngpmw5xm9ee32exlp", + "validator_addr": "cosmosaccaddr10qp8kqwm2cuql0hw2az5mngpmw5xm9ee32exlp", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr14dwnmm6n7tjdpeylpwsdsatdl0umm75dfkqcpa", + "validator_addr": "cosmosaccaddr14dwnmm6n7tjdpeylpwsdsatdl0umm75dfkqcpa", + "shares": "100", + "height": "0" + } + ] + } + } +} \ No newline at end of file diff --git a/cmd/gaia/testnets/gaia-7001/genesis.json b/cmd/gaia/testnets/gaia-7001/genesis.json new file mode 100644 index 000000000..48db5a4ed --- /dev/null +++ b/cmd/gaia/testnets/gaia-7001/genesis.json @@ -0,0 +1,5628 @@ +{ + "genesis_time": "2018-07-17T07:19:26.795692941Z", + "chain_id": "gaia-7001", + "consensus_params": { + "block_size_params": { + "max_bytes": "22020096", + "max_txs": "10000", + "max_gas": "-1" + }, + "tx_size_params": { + "max_bytes": "10240", + "max_gas": "-1" + }, + "block_gossip_params": { + "block_part_size_bytes": "65536" + }, + "evidence_params": { + "max_age": "100000" + } + }, + "validators": [ + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "MRCeBDANSjH6IsxO0z6tRe+xqoZvIGhdfl1t+SXGUpM=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "tOEqjO2t51PEgO9Tv0B7qM0yPmy1n5tMa3Beg0tp3ns=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "S8s6fdAQNQ3bN9SNVAsHB/j8uv1CM1roxeLesL+fh4g=" + }, + "power": "100", + "name": "validatorluigi001" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2JoNf1gavJ1d6XFIumO1Mki5GVMOcg58AioHksU3maE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "k3YLQYEN2QMP6XITRsBmgb+pNGhJ5Jbg0bzUW977kK0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "EREUrXXl1OJqLQag0P4h6vJ2H+8GEwyNAjgn1XEJU+I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "heNintBalqaJwCOjLb9+mX/cQ1ytMlV7ZroPIlkwZqo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nb2oRB12DlEQkFn7KSjSVkj5rDoSTsuBFa09+gmNJ7o=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bZSEBDNIOr0xJ/PxaAScJIyG6hqFtryBAMNwghAOTTU=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8K3clCjVU33BTIpUhdahGmu++WxHj4NUE9krCRkk++s=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RBuRRNEzA9RA1Wrdi9PPFQJ29/n/bqN9O2tQv9Gq248=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RwPRoiY5C0covekqbr3VrQwxWGHioUUIf2+TOq8LIC0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2qtEBT+Tc+SD2wJsdrVMHXrBKfvesxtmtSKDK5fXwA0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "gU5mmVLUSzn/fIEMgiiB4LARRoWlqjUGHr3A4SndWO8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "xlO2cnii42KisAn8OcstC/3XV5+I0FlcSbWuyy5MVA8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "q5ezDn4DcWFPWvMayPJI35nXr//jjF8fGHsuiHjpDcU=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PSqbJOwglJb1yrj3aWebBpXb2ujXcR037s1Cyj2HoW4=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "A6GzeXUM3vsXaDAEYMSDgSKkqn9AoUYjs8empH46MGY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "81fx09BivOOxeGL7QisF8aKRZjjcARpiSaCOX9mJfY8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UjTvuOew2EaooduJBiYmBWeF5ai0yFJG8uio5YXpJgg=" + }, + "power": "1", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "y7p9JSVZBnRxjAI9v5Pxl37hMtyuHf6B4Ghqzm6+ii0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oG8Q5o+SN4wqMLvlIfVgQPnsQzNEKeH0D/XGM8JlGrY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PxJbo5FKA6mXtgwclRQVNIjOCQK3Q7WkLQrvM9lYbGI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Q/UShqqVDOUSNYBrR1G/1X1s+YXEVXEJzeXmYvfYIr0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEWWDBwFW+/BpTCvNCLW7AP98hndBukzSbrwCb7sooo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "MZi48DJZOgRbE0ZStR66omv6Ez1Wkjvf2D/41q6Nd0I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Go9GXHI6SCQo2QKMxkAkgYLhfo3XrVjWLR2nE2AvYyk=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "P9RgE4RMQT/aHap2oICpwpgKeBAwxPUwuU9zIffKFNM=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "1+EkFYvTDmz4WQRbK+kznRHoaZVLludtkDrMuM6h++E=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEMDwUVoyJT7MNfOYKa25xU+Lnsz/ciH8rFUri4diLI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "lUMCRAeu47BsOhNvCQTQJQeB68z0/VaElC9j5gDt9y8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VnAr7ZIjvUXpWmzbkt8skHp0oRNc3V89SfvgaZydwfw=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u4GEbsk9IEF56V1am5dRtAWXz4iFQkO03FVL87BZXIM=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "BaaCxmYHKJ6obIzTCdRtjw1cc8d2mUJcMbLWCjf1aLo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "N3K5kDdfcKJurfaa6s2zfKgtYvz1Pagz7VWi9ZfX8yM=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "DsTbM0AgHfhSUKvOGkxudDOY3ojYT6bifhpelqHs8+s=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "j9be+ddLChInrFz6/820/uYh4WZBzlp61klyJBDy/ZY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Xi7nIgj4PqVXrpKLfJhcyxyVY1d3HRo72sKKPDmuU78=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2p8s/pRBZPjYWKKMlR7AOXypDzDmPo762iXlKpCwtco=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nsofE1FmSr1TiDR0gfnxfMDQ8o2pC+1NE7Oa9ceztSg=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WvmTBjsCN4ueGpEdySRwsRC5knBRLfY439/e4mG+YAY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "c0i2uKsYBv8fubnI60lZIWA1y4zw1bFgsq5MmWBHKak=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "AJR2ex094A1nJEWQsZYjALWsrSl1/huGZ37z2ZsMrpg=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "LSDd6ab46sHxwJSrg5YLpsPG2o6EcsZ3rDikpHzMNmI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dnFjFoTM9sP/RjQkXBK1YpYn3v5W+j0+g/OfUHS4xu8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "L0I4JoDfktbDWe0fCDL/nQlBPkF5mNgqamnM5JKJ1Uc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dPpZD53AbAMtW6sK+rTnXYe2GGGoSCNWsCtsmArLiIs=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VakMQSPBEuSC9Nwuv8WWhrZVUmH31bUR4+G6pJhkgE8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KI+kCESWD9cB8se4uxRrFVAI5viyNNUXUyMCc903yQc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8Qu1LFMt7qlZNmYQWrsXUA80aIx0rrFPPXs2s6NBdU8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WRsXnLz3gf8o4lYYeCZjAXgPU1cdmOOYPdy7aY63iIA=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R/3f7VruxWpu+2hiHlVpplTwoOou5kfQI1k/6/9H/y8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "HjSC7VkhKih6xMhudlqfaFE8ZZnP8RKJPv4iqR7RhcE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "cLM/HeUFsXlnYnYod695u6NBDS0trMq8sVRdABnF7uc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Epd2FDKZwDybzT38Z7WB0y2jiLn9/2OLzmY3Zu18l6I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ENAVynNXVpj/IdYx9kCPKaPs4bWSxRIHNlmS9QiDuZQ=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "j2w5BFOnZTrPN4SFpmQyfRomnUwbEbz1A+kr3z1icjo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "I2ILaY31gonxYQhlIk4PFUIN+Pk7+9dDTK1C/s+Vcb0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wRufybSUsTMnUeQkP74uJNDRKeM8jBLAS64T0BRfpY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2gOiMAdnIdND4cA75E7naQdyyIYDAdcjF3uO6OiEZlU=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2S8Y/vnLM3W+MYxNCxcUItIBfdZL/T4A8vRg89n0wLg=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kol7Gj60Fct4X8T1rHLJQ0z/b14UqqSae8h1e37rLL8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UBTju7UZfXLVPPYb1a8gPZ69BeCv2Fho7YVo2EUbxKc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "0HqB2x6x5HzeozpHatePECw07x1UcDdSz8kQGNznnA8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "H0SIA/BU6Xj8oT5bQkvLpEITN3CqFLbMeBcQ72NZrAE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Xnh8TL3BbIs9VTUenmnx6r2UAHpGCj3G9FV0mzc+mU4=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "X62YB48gO2SsWGnjYxH+aGfLQcjnP+T0hnErdWZ859g=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8pfpbIxBBiu88hpxS3CeRpv7kClEjl8SwVgckDNBGlE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UuxXNPImsE5Wp+utGfJywZBHuuGE4RmL0CArc6td82w=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Sl3NKLaYEgDaovqTkKVZh2ihRFbSmyVjC63wpv3ecdc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "SYjCs2AlY04xdfJGPD+gyO9NZ/zQ0Lfb/TLrjgOLS68=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oI1+4FoeI/knjsjDyCJtgZPaeyKON8tCTcM9QX0BHa8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nts1nu73aBgIdSaYye4coIuE1iBNeCuTZZC8LQ37ac8=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "NQX4yKpOztKrmgBhGIC5WOALOLOq3LTpbzsN4ZLXGec=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "BB4a/Xh5z+dkGCRlF+pSGC3iDOoDrFse/xzQAtmxMF4=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ydjx2ea+PVuChrny6X2dluJwyXta+BsNQRsgHXp8fXw=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "pPGLc4NhNaehdoV2antWuyr0GmBVEG1NhD9NiSRrTi0=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VBVHOLnWGptY26J0wqXoZI2Dnu96pccMb08zlsaxPCQ=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "aUViYC2znC55sleHfmsIN9hZ45SbYPbDcYA0gVzglsc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "riYrMXBFLavmf4MU/Ly7emDlciVqfB2/zxJoRsBUlfY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F2wCn9rKafNZsYZwoLGkSQIpr3rk86cjYyuhSjsjRaE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ugb3W6W7WL9Vc4KiSBWIaowBfpqJlzbfBSfrIqZW06A=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "gJDxhwAE6GeGCKQeVaNZ5is7+7MFHXtOG0UsnguKdoA=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "b9RSkt+WmMxVHQExQH0IMPpnR9zDAaJwz/mv1gtyRVY=" + }, + "power": "100", + "name": "smartpesa" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "569Sb+Wpo8VFqXRi4cQhlOD9kS8uBgmJ2rntY3GLtzY=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "SNwrT1B+A4g6TY7x0QzVrmVbcbl3cHXzXdD1tFHxLNo=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K4kLogLtZxqrYSqRVJfrFm9tUG+Tc3QWXWIewnAgI9w=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TwzOJ4GcN+ZTswub4R8488SrKeWXjY/PaqCF5neXJig=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JXW8iTiWG28E05ZFJIKvCOBwI2RrH/BOBL/MluTZ6+I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "A3zUdVcpj4H+HRZmRW5xixj4dzMgqD7be9GrdXcjdns=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7RhnD9OAZEJ4SV6V3LOZ1gGWubtX25457wCQq+AYYPI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "66j9af4xDJSblMLS+mFbp7d8TaFGu0FOo+0MwEYm2lE=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8DScmobjJQmkN44K2xiZkESM/O9MJK/DqlggnIPLpso=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "4JoJuRfaANhdM1x3AWRo1/Cj9DH3VA+fi1SynzknV+w=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "cCoFsZzKZ9SQZbHe4NueVObIezP6ts0tRTZ/aN96dig=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Zp4tk/ieqplJF8xMeef9HV8bYpHSY+3hJ2sH7PfCX1I=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "jj0Y/Fy8JSJR3g+PHU6Ce0ecYwHGUVJ4bVyR7WwcyLI=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "XQDVMXja3kFk5Jb47BsqJmzcDsM4lE9+r+f/J3O5Jms=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oL/QCr7LEOivyTqpGrmwVd1r+hYI2WB5+kSVzpDMxx4=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "eeImG09hOPo1W7j7lKepN/Lx6I9GGHqVBVEKmznxACc=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Abws3eXrUFAH8LeZJIcECakPL945TTmFsBlXONOUeII=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PEg/D54SoiKZ+pic0Z0RzZa/vfYNAAf4kzSc5UKXDYk=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "omAzuJps8KX3/iOC1LjwkMPMH3c6tjfLXwCNWXRBdWw=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nctikQSpoLRl5kV6KarIS761QvEOZCWw6nvc48xWhic=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "NrTRAbZnBqJpW9lRW6LxXxE7EV++y7WiIRV0ifRLovA=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "W0rP8sv4Ae/LZOqlBA9evvYARDt79WpFaI26jw/9Tfk=" + }, + "power": "100", + "name": "" + }, + { + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JdfJDlE46456GWp+AkSZhzlkUQI41f8aX7611oiWUSc=" + }, + "power": "100", + "name": "" + } + ], + "app_hash": "", + "app_state": { + "accounts": [ + { + "address": "cosmosaccaddr1c2dkaym4teqw6jl9jkq8eu8nf4wzn2lgf4ydyt", + "coins": [ + { + "denom": "faucetToken", + "amount": "10000000" + }, + { + "denom": "steak", + "amount": "10000000" + } + ] + }, + { + "address": "cosmosaccaddr157mg9hnhchfrqvk3enrvmvj29yhmlwf759xrgw", + "coins": [ + { + "denom": "jlandrewsToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr193vn0gk3nsmjkxwz78gce8e8mkmagmvulpg5jt", + "coins": [ + { + "denom": "jackToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr16rcrnftjyl2mctz78825ng8tx5ss22jf6jcp9l", + "coins": [ + { + "denom": "luigi001Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "coins": [ + { + "denom": "irisToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1syhzpjwx6vv3erv2myq7txrjhrp95hrhgcl242", + "coins": [ + { + "denom": "TropicalMongoXToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1uga4nuresex5u8ajjh2pcr39l0s9hszdkp843j", + "coins": [ + { + "denom": "wingmanToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr12wnqvqg79s9jqrul0lva3h72rfmewm7jprrcp5", + "coins": [ + { + "denom": "Nemea7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1lq0mvtgnwe8mp0096un0v8ztcsj8ad92t2cwrq", + "coins": [ + { + "denom": "infinite-castingToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr14e774gfzt5l9ka766ehfgu6n5hgy9f3sehzyv8", + "coins": [ + { + "denom": "cwgoesToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr164jntjfk9zs8x29mc27qansfwvjqs60gj6ermu", + "coins": [ + { + "denom": "lunamintToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1qkc3tghc3fms7eye7vtu0g0370epr4jkje2ne7", + "coins": [ + { + "denom": "skoed-validator-7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr18m09d56pg5p2660de4sjfezpd8ud6jfghndfnt", + "coins": [ + { + "denom": "starfishToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1k9pqxd8fxqlk52uwfxnlsexqj6xnmw5swhss45", + "coins": [ + { + "denom": "jjangg96Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr13q937pwglh24knwa2v23ml0kkpl9vwzjmfmj3q", + "coins": [ + { + "denom": "iaspirationiToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1xvt4e7xd0j9dwv2w83g50tpcltsl90h5dfnz6h", + "coins": [ + { + "denom": "21e800Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1nnyel6v0kx8zmfh9edmre3ua4dt9306cfxsxgd", + "coins": [ + { + "denom": "spptest1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr13cds7hwqyq9ja2hsv4sg7glq9arlk43gcl3cek", + "coins": [ + { + "denom": "windmillToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1y2z20pwqu5qpclque3pqkguruvheum2djtzjw3", + "coins": [ + { + "denom": "pbostrom/Mythos-1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1anuuffusmq5ng3rhlndhnacy45et30jqygtn67", + "coins": [ + { + "denom": "BarytToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1wk0t6na230vxhf6ddresw2c40k5y3ayrww0s2m", + "coins": [ + { + "denom": "P2P.ORG ValidatorToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr12pn4p6r5wjpsep9kn655ng7fh59yez7t0rahru", + "coins": [ + { + "denom": "oleary-labsToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr15rrxdflhq4744qt9m5ysstq3zpykhacf908eez", + "coins": [ + { + "denom": "wancloudsentryToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr17rqsh3fw6rehnwzarz90jkqtt5fupmh50gy556", + "coins": [ + { + "denom": "space4Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1g4q87u438qdh2c8ue4dzdr9ldrqrs77ptm9c70", + "coins": [ + { + "denom": "colony-finderToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1dq7jt3pn7mrce2twac907jue7hjd0p0rgt3qnq", + "coins": [ + { + "denom": "sparkpool-validator-02Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1gg6natrtt5lf02xwr06ujcczvavl54wgljuaut", + "coins": [ + { + "denom": "mining-shipToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1zds6r7jyxyxcpf05r5yyyy3u8q2rvj9kkc6vcv", + "coins": [ + { + "denom": "StakedToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1l0qw5znfd6e8pshpjvyghjjzyr4l6ymla080lt", + "coins": [ + { + "denom": "nyliraToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1rxxcpkmsngd0azkh3n2467m66ls4rwq52yuv27", + "coins": [ + { + "denom": "liangpingToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jsch8k385shvse6j5dfx20483qym5uhq76xpjf", + "coins": [ + { + "denom": "SVNode01Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr19uhnhct0p45ek6qxp3cjjrjtz4pacwcsgzvpuj", + "coins": [ + { + "denom": "vhxnode1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1gghhdtx2sceafvgg8dry5sqrvc8srxghm4qqsy", + "coins": [ + { + "denom": "gregToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1cyayv35tv47t829mel6jm0vqzmrdhf3jq87tqg", + "coins": [ + { + "denom": "bucksterToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr126ayk3hse5zvk9gxfmpsjr9565ef72pv9g20yx", + "coins": [ + { + "denom": "grass-fedToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1fskmzyt2hr8usr3s65dq3rfur3fy6g2hjp23tm", + "coins": [ + { + "denom": "ATEAM1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1lhjta6nt0lewj05m8444tuyhalkrffgpm7njpp", + "coins": [ + { + "denom": "BFF-Validator-7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1pm0gx3lk46gf8vyj5my9w5tk06cuq66ll77ugj", + "coins": [ + { + "denom": "redbricks7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr15w2rengajq9js8hu57kjw88dly5vy7gsqedn0n", + "coins": [ + { + "denom": "kittyfishToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr10505nl7yftsme9jk2glhjhta7w0475uva87paj", + "coins": [ + { + "denom": "ForboleToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr18z3pnjgdtt337z8g5drfts7r3fm6n9a0896h0r", + "coins": [ + { + "denom": "coinoneToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1vmdgku2g0n5p2ef995r4fugu99ze9e5me9kh4d", + "coins": [ + { + "denom": "bmen-companyToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1j2frwt2vq2xer7f060wpsu3y3f63uys2w9lx2e", + "coins": [ + { + "denom": "2400bpsToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1whxd48da3r56n8eecym8zg0c6xmf35fn2myart", + "coins": [ + { + "denom": "devToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jkmn6asju47zuuzrf8rjt7sllaj5cx4kueyv8p", + "coins": [ + { + "denom": "w1m3lToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr120skmenn2a0ra8y6zassrxvnfc5rlme8rqarvs", + "coins": [ + { + "denom": "aetherToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jtt6al0acr8h0uvq489rt9zx9lnau7rlcu30pt", + "coins": [ + { + "denom": "JColToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr135dz5hdtvk3z8vl0zyy5l223kjanv0gudu4905", + "coins": [ + { + "denom": "SaiKrishnaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr182ujqw3r8p5fffjqkf0rxzj29pg5q96nxd2khq", + "coins": [ + { + "denom": "UmbrellaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1qrc3ed8tnz6vc24ftmnht8efs5ufhjmrjkds4x", + "coins": [ + { + "denom": "@MarceldeveloperToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1swydkj5u3jd4jwe7uygu4479zgs4qg6v4ds3c9", + "coins": [ + { + "denom": "stereo-watcherToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1l9jt8xgejkcm4sulhwj8c83ftprz5p9lyq4605", + "coins": [ + { + "denom": "cosmosToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr128ty3kzhcepjacu4q0xjgq60qa3zz8na3jl793", + "coins": [ + { + "denom": "stake.zoneToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1e3qm8jd9357zhdemwnaafmf0wy3f4yqmd307c2", + "coins": [ + { + "denom": "firstblock.ioToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr18wfz5vj26y079surms5sm6avjtezzspfvqs6g4", + "coins": [ + { + "denom": "shensiToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1vrc7zpg5teawwuzkfh6t7c6sy353sukhlarxpa", + "coins": [ + { + "denom": "figmentToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1umaajfgap5ef6yxvk5706kwk8j08l7wh6h9fp2", + "coins": [ + { + "denom": "iqlusionToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1670l5up6e5fddvlc027yvvlvedrzyx0mmsl622", + "coins": [ + { + "denom": "cosmosthecatToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1wx33m9dvglryga0saey0pr99ja0klhcfrwaw7l", + "coins": [ + { + "denom": "snaticoToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr15u9ve7fz8fqaf7r2u3p4f9ru4ze47pau5cxgcg", + "coins": [ + { + "denom": "mpaxeNodeToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1h4q0xkdg30cl9vw0u8ejm0rs337dszy98gnd4a", + "coins": [ + { + "denom": "joltz-secureware.ioToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr12zpkulxv7kn59sgf0tpf24qhqzxsvf3gamkl7g", + "coins": [ + { + "denom": "mwnode1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1g6sc5t9t68vmcj3alk7dfqr54tvastpxac28k6", + "coins": [ + { + "denom": "VNode01Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jck6gp4mqy33sk6a0fr5c8maq53hf4245v3mgg", + "coins": [ + { + "denom": "7768Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jh3grawl62juvx5p8fz5xsy9hpw8w3mngqafe4", + "coins": [ + { + "denom": "block3.communityToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr17nlusdvrk34fq65jemy3umfjfwaxfzv4asyl60", + "coins": [ + { + "denom": "4455Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr18u2sqnuetfnkugp59e9pgyv2dpuvkkxmmsc7m8", + "coins": [ + { + "denom": "dooroomeeToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1xdp4pls4ryvchq2n8v0cpmtwsprvyh8wvg563q", + "coins": [ + { + "denom": "sheiudToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1pmntq5en2rgtr5rzr4e304efrve4lr43z32y5s", + "coins": [ + { + "denom": "Staking Facilities ValidatorToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr197p65z7ge5g55r68thvw4l5e43gnm70jhu5g75", + "coins": [ + { + "denom": "ritter-rammToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr15klp8pypkd8htppzt6pguej57yyvp5p442khcu", + "coins": [ + { + "denom": "meteor-discoverToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jsvgewy7h62v3q43m0l347wlcwyhd4un5q8aa3", + "coins": [ + { + "denom": "COSMODROMEToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr192yhf7f7f9304cy6cu6np3r8a3m9yqzqfeu9je", + "coins": [ + { + "denom": "broadleaf7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1pag7xgpl8njlaksvp2ur5un3htg85vcrxcp5rs", + "coins": [ + { + "denom": "ravenclubToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1p56gv748xfd74qek5e637vhcr6tyjd9ukqfecc", + "coins": [ + { + "denom": "dokia-capitalToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1kwftgznylzerft2ksgkzvvfn5rfpy4nk2ye8na", + "coins": [ + { + "denom": "chainflow08Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1rj74vaqm0xkxl5cjjam63mayh4x6at3m379ulv", + "coins": [ + { + "denom": "MiaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1zpx36km7tk5cksyzxgvcp6g552p3uhwx84r53q", + "coins": [ + { + "denom": "sikka.techToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1gq0qecxs8xdaarrqxxazwavwxm7qz5jzs5anvt", + "coins": [ + { + "denom": "certus.oneToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1cypmdvszcd9kd3jenmqxd03cpceql8rtuvxftp", + "coins": [ + { + "denom": "Gold2Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1klslzz2n2nqvdaa6gwflwpka7gc60vvmh3k450", + "coins": [ + { + "denom": "idoor7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1qkllv8f6qakkw3hk9dqvytys090lk6twsyv8vf", + "coins": [ + { + "denom": "ironforkToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1wf9nug554ugpw4t0wnlppxc6crl2n02qr8v3cd", + "coins": [ + { + "denom": "sunny-mintorToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1t3afuz2kt99jz4pe5k4vjvkdmldn2x0lqzv83w", + "coins": [ + { + "denom": "BlissDynamicsToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr14zfph0h8rexsca6gg6jkwqup3sgl6mwj6eu4e6", + "coins": [ + { + "denom": "smartpesaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1998p0xkdwvul952ydavnx88tmwkhlfa0vhrngj", + "coins": [ + { + "denom": "ianstreamToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jw554408yw2h438q200jyuqgln76xh4ax0q4s0", + "coins": [ + { + "denom": "TruNodeToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1mwmcpq5nhaen8zyy86mrrept2gmp0z5peapkhu", + "coins": [ + { + "denom": "abcinToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1emaa7mwgpnpmc7yptm728ytp9quamsvu9rk4hp", + "coins": [ + { + "denom": "kochacolajToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1tq0zwzyc88l2enrlhtzw0he8rm24xfd5s9aeer", + "coins": [ + { + "denom": "D2R-validator-7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1n9qsfp3x09rhhxptzrgmdlucqhg2ce95fm3fw8", + "coins": [ + { + "denom": "juelianshanaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1sqec04r28jfevkzfkdj4ql2qzr2zwrmg78qzj8", + "coins": [ + { + "denom": "lambda-mixerToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1hfygmryre7r8m9pfqmc85y7kw7ejphmp59k2x8", + "coins": [ + { + "denom": "bkcmToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1jvh448tvk368k4md83ys7auledclek0vfpckz2", + "coins": [ + { + "denom": "ramihanToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1fhfcs5npydv8s96wrk9p5ychctslu92t4n5qd4", + "coins": [ + { + "denom": "davinchcodeToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1eg88jsn38mrael6cqu7d2u8j6dynya7fv2p2tl", + "coins": [ + { + "denom": "DoriToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1ukcuqpqw3eq505wkqd2adgn8ugewxr6jtakngs", + "coins": [ + { + "denom": "daefreecaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1na3wr7ujdp3qdej6l5y0k4znzrkaz77t2yjaqf", + "coins": [ + { + "denom": "nuevaxToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1xupfqk73y7rmc6qdgv7rtjy8wsngvt2g2t59t3", + "coins": [ + { + "denom": "inschain_validatorToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr17gvlvfpsfl6hffn5u2hahk22un4ynpykc44tat", + "coins": [ + { + "denom": "gruberxToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1yfseqtj5sjhzz2q2ym09jym4h4nc4yevae0jp2", + "coins": [ + { + "denom": "meleatrustToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1yd0rklq45zg89fywr89ccutlcwp9kehhh0z03k", + "coins": [ + { + "denom": "Cosmodator-7000Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1arlpxs2ftf5hgetqxxkvd7mqdc28mmaqclyv4y", + "coins": [ + { + "denom": "bharvestToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr12ceualfg92x7du73mtcv0zya4nxvq3tl2m52uz", + "coins": [ + { + "denom": "cryptiumToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1wxf0ck9h2e8p2wmecxtep6cefhexsp4kzc8fxy", + "coins": [ + { + "denom": "finalityToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr1pzlud6lg8w9phcwetc5aqp24eflshtv4xlxthf", + "coins": [ + { + "denom": "coscloudToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr10qp8kqwm2cuql0hw2az5mngpmw5xm9ee32exlp", + "coins": [ + { + "denom": "xiaochinaToken", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + }, + { + "address": "cosmosaccaddr14dwnmm6n7tjdpeylpwsdsatdl0umm75dfkqcpa", + "coins": [ + { + "denom": "gazua1Token", + "amount": "1000" + }, + { + "denom": "steak", + "amount": "50" + } + ] + } + ], + "stake": { + "pool": { + "loose_tokens": "16050", + "bonded_tokens": "0", + "inflation_last_time": "0", + "inflation": "7/100", + "date_last_commission_reset": "0", + "prev_bonded_shares": "0" + }, + "params": { + "inflation_rate_change": "13/100", + "inflation_max": "1/5", + "inflation_min": "7/100", + "goal_bonded": "67/100", + "unbonding_time": "86400", + "max_validators": 128, + "bond_denom": "steak" + }, + "validators": [ + { + "owner": "cosmosaccaddr157mg9hnhchfrqvk3enrvmvj29yhmlwf759xrgw", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "MRCeBDANSjH6IsxO0z6tRe+xqoZvIGhdfl1t+SXGUpM=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "jlandrews", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr193vn0gk3nsmjkxwz78gce8e8mkmagmvulpg5jt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "tOEqjO2t51PEgO9Tv0B7qM0yPmy1n5tMa3Beg0tp3ns=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "jack", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr16rcrnftjyl2mctz78825ng8tx5ss22jf6jcp9l", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "S8s6fdAQNQ3bN9SNVAsHB/j8uv1CM1roxeLesL+fh4g=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "luigi001", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2JoNf1gavJ1d6XFIumO1Mki5GVMOcg58AioHksU3maE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "iris", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1syhzpjwx6vv3erv2myq7txrjhrp95hrhgcl242", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "k3YLQYEN2QMP6XITRsBmgb+pNGhJ5Jbg0bzUW977kK0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "TropicalMongoX", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1uga4nuresex5u8ajjh2pcr39l0s9hszdkp843j", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "EREUrXXl1OJqLQag0P4h6vJ2H+8GEwyNAjgn1XEJU+I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "wingman", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr12wnqvqg79s9jqrul0lva3h72rfmewm7jprrcp5", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "heNintBalqaJwCOjLb9+mX/cQ1ytMlV7ZroPIlkwZqo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Nemea7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1lq0mvtgnwe8mp0096un0v8ztcsj8ad92t2cwrq", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nb2oRB12DlEQkFn7KSjSVkj5rDoSTsuBFa09+gmNJ7o=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "infinite-casting", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr14e774gfzt5l9ka766ehfgu6n5hgy9f3sehzyv8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "bZSEBDNIOr0xJ/PxaAScJIyG6hqFtryBAMNwghAOTTU=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "cwgoes", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr164jntjfk9zs8x29mc27qansfwvjqs60gj6ermu", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8K3clCjVU33BTIpUhdahGmu++WxHj4NUE9krCRkk++s=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "lunamint", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1qkc3tghc3fms7eye7vtu0g0370epr4jkje2ne7", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RBuRRNEzA9RA1Wrdi9PPFQJ29/n/bqN9O2tQv9Gq248=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "skoed-validator-7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr18m09d56pg5p2660de4sjfezpd8ud6jfghndfnt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "RwPRoiY5C0covekqbr3VrQwxWGHioUUIf2+TOq8LIC0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "starfish", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1k9pqxd8fxqlk52uwfxnlsexqj6xnmw5swhss45", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2qtEBT+Tc+SD2wJsdrVMHXrBKfvesxtmtSKDK5fXwA0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "jjangg96", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr13q937pwglh24knwa2v23ml0kkpl9vwzjmfmj3q", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "gU5mmVLUSzn/fIEMgiiB4LARRoWlqjUGHr3A4SndWO8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "iaspirationi", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1xvt4e7xd0j9dwv2w83g50tpcltsl90h5dfnz6h", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "xlO2cnii42KisAn8OcstC/3XV5+I0FlcSbWuyy5MVA8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "21e800", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1nnyel6v0kx8zmfh9edmre3ua4dt9306cfxsxgd", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "q5ezDn4DcWFPWvMayPJI35nXr//jjF8fGHsuiHjpDcU=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "spptest1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr13cds7hwqyq9ja2hsv4sg7glq9arlk43gcl3cek", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PSqbJOwglJb1yrj3aWebBpXb2ujXcR037s1Cyj2HoW4=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "windmill", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1y2z20pwqu5qpclque3pqkguruvheum2djtzjw3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "A6GzeXUM3vsXaDAEYMSDgSKkqn9AoUYjs8empH46MGY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "pbostrom/Mythos-1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1anuuffusmq5ng3rhlndhnacy45et30jqygtn67", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "81fx09BivOOxeGL7QisF8aKRZjjcARpiSaCOX9mJfY8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Baryt", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1wk0t6na230vxhf6ddresw2c40k5y3ayrww0s2m", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UjTvuOew2EaooduJBiYmBWeF5ai0yFJG8uio5YXpJgg=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "P2P.ORG Validator", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr12pn4p6r5wjpsep9kn655ng7fh59yez7t0rahru", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "y7p9JSVZBnRxjAI9v5Pxl37hMtyuHf6B4Ghqzm6+ii0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "oleary-labs", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr15rrxdflhq4744qt9m5ysstq3zpykhacf908eez", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oG8Q5o+SN4wqMLvlIfVgQPnsQzNEKeH0D/XGM8JlGrY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "wancloudsentry", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr17rqsh3fw6rehnwzarz90jkqtt5fupmh50gy556", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PxJbo5FKA6mXtgwclRQVNIjOCQK3Q7WkLQrvM9lYbGI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "space4", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1g4q87u438qdh2c8ue4dzdr9ldrqrs77ptm9c70", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Q/UShqqVDOUSNYBrR1G/1X1s+YXEVXEJzeXmYvfYIr0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "colony-finder", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1dq7jt3pn7mrce2twac907jue7hjd0p0rgt3qnq", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "uEWWDBwFW+/BpTCvNCLW7AP98hndBukzSbrwCb7sooo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "sparkpool-validator-02", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1gg6natrtt5lf02xwr06ujcczvavl54wgljuaut", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "MZi48DJZOgRbE0ZStR66omv6Ez1Wkjvf2D/41q6Nd0I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "mining-ship", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1zds6r7jyxyxcpf05r5yyyy3u8q2rvj9kkc6vcv", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Go9GXHI6SCQo2QKMxkAkgYLhfo3XrVjWLR2nE2AvYyk=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Staked", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1l0qw5znfd6e8pshpjvyghjjzyr4l6ymla080lt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "P9RgE4RMQT/aHap2oICpwpgKeBAwxPUwuU9zIffKFNM=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "nylira", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1rxxcpkmsngd0azkh3n2467m66ls4rwq52yuv27", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "1+EkFYvTDmz4WQRbK+kznRHoaZVLludtkDrMuM6h++E=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "liangping", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jsch8k385shvse6j5dfx20483qym5uhq76xpjf", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "QEMDwUVoyJT7MNfOYKa25xU+Lnsz/ciH8rFUri4diLI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "SVNode01", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr19uhnhct0p45ek6qxp3cjjrjtz4pacwcsgzvpuj", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "lUMCRAeu47BsOhNvCQTQJQeB68z0/VaElC9j5gDt9y8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "vhxnode1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1gghhdtx2sceafvgg8dry5sqrvc8srxghm4qqsy", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VnAr7ZIjvUXpWmzbkt8skHp0oRNc3V89SfvgaZydwfw=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "greg", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1cyayv35tv47t829mel6jm0vqzmrdhf3jq87tqg", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "u4GEbsk9IEF56V1am5dRtAWXz4iFQkO03FVL87BZXIM=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "buckster", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr126ayk3hse5zvk9gxfmpsjr9565ef72pv9g20yx", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "BaaCxmYHKJ6obIzTCdRtjw1cc8d2mUJcMbLWCjf1aLo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "grass-fed", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1fskmzyt2hr8usr3s65dq3rfur3fy6g2hjp23tm", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "N3K5kDdfcKJurfaa6s2zfKgtYvz1Pagz7VWi9ZfX8yM=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ATEAM1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1lhjta6nt0lewj05m8444tuyhalkrffgpm7njpp", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "DsTbM0AgHfhSUKvOGkxudDOY3ojYT6bifhpelqHs8+s=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "BFF-Validator-7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1pm0gx3lk46gf8vyj5my9w5tk06cuq66ll77ugj", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "j9be+ddLChInrFz6/820/uYh4WZBzlp61klyJBDy/ZY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "redbricks7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr15w2rengajq9js8hu57kjw88dly5vy7gsqedn0n", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Xi7nIgj4PqVXrpKLfJhcyxyVY1d3HRo72sKKPDmuU78=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "kittyfish", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr10505nl7yftsme9jk2glhjhta7w0475uva87paj", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2p8s/pRBZPjYWKKMlR7AOXypDzDmPo762iXlKpCwtco=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Forbole", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr18z3pnjgdtt337z8g5drfts7r3fm6n9a0896h0r", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nsofE1FmSr1TiDR0gfnxfMDQ8o2pC+1NE7Oa9ceztSg=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "coinone", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1vmdgku2g0n5p2ef995r4fugu99ze9e5me9kh4d", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WvmTBjsCN4ueGpEdySRwsRC5knBRLfY439/e4mG+YAY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "bmen-company", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1j2frwt2vq2xer7f060wpsu3y3f63uys2w9lx2e", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "c0i2uKsYBv8fubnI60lZIWA1y4zw1bFgsq5MmWBHKak=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "2400bps", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1whxd48da3r56n8eecym8zg0c6xmf35fn2myart", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "AJR2ex094A1nJEWQsZYjALWsrSl1/huGZ37z2ZsMrpg=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "dev", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jkmn6asju47zuuzrf8rjt7sllaj5cx4kueyv8p", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "LSDd6ab46sHxwJSrg5YLpsPG2o6EcsZ3rDikpHzMNmI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "w1m3l", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr120skmenn2a0ra8y6zassrxvnfc5rlme8rqarvs", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dnFjFoTM9sP/RjQkXBK1YpYn3v5W+j0+g/OfUHS4xu8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "aether", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jtt6al0acr8h0uvq489rt9zx9lnau7rlcu30pt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "L0I4JoDfktbDWe0fCDL/nQlBPkF5mNgqamnM5JKJ1Uc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "JCol", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr135dz5hdtvk3z8vl0zyy5l223kjanv0gudu4905", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "dPpZD53AbAMtW6sK+rTnXYe2GGGoSCNWsCtsmArLiIs=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "SaiKrishna", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr182ujqw3r8p5fffjqkf0rxzj29pg5q96nxd2khq", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VakMQSPBEuSC9Nwuv8WWhrZVUmH31bUR4+G6pJhkgE8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Umbrella", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1qrc3ed8tnz6vc24ftmnht8efs5ufhjmrjkds4x", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "KI+kCESWD9cB8se4uxRrFVAI5viyNNUXUyMCc903yQc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "@Marceldeveloper", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1swydkj5u3jd4jwe7uygu4479zgs4qg6v4ds3c9", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8Qu1LFMt7qlZNmYQWrsXUA80aIx0rrFPPXs2s6NBdU8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "stereo-watcher", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1l9jt8xgejkcm4sulhwj8c83ftprz5p9lyq4605", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "WRsXnLz3gf8o4lYYeCZjAXgPU1cdmOOYPdy7aY63iIA=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "cosmos", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr128ty3kzhcepjacu4q0xjgq60qa3zz8na3jl793", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "R/3f7VruxWpu+2hiHlVpplTwoOou5kfQI1k/6/9H/y8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "stake.zone", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1e3qm8jd9357zhdemwnaafmf0wy3f4yqmd307c2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "HjSC7VkhKih6xMhudlqfaFE8ZZnP8RKJPv4iqR7RhcE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "firstblock.io", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr18wfz5vj26y079surms5sm6avjtezzspfvqs6g4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "cLM/HeUFsXlnYnYod695u6NBDS0trMq8sVRdABnF7uc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "shensi", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1vrc7zpg5teawwuzkfh6t7c6sy353sukhlarxpa", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Epd2FDKZwDybzT38Z7WB0y2jiLn9/2OLzmY3Zu18l6I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "figment", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1umaajfgap5ef6yxvk5706kwk8j08l7wh6h9fp2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ENAVynNXVpj/IdYx9kCPKaPs4bWSxRIHNlmS9QiDuZQ=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "iqlusion", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1670l5up6e5fddvlc027yvvlvedrzyx0mmsl622", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "j2w5BFOnZTrPN4SFpmQyfRomnUwbEbz1A+kr3z1icjo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "cosmosthecat", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1wx33m9dvglryga0saey0pr99ja0klhcfrwaw7l", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "I2ILaY31gonxYQhlIk4PFUIN+Pk7+9dDTK1C/s+Vcb0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "snatico", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr15u9ve7fz8fqaf7r2u3p4f9ru4ze47pau5cxgcg", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "3wRufybSUsTMnUeQkP74uJNDRKeM8jBLAS64T0BRfpY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "mpaxeNode", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1h4q0xkdg30cl9vw0u8ejm0rs337dszy98gnd4a", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2gOiMAdnIdND4cA75E7naQdyyIYDAdcjF3uO6OiEZlU=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "joltz-secureware.io", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr12zpkulxv7kn59sgf0tpf24qhqzxsvf3gamkl7g", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "2S8Y/vnLM3W+MYxNCxcUItIBfdZL/T4A8vRg89n0wLg=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "mwnode1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1g6sc5t9t68vmcj3alk7dfqr54tvastpxac28k6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "kol7Gj60Fct4X8T1rHLJQ0z/b14UqqSae8h1e37rLL8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "VNode01", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jck6gp4mqy33sk6a0fr5c8maq53hf4245v3mgg", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UBTju7UZfXLVPPYb1a8gPZ69BeCv2Fho7YVo2EUbxKc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "7768", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jh3grawl62juvx5p8fz5xsy9hpw8w3mngqafe4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "0HqB2x6x5HzeozpHatePECw07x1UcDdSz8kQGNznnA8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "block3.community", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr17nlusdvrk34fq65jemy3umfjfwaxfzv4asyl60", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "H0SIA/BU6Xj8oT5bQkvLpEITN3CqFLbMeBcQ72NZrAE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "4455", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr18u2sqnuetfnkugp59e9pgyv2dpuvkkxmmsc7m8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Xnh8TL3BbIs9VTUenmnx6r2UAHpGCj3G9FV0mzc+mU4=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "dooroomee", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1xdp4pls4ryvchq2n8v0cpmtwsprvyh8wvg563q", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "X62YB48gO2SsWGnjYxH+aGfLQcjnP+T0hnErdWZ859g=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "sheiud", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1pmntq5en2rgtr5rzr4e304efrve4lr43z32y5s", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8pfpbIxBBiu88hpxS3CeRpv7kClEjl8SwVgckDNBGlE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Staking Facilities Validator", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr197p65z7ge5g55r68thvw4l5e43gnm70jhu5g75", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "UuxXNPImsE5Wp+utGfJywZBHuuGE4RmL0CArc6td82w=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ritter-ramm", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr15klp8pypkd8htppzt6pguej57yyvp5p442khcu", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Sl3NKLaYEgDaovqTkKVZh2ihRFbSmyVjC63wpv3ecdc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "meteor-discover", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jsvgewy7h62v3q43m0l347wlcwyhd4un5q8aa3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "SYjCs2AlY04xdfJGPD+gyO9NZ/zQ0Lfb/TLrjgOLS68=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "COSMODROME", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr192yhf7f7f9304cy6cu6np3r8a3m9yqzqfeu9je", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oI1+4FoeI/knjsjDyCJtgZPaeyKON8tCTcM9QX0BHa8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "broadleaf7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1pag7xgpl8njlaksvp2ur5un3htg85vcrxcp5rs", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nts1nu73aBgIdSaYye4coIuE1iBNeCuTZZC8LQ37ac8=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ravenclub", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1p56gv748xfd74qek5e637vhcr6tyjd9ukqfecc", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "NQX4yKpOztKrmgBhGIC5WOALOLOq3LTpbzsN4ZLXGec=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "dokia-capital", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1kwftgznylzerft2ksgkzvvfn5rfpy4nk2ye8na", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "BB4a/Xh5z+dkGCRlF+pSGC3iDOoDrFse/xzQAtmxMF4=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "chainflow08", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1rj74vaqm0xkxl5cjjam63mayh4x6at3m379ulv", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ydjx2ea+PVuChrny6X2dluJwyXta+BsNQRsgHXp8fXw=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Mia", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1zpx36km7tk5cksyzxgvcp6g552p3uhwx84r53q", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "pPGLc4NhNaehdoV2antWuyr0GmBVEG1NhD9NiSRrTi0=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "sikka.tech", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1gq0qecxs8xdaarrqxxazwavwxm7qz5jzs5anvt", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "VBVHOLnWGptY26J0wqXoZI2Dnu96pccMb08zlsaxPCQ=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "certus.one", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1cypmdvszcd9kd3jenmqxd03cpceql8rtuvxftp", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "aUViYC2znC55sleHfmsIN9hZ45SbYPbDcYA0gVzglsc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Gold2", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1klslzz2n2nqvdaa6gwflwpka7gc60vvmh3k450", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "riYrMXBFLavmf4MU/Ly7emDlciVqfB2/zxJoRsBUlfY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "idoor7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1qkllv8f6qakkw3hk9dqvytys090lk6twsyv8vf", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "F2wCn9rKafNZsYZwoLGkSQIpr3rk86cjYyuhSjsjRaE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ironfork", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1wf9nug554ugpw4t0wnlppxc6crl2n02qr8v3cd", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "ugb3W6W7WL9Vc4KiSBWIaowBfpqJlzbfBSfrIqZW06A=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "sunny-mintor", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1t3afuz2kt99jz4pe5k4vjvkdmldn2x0lqzv83w", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "gJDxhwAE6GeGCKQeVaNZ5is7+7MFHXtOG0UsnguKdoA=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "BlissDynamics", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr14zfph0h8rexsca6gg6jkwqup3sgl6mwj6eu4e6", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "b9RSkt+WmMxVHQExQH0IMPpnR9zDAaJwz/mv1gtyRVY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "smartpesa", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1998p0xkdwvul952ydavnx88tmwkhlfa0vhrngj", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "569Sb+Wpo8VFqXRi4cQhlOD9kS8uBgmJ2rntY3GLtzY=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ianstream", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jw554408yw2h438q200jyuqgln76xh4ax0q4s0", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "SNwrT1B+A4g6TY7x0QzVrmVbcbl3cHXzXdD1tFHxLNo=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "TruNode", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1mwmcpq5nhaen8zyy86mrrept2gmp0z5peapkhu", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "K4kLogLtZxqrYSqRVJfrFm9tUG+Tc3QWXWIewnAgI9w=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "abcin", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1emaa7mwgpnpmc7yptm728ytp9quamsvu9rk4hp", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "TwzOJ4GcN+ZTswub4R8488SrKeWXjY/PaqCF5neXJig=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "kochacolaj", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1tq0zwzyc88l2enrlhtzw0he8rm24xfd5s9aeer", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JXW8iTiWG28E05ZFJIKvCOBwI2RrH/BOBL/MluTZ6+I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "D2R-validator-7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1n9qsfp3x09rhhxptzrgmdlucqhg2ce95fm3fw8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "A3zUdVcpj4H+HRZmRW5xixj4dzMgqD7be9GrdXcjdns=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "juelianshana", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1sqec04r28jfevkzfkdj4ql2qzr2zwrmg78qzj8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "7RhnD9OAZEJ4SV6V3LOZ1gGWubtX25457wCQq+AYYPI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "lambda-mixer", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1hfygmryre7r8m9pfqmc85y7kw7ejphmp59k2x8", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "66j9af4xDJSblMLS+mFbp7d8TaFGu0FOo+0MwEYm2lE=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "bkcm", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1jvh448tvk368k4md83ys7auledclek0vfpckz2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "8DScmobjJQmkN44K2xiZkESM/O9MJK/DqlggnIPLpso=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "ramihan", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1fhfcs5npydv8s96wrk9p5ychctslu92t4n5qd4", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "4JoJuRfaANhdM1x3AWRo1/Cj9DH3VA+fi1SynzknV+w=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "davinchcode", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1eg88jsn38mrael6cqu7d2u8j6dynya7fv2p2tl", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "cCoFsZzKZ9SQZbHe4NueVObIezP6ts0tRTZ/aN96dig=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Dori", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1ukcuqpqw3eq505wkqd2adgn8ugewxr6jtakngs", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Zp4tk/ieqplJF8xMeef9HV8bYpHSY+3hJ2sH7PfCX1I=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "daefreeca", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1na3wr7ujdp3qdej6l5y0k4znzrkaz77t2yjaqf", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "jj0Y/Fy8JSJR3g+PHU6Ce0ecYwHGUVJ4bVyR7WwcyLI=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "nuevax", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1xupfqk73y7rmc6qdgv7rtjy8wsngvt2g2t59t3", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "XQDVMXja3kFk5Jb47BsqJmzcDsM4lE9+r+f/J3O5Jms=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "inschain_validator", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr17gvlvfpsfl6hffn5u2hahk22un4ynpykc44tat", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "oL/QCr7LEOivyTqpGrmwVd1r+hYI2WB5+kSVzpDMxx4=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "gruberx", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1yfseqtj5sjhzz2q2ym09jym4h4nc4yevae0jp2", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "eeImG09hOPo1W7j7lKepN/Lx6I9GGHqVBVEKmznxACc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "meleatrust", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1yd0rklq45zg89fywr89ccutlcwp9kehhh0z03k", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "Abws3eXrUFAH8LeZJIcECakPL945TTmFsBlXONOUeII=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Cosmodator-7000", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1arlpxs2ftf5hgetqxxkvd7mqdc28mmaqclyv4y", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "PEg/D54SoiKZ+pic0Z0RzZa/vfYNAAf4kzSc5UKXDYk=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "bharvest", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr12ceualfg92x7du73mtcv0zya4nxvq3tl2m52uz", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "omAzuJps8KX3/iOC1LjwkMPMH3c6tjfLXwCNWXRBdWw=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "Adrian Brink - Cryptium Labs", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1wxf0ck9h2e8p2wmecxtep6cefhexsp4kzc8fxy", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "nctikQSpoLRl5kV6KarIS761QvEOZCWw6nvc48xWhic=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "finality", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr1pzlud6lg8w9phcwetc5aqp24eflshtv4xlxthf", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "NrTRAbZnBqJpW9lRW6LxXxE7EV++y7WiIRV0ifRLovA=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "coscloud", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr10qp8kqwm2cuql0hw2az5mngpmw5xm9ee32exlp", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "W0rP8sv4Ae/LZOqlBA9evvYARDt79WpFaI26jw/9Tfk=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "xiaochina", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + }, + { + "owner": "cosmosaccaddr14dwnmm6n7tjdpeylpwsdsatdl0umm75dfkqcpa", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "JdfJDlE46456GWp+AkSZhzlkUQI41f8aX7611oiWUSc=" + }, + "revoked": false, + "status": 0, + "tokens": "100", + "delegator_shares": "100", + "description": { + "moniker": "gazua1", + "identity": "", + "website": "", + "details": "" + }, + "bond_height": "0", + "bond_intra_tx_counter": 0, + "proposer_reward_pool": [], + "commission": "0", + "commission_max": "0", + "commission_change_rate": "0", + "commission_change_today": "0", + "prev_bonded_tokens": "0" + } + ], + "bonds": [ + { + "delegator_addr": "cosmosaccaddr157mg9hnhchfrqvk3enrvmvj29yhmlwf759xrgw", + "validator_addr": "cosmosaccaddr157mg9hnhchfrqvk3enrvmvj29yhmlwf759xrgw", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr193vn0gk3nsmjkxwz78gce8e8mkmagmvulpg5jt", + "validator_addr": "cosmosaccaddr193vn0gk3nsmjkxwz78gce8e8mkmagmvulpg5jt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr16rcrnftjyl2mctz78825ng8tx5ss22jf6jcp9l", + "validator_addr": "cosmosaccaddr16rcrnftjyl2mctz78825ng8tx5ss22jf6jcp9l", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "validator_addr": "cosmosaccaddr1shuqhpl273t96yg6nnqvyfeewj3ew3mdcwvcnu", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1syhzpjwx6vv3erv2myq7txrjhrp95hrhgcl242", + "validator_addr": "cosmosaccaddr1syhzpjwx6vv3erv2myq7txrjhrp95hrhgcl242", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1uga4nuresex5u8ajjh2pcr39l0s9hszdkp843j", + "validator_addr": "cosmosaccaddr1uga4nuresex5u8ajjh2pcr39l0s9hszdkp843j", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr12wnqvqg79s9jqrul0lva3h72rfmewm7jprrcp5", + "validator_addr": "cosmosaccaddr12wnqvqg79s9jqrul0lva3h72rfmewm7jprrcp5", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1lq0mvtgnwe8mp0096un0v8ztcsj8ad92t2cwrq", + "validator_addr": "cosmosaccaddr1lq0mvtgnwe8mp0096un0v8ztcsj8ad92t2cwrq", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr14e774gfzt5l9ka766ehfgu6n5hgy9f3sehzyv8", + "validator_addr": "cosmosaccaddr14e774gfzt5l9ka766ehfgu6n5hgy9f3sehzyv8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr164jntjfk9zs8x29mc27qansfwvjqs60gj6ermu", + "validator_addr": "cosmosaccaddr164jntjfk9zs8x29mc27qansfwvjqs60gj6ermu", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1qkc3tghc3fms7eye7vtu0g0370epr4jkje2ne7", + "validator_addr": "cosmosaccaddr1qkc3tghc3fms7eye7vtu0g0370epr4jkje2ne7", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr18m09d56pg5p2660de4sjfezpd8ud6jfghndfnt", + "validator_addr": "cosmosaccaddr18m09d56pg5p2660de4sjfezpd8ud6jfghndfnt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1k9pqxd8fxqlk52uwfxnlsexqj6xnmw5swhss45", + "validator_addr": "cosmosaccaddr1k9pqxd8fxqlk52uwfxnlsexqj6xnmw5swhss45", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr13q937pwglh24knwa2v23ml0kkpl9vwzjmfmj3q", + "validator_addr": "cosmosaccaddr13q937pwglh24knwa2v23ml0kkpl9vwzjmfmj3q", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1xvt4e7xd0j9dwv2w83g50tpcltsl90h5dfnz6h", + "validator_addr": "cosmosaccaddr1xvt4e7xd0j9dwv2w83g50tpcltsl90h5dfnz6h", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1nnyel6v0kx8zmfh9edmre3ua4dt9306cfxsxgd", + "validator_addr": "cosmosaccaddr1nnyel6v0kx8zmfh9edmre3ua4dt9306cfxsxgd", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr13cds7hwqyq9ja2hsv4sg7glq9arlk43gcl3cek", + "validator_addr": "cosmosaccaddr13cds7hwqyq9ja2hsv4sg7glq9arlk43gcl3cek", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1y2z20pwqu5qpclque3pqkguruvheum2djtzjw3", + "validator_addr": "cosmosaccaddr1y2z20pwqu5qpclque3pqkguruvheum2djtzjw3", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1anuuffusmq5ng3rhlndhnacy45et30jqygtn67", + "validator_addr": "cosmosaccaddr1anuuffusmq5ng3rhlndhnacy45et30jqygtn67", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1wk0t6na230vxhf6ddresw2c40k5y3ayrww0s2m", + "validator_addr": "cosmosaccaddr1wk0t6na230vxhf6ddresw2c40k5y3ayrww0s2m", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr12pn4p6r5wjpsep9kn655ng7fh59yez7t0rahru", + "validator_addr": "cosmosaccaddr12pn4p6r5wjpsep9kn655ng7fh59yez7t0rahru", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr15rrxdflhq4744qt9m5ysstq3zpykhacf908eez", + "validator_addr": "cosmosaccaddr15rrxdflhq4744qt9m5ysstq3zpykhacf908eez", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr17rqsh3fw6rehnwzarz90jkqtt5fupmh50gy556", + "validator_addr": "cosmosaccaddr17rqsh3fw6rehnwzarz90jkqtt5fupmh50gy556", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1g4q87u438qdh2c8ue4dzdr9ldrqrs77ptm9c70", + "validator_addr": "cosmosaccaddr1g4q87u438qdh2c8ue4dzdr9ldrqrs77ptm9c70", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1dq7jt3pn7mrce2twac907jue7hjd0p0rgt3qnq", + "validator_addr": "cosmosaccaddr1dq7jt3pn7mrce2twac907jue7hjd0p0rgt3qnq", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1gg6natrtt5lf02xwr06ujcczvavl54wgljuaut", + "validator_addr": "cosmosaccaddr1gg6natrtt5lf02xwr06ujcczvavl54wgljuaut", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1zds6r7jyxyxcpf05r5yyyy3u8q2rvj9kkc6vcv", + "validator_addr": "cosmosaccaddr1zds6r7jyxyxcpf05r5yyyy3u8q2rvj9kkc6vcv", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1l0qw5znfd6e8pshpjvyghjjzyr4l6ymla080lt", + "validator_addr": "cosmosaccaddr1l0qw5znfd6e8pshpjvyghjjzyr4l6ymla080lt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1rxxcpkmsngd0azkh3n2467m66ls4rwq52yuv27", + "validator_addr": "cosmosaccaddr1rxxcpkmsngd0azkh3n2467m66ls4rwq52yuv27", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jsch8k385shvse6j5dfx20483qym5uhq76xpjf", + "validator_addr": "cosmosaccaddr1jsch8k385shvse6j5dfx20483qym5uhq76xpjf", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr19uhnhct0p45ek6qxp3cjjrjtz4pacwcsgzvpuj", + "validator_addr": "cosmosaccaddr19uhnhct0p45ek6qxp3cjjrjtz4pacwcsgzvpuj", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1gghhdtx2sceafvgg8dry5sqrvc8srxghm4qqsy", + "validator_addr": "cosmosaccaddr1gghhdtx2sceafvgg8dry5sqrvc8srxghm4qqsy", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1cyayv35tv47t829mel6jm0vqzmrdhf3jq87tqg", + "validator_addr": "cosmosaccaddr1cyayv35tv47t829mel6jm0vqzmrdhf3jq87tqg", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr126ayk3hse5zvk9gxfmpsjr9565ef72pv9g20yx", + "validator_addr": "cosmosaccaddr126ayk3hse5zvk9gxfmpsjr9565ef72pv9g20yx", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1fskmzyt2hr8usr3s65dq3rfur3fy6g2hjp23tm", + "validator_addr": "cosmosaccaddr1fskmzyt2hr8usr3s65dq3rfur3fy6g2hjp23tm", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1lhjta6nt0lewj05m8444tuyhalkrffgpm7njpp", + "validator_addr": "cosmosaccaddr1lhjta6nt0lewj05m8444tuyhalkrffgpm7njpp", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1pm0gx3lk46gf8vyj5my9w5tk06cuq66ll77ugj", + "validator_addr": "cosmosaccaddr1pm0gx3lk46gf8vyj5my9w5tk06cuq66ll77ugj", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr15w2rengajq9js8hu57kjw88dly5vy7gsqedn0n", + "validator_addr": "cosmosaccaddr15w2rengajq9js8hu57kjw88dly5vy7gsqedn0n", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr10505nl7yftsme9jk2glhjhta7w0475uva87paj", + "validator_addr": "cosmosaccaddr10505nl7yftsme9jk2glhjhta7w0475uva87paj", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr18z3pnjgdtt337z8g5drfts7r3fm6n9a0896h0r", + "validator_addr": "cosmosaccaddr18z3pnjgdtt337z8g5drfts7r3fm6n9a0896h0r", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1vmdgku2g0n5p2ef995r4fugu99ze9e5me9kh4d", + "validator_addr": "cosmosaccaddr1vmdgku2g0n5p2ef995r4fugu99ze9e5me9kh4d", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1j2frwt2vq2xer7f060wpsu3y3f63uys2w9lx2e", + "validator_addr": "cosmosaccaddr1j2frwt2vq2xer7f060wpsu3y3f63uys2w9lx2e", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1whxd48da3r56n8eecym8zg0c6xmf35fn2myart", + "validator_addr": "cosmosaccaddr1whxd48da3r56n8eecym8zg0c6xmf35fn2myart", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jkmn6asju47zuuzrf8rjt7sllaj5cx4kueyv8p", + "validator_addr": "cosmosaccaddr1jkmn6asju47zuuzrf8rjt7sllaj5cx4kueyv8p", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr120skmenn2a0ra8y6zassrxvnfc5rlme8rqarvs", + "validator_addr": "cosmosaccaddr120skmenn2a0ra8y6zassrxvnfc5rlme8rqarvs", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jtt6al0acr8h0uvq489rt9zx9lnau7rlcu30pt", + "validator_addr": "cosmosaccaddr1jtt6al0acr8h0uvq489rt9zx9lnau7rlcu30pt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr135dz5hdtvk3z8vl0zyy5l223kjanv0gudu4905", + "validator_addr": "cosmosaccaddr135dz5hdtvk3z8vl0zyy5l223kjanv0gudu4905", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr182ujqw3r8p5fffjqkf0rxzj29pg5q96nxd2khq", + "validator_addr": "cosmosaccaddr182ujqw3r8p5fffjqkf0rxzj29pg5q96nxd2khq", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1qrc3ed8tnz6vc24ftmnht8efs5ufhjmrjkds4x", + "validator_addr": "cosmosaccaddr1qrc3ed8tnz6vc24ftmnht8efs5ufhjmrjkds4x", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1swydkj5u3jd4jwe7uygu4479zgs4qg6v4ds3c9", + "validator_addr": "cosmosaccaddr1swydkj5u3jd4jwe7uygu4479zgs4qg6v4ds3c9", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1l9jt8xgejkcm4sulhwj8c83ftprz5p9lyq4605", + "validator_addr": "cosmosaccaddr1l9jt8xgejkcm4sulhwj8c83ftprz5p9lyq4605", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr128ty3kzhcepjacu4q0xjgq60qa3zz8na3jl793", + "validator_addr": "cosmosaccaddr128ty3kzhcepjacu4q0xjgq60qa3zz8na3jl793", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1e3qm8jd9357zhdemwnaafmf0wy3f4yqmd307c2", + "validator_addr": "cosmosaccaddr1e3qm8jd9357zhdemwnaafmf0wy3f4yqmd307c2", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr18wfz5vj26y079surms5sm6avjtezzspfvqs6g4", + "validator_addr": "cosmosaccaddr18wfz5vj26y079surms5sm6avjtezzspfvqs6g4", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1vrc7zpg5teawwuzkfh6t7c6sy353sukhlarxpa", + "validator_addr": "cosmosaccaddr1vrc7zpg5teawwuzkfh6t7c6sy353sukhlarxpa", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1umaajfgap5ef6yxvk5706kwk8j08l7wh6h9fp2", + "validator_addr": "cosmosaccaddr1umaajfgap5ef6yxvk5706kwk8j08l7wh6h9fp2", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1670l5up6e5fddvlc027yvvlvedrzyx0mmsl622", + "validator_addr": "cosmosaccaddr1670l5up6e5fddvlc027yvvlvedrzyx0mmsl622", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1wx33m9dvglryga0saey0pr99ja0klhcfrwaw7l", + "validator_addr": "cosmosaccaddr1wx33m9dvglryga0saey0pr99ja0klhcfrwaw7l", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr15u9ve7fz8fqaf7r2u3p4f9ru4ze47pau5cxgcg", + "validator_addr": "cosmosaccaddr15u9ve7fz8fqaf7r2u3p4f9ru4ze47pau5cxgcg", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1h4q0xkdg30cl9vw0u8ejm0rs337dszy98gnd4a", + "validator_addr": "cosmosaccaddr1h4q0xkdg30cl9vw0u8ejm0rs337dszy98gnd4a", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr12zpkulxv7kn59sgf0tpf24qhqzxsvf3gamkl7g", + "validator_addr": "cosmosaccaddr12zpkulxv7kn59sgf0tpf24qhqzxsvf3gamkl7g", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1g6sc5t9t68vmcj3alk7dfqr54tvastpxac28k6", + "validator_addr": "cosmosaccaddr1g6sc5t9t68vmcj3alk7dfqr54tvastpxac28k6", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jck6gp4mqy33sk6a0fr5c8maq53hf4245v3mgg", + "validator_addr": "cosmosaccaddr1jck6gp4mqy33sk6a0fr5c8maq53hf4245v3mgg", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jh3grawl62juvx5p8fz5xsy9hpw8w3mngqafe4", + "validator_addr": "cosmosaccaddr1jh3grawl62juvx5p8fz5xsy9hpw8w3mngqafe4", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr17nlusdvrk34fq65jemy3umfjfwaxfzv4asyl60", + "validator_addr": "cosmosaccaddr17nlusdvrk34fq65jemy3umfjfwaxfzv4asyl60", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr18u2sqnuetfnkugp59e9pgyv2dpuvkkxmmsc7m8", + "validator_addr": "cosmosaccaddr18u2sqnuetfnkugp59e9pgyv2dpuvkkxmmsc7m8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1xdp4pls4ryvchq2n8v0cpmtwsprvyh8wvg563q", + "validator_addr": "cosmosaccaddr1xdp4pls4ryvchq2n8v0cpmtwsprvyh8wvg563q", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1pmntq5en2rgtr5rzr4e304efrve4lr43z32y5s", + "validator_addr": "cosmosaccaddr1pmntq5en2rgtr5rzr4e304efrve4lr43z32y5s", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr197p65z7ge5g55r68thvw4l5e43gnm70jhu5g75", + "validator_addr": "cosmosaccaddr197p65z7ge5g55r68thvw4l5e43gnm70jhu5g75", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr15klp8pypkd8htppzt6pguej57yyvp5p442khcu", + "validator_addr": "cosmosaccaddr15klp8pypkd8htppzt6pguej57yyvp5p442khcu", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jsvgewy7h62v3q43m0l347wlcwyhd4un5q8aa3", + "validator_addr": "cosmosaccaddr1jsvgewy7h62v3q43m0l347wlcwyhd4un5q8aa3", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr192yhf7f7f9304cy6cu6np3r8a3m9yqzqfeu9je", + "validator_addr": "cosmosaccaddr192yhf7f7f9304cy6cu6np3r8a3m9yqzqfeu9je", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1pag7xgpl8njlaksvp2ur5un3htg85vcrxcp5rs", + "validator_addr": "cosmosaccaddr1pag7xgpl8njlaksvp2ur5un3htg85vcrxcp5rs", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1p56gv748xfd74qek5e637vhcr6tyjd9ukqfecc", + "validator_addr": "cosmosaccaddr1p56gv748xfd74qek5e637vhcr6tyjd9ukqfecc", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1kwftgznylzerft2ksgkzvvfn5rfpy4nk2ye8na", + "validator_addr": "cosmosaccaddr1kwftgznylzerft2ksgkzvvfn5rfpy4nk2ye8na", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1rj74vaqm0xkxl5cjjam63mayh4x6at3m379ulv", + "validator_addr": "cosmosaccaddr1rj74vaqm0xkxl5cjjam63mayh4x6at3m379ulv", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1zpx36km7tk5cksyzxgvcp6g552p3uhwx84r53q", + "validator_addr": "cosmosaccaddr1zpx36km7tk5cksyzxgvcp6g552p3uhwx84r53q", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1gq0qecxs8xdaarrqxxazwavwxm7qz5jzs5anvt", + "validator_addr": "cosmosaccaddr1gq0qecxs8xdaarrqxxazwavwxm7qz5jzs5anvt", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1cypmdvszcd9kd3jenmqxd03cpceql8rtuvxftp", + "validator_addr": "cosmosaccaddr1cypmdvszcd9kd3jenmqxd03cpceql8rtuvxftp", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1klslzz2n2nqvdaa6gwflwpka7gc60vvmh3k450", + "validator_addr": "cosmosaccaddr1klslzz2n2nqvdaa6gwflwpka7gc60vvmh3k450", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1qkllv8f6qakkw3hk9dqvytys090lk6twsyv8vf", + "validator_addr": "cosmosaccaddr1qkllv8f6qakkw3hk9dqvytys090lk6twsyv8vf", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1wf9nug554ugpw4t0wnlppxc6crl2n02qr8v3cd", + "validator_addr": "cosmosaccaddr1wf9nug554ugpw4t0wnlppxc6crl2n02qr8v3cd", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1t3afuz2kt99jz4pe5k4vjvkdmldn2x0lqzv83w", + "validator_addr": "cosmosaccaddr1t3afuz2kt99jz4pe5k4vjvkdmldn2x0lqzv83w", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr14zfph0h8rexsca6gg6jkwqup3sgl6mwj6eu4e6", + "validator_addr": "cosmosaccaddr14zfph0h8rexsca6gg6jkwqup3sgl6mwj6eu4e6", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1998p0xkdwvul952ydavnx88tmwkhlfa0vhrngj", + "validator_addr": "cosmosaccaddr1998p0xkdwvul952ydavnx88tmwkhlfa0vhrngj", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jw554408yw2h438q200jyuqgln76xh4ax0q4s0", + "validator_addr": "cosmosaccaddr1jw554408yw2h438q200jyuqgln76xh4ax0q4s0", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1mwmcpq5nhaen8zyy86mrrept2gmp0z5peapkhu", + "validator_addr": "cosmosaccaddr1mwmcpq5nhaen8zyy86mrrept2gmp0z5peapkhu", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1emaa7mwgpnpmc7yptm728ytp9quamsvu9rk4hp", + "validator_addr": "cosmosaccaddr1emaa7mwgpnpmc7yptm728ytp9quamsvu9rk4hp", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1tq0zwzyc88l2enrlhtzw0he8rm24xfd5s9aeer", + "validator_addr": "cosmosaccaddr1tq0zwzyc88l2enrlhtzw0he8rm24xfd5s9aeer", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1n9qsfp3x09rhhxptzrgmdlucqhg2ce95fm3fw8", + "validator_addr": "cosmosaccaddr1n9qsfp3x09rhhxptzrgmdlucqhg2ce95fm3fw8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1sqec04r28jfevkzfkdj4ql2qzr2zwrmg78qzj8", + "validator_addr": "cosmosaccaddr1sqec04r28jfevkzfkdj4ql2qzr2zwrmg78qzj8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1hfygmryre7r8m9pfqmc85y7kw7ejphmp59k2x8", + "validator_addr": "cosmosaccaddr1hfygmryre7r8m9pfqmc85y7kw7ejphmp59k2x8", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1jvh448tvk368k4md83ys7auledclek0vfpckz2", + "validator_addr": "cosmosaccaddr1jvh448tvk368k4md83ys7auledclek0vfpckz2", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1fhfcs5npydv8s96wrk9p5ychctslu92t4n5qd4", + "validator_addr": "cosmosaccaddr1fhfcs5npydv8s96wrk9p5ychctslu92t4n5qd4", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1eg88jsn38mrael6cqu7d2u8j6dynya7fv2p2tl", + "validator_addr": "cosmosaccaddr1eg88jsn38mrael6cqu7d2u8j6dynya7fv2p2tl", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1ukcuqpqw3eq505wkqd2adgn8ugewxr6jtakngs", + "validator_addr": "cosmosaccaddr1ukcuqpqw3eq505wkqd2adgn8ugewxr6jtakngs", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1na3wr7ujdp3qdej6l5y0k4znzrkaz77t2yjaqf", + "validator_addr": "cosmosaccaddr1na3wr7ujdp3qdej6l5y0k4znzrkaz77t2yjaqf", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1xupfqk73y7rmc6qdgv7rtjy8wsngvt2g2t59t3", + "validator_addr": "cosmosaccaddr1xupfqk73y7rmc6qdgv7rtjy8wsngvt2g2t59t3", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr17gvlvfpsfl6hffn5u2hahk22un4ynpykc44tat", + "validator_addr": "cosmosaccaddr17gvlvfpsfl6hffn5u2hahk22un4ynpykc44tat", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1yfseqtj5sjhzz2q2ym09jym4h4nc4yevae0jp2", + "validator_addr": "cosmosaccaddr1yfseqtj5sjhzz2q2ym09jym4h4nc4yevae0jp2", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1yd0rklq45zg89fywr89ccutlcwp9kehhh0z03k", + "validator_addr": "cosmosaccaddr1yd0rklq45zg89fywr89ccutlcwp9kehhh0z03k", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1arlpxs2ftf5hgetqxxkvd7mqdc28mmaqclyv4y", + "validator_addr": "cosmosaccaddr1arlpxs2ftf5hgetqxxkvd7mqdc28mmaqclyv4y", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr12ceualfg92x7du73mtcv0zya4nxvq3tl2m52uz", + "validator_addr": "cosmosaccaddr12ceualfg92x7du73mtcv0zya4nxvq3tl2m52uz", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1wxf0ck9h2e8p2wmecxtep6cefhexsp4kzc8fxy", + "validator_addr": "cosmosaccaddr1wxf0ck9h2e8p2wmecxtep6cefhexsp4kzc8fxy", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr1pzlud6lg8w9phcwetc5aqp24eflshtv4xlxthf", + "validator_addr": "cosmosaccaddr1pzlud6lg8w9phcwetc5aqp24eflshtv4xlxthf", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr10qp8kqwm2cuql0hw2az5mngpmw5xm9ee32exlp", + "validator_addr": "cosmosaccaddr10qp8kqwm2cuql0hw2az5mngpmw5xm9ee32exlp", + "shares": "100", + "height": "0" + }, + { + "delegator_addr": "cosmosaccaddr14dwnmm6n7tjdpeylpwsdsatdl0umm75dfkqcpa", + "validator_addr": "cosmosaccaddr14dwnmm6n7tjdpeylpwsdsatdl0umm75dfkqcpa", + "shares": "100", + "height": "0" + } + ] + } + } +} \ No newline at end of file diff --git a/crypto/keys/keybase.go b/crypto/keys/keybase.go index ef2c6243a..d9c1b5f57 100644 --- a/crypto/keys/keybase.go +++ b/crypto/keys/keybase.go @@ -6,13 +6,12 @@ import ( "os" "strings" - "github.com/pkg/errors" - tcrypto "github.com/tendermint/tendermint/crypto" - dbm "github.com/tendermint/tendermint/libs/db" - "github.com/cosmos/cosmos-sdk/crypto" "github.com/cosmos/cosmos-sdk/crypto/keys/bip39" "github.com/cosmos/cosmos-sdk/crypto/keys/hd" + "github.com/pkg/errors" + tmcrypto "github.com/tendermint/tendermint/crypto" + dbm "github.com/tendermint/tendermint/libs/db" ) var _ Keybase = dbKeybase{} @@ -43,10 +42,12 @@ const ( ) var ( - // ErrUnsupportedSigningAlgo is raised when the caller tries to use a different signing scheme than secp256k1. + // ErrUnsupportedSigningAlgo is raised when the caller tries to use a + // different signing scheme than secp256k1. ErrUnsupportedSigningAlgo = errors.New("unsupported signing algo: only secp256k1 is supported") - // ErrUnsupportedLanguage is raised when the caller tries to use a different language than english for creating - // a mnemonic sentence. + + // ErrUnsupportedLanguage is raised when the caller tries to use a + // different language than english for creating a mnemonic sentence. ErrUnsupportedLanguage = errors.New("unsupported language: only english is supported") ) @@ -147,7 +148,7 @@ func (kb dbKeybase) CreateLedger(name string, path crypto.DerivationPath, algo S // CreateOffline creates a new reference to an offline keypair // It returns the created key info -func (kb dbKeybase) CreateOffline(name string, pub tcrypto.PubKey) (Info, error) { +func (kb dbKeybase) CreateOffline(name string, pub tmcrypto.PubKey) (Info, error) { return kb.writeOfflineKey(pub, name), nil } @@ -162,9 +163,9 @@ func (kb *dbKeybase) persistDerivedKey(seed []byte, passwd, name, fullHdPath str // if we have a password, use it to encrypt the private key and store it // else store the public key only if passwd != "" { - info = kb.writeLocalKey(tcrypto.PrivKeySecp256k1(derivedPriv), name, passwd) + info = kb.writeLocalKey(tmcrypto.PrivKeySecp256k1(derivedPriv), name, passwd) } else { - pubk := tcrypto.PrivKeySecp256k1(derivedPriv).PubKey() + pubk := tmcrypto.PrivKeySecp256k1(derivedPriv).PubKey() info = kb.writeOfflineKey(pubk, name) } return @@ -196,12 +197,12 @@ func (kb dbKeybase) Get(name string) (Info, error) { // Sign signs the msg with the named key. // It returns an error if the key doesn't exist or the decryption fails. -func (kb dbKeybase) Sign(name, passphrase string, msg []byte) (sig tcrypto.Signature, pub tcrypto.PubKey, err error) { +func (kb dbKeybase) Sign(name, passphrase string, msg []byte) (sig tmcrypto.Signature, pub tmcrypto.PubKey, err error) { info, err := kb.Get(name) if err != nil { return } - var priv tcrypto.PrivKey + var priv tmcrypto.PrivKey switch info.(type) { case localInfo: linfo := info.(localInfo) @@ -240,12 +241,12 @@ func (kb dbKeybase) Sign(name, passphrase string, msg []byte) (sig tcrypto.Signa return sig, pub, nil } -func (kb dbKeybase) ExportPrivateKeyObject(name string, passphrase string) (tcrypto.PrivKey, error) { +func (kb dbKeybase) ExportPrivateKeyObject(name string, passphrase string) (tmcrypto.PrivKey, error) { info, err := kb.Get(name) if err != nil { return nil, err } - var priv tcrypto.PrivKey + var priv tmcrypto.PrivKey switch info.(type) { case localInfo: linfo := info.(localInfo) @@ -313,7 +314,7 @@ func (kb dbKeybase) ImportPubKey(name string, armor string) (err error) { if err != nil { return } - pubKey, err := tcrypto.PubKeyFromBytes(pubBytes) + pubKey, err := tmcrypto.PubKeyFromBytes(pubBytes) if err != nil { return } @@ -380,7 +381,7 @@ func (kb dbKeybase) Update(name, oldpass string, getNewpass func() (string, erro } } -func (kb dbKeybase) writeLocalKey(priv tcrypto.PrivKey, name, passphrase string) Info { +func (kb dbKeybase) writeLocalKey(priv tmcrypto.PrivKey, name, passphrase string) Info { // encrypt private key using passphrase privArmor := encryptArmorPrivKey(priv, passphrase) // make Info @@ -390,13 +391,13 @@ func (kb dbKeybase) writeLocalKey(priv tcrypto.PrivKey, name, passphrase string) return info } -func (kb dbKeybase) writeLedgerKey(pub tcrypto.PubKey, path crypto.DerivationPath, name string) Info { +func (kb dbKeybase) writeLedgerKey(pub tmcrypto.PubKey, path crypto.DerivationPath, name string) Info { info := newLedgerInfo(name, pub, path) kb.writeInfo(info, name) return info } -func (kb dbKeybase) writeOfflineKey(pub tcrypto.PubKey, name string) Info { +func (kb dbKeybase) writeOfflineKey(pub tmcrypto.PubKey, name string) Info { info := newOfflineInfo(name, pub) kb.writeInfo(info, name) return info diff --git a/crypto/ledger.go b/crypto/ledger.go new file mode 100644 index 000000000..9d446202f --- /dev/null +++ b/crypto/ledger.go @@ -0,0 +1,18 @@ +// +build cgo,ledger + +package crypto + +import ( + ledger "github.com/zondax/ledger-goclient" +) + +// If ledger support (build tag) has been enabled, automically attempt to load +// and set the ledger device, ledgerDevice, if it has not already been set. +func init() { + device, err := ledger.FindLedger() + if err != nil { + ledgerDeviceErr = err + } else { + ledgerDevice = device + } +} diff --git a/crypto/ledger_common.go b/crypto/ledger_common.go deleted file mode 100644 index 39f15464a..000000000 --- a/crypto/ledger_common.go +++ /dev/null @@ -1,19 +0,0 @@ -package crypto - -import ( - ledger "github.com/zondax/ledger-goclient" -) - -var device *ledger.Ledger - -// Ledger derivation path -type DerivationPath = []uint32 - -// getLedger gets a copy of the device, and caches it -func getLedger() (*ledger.Ledger, error) { - var err error - if device == nil { - device, err = ledger.FindLedger() - } - return device, err -} diff --git a/crypto/ledger_secp256k1.go b/crypto/ledger_secp256k1.go index 1ba36f69d..9e8940d7b 100644 --- a/crypto/ledger_secp256k1.go +++ b/crypto/ledger_secp256k1.go @@ -1,126 +1,162 @@ package crypto import ( + "errors" "fmt" secp256k1 "github.com/btcsuite/btcd/btcec" - ledger "github.com/zondax/ledger-goclient" - - tcrypto "github.com/tendermint/tendermint/crypto" + tmcrypto "github.com/tendermint/tendermint/crypto" ) -func pubkeyLedgerSecp256k1(device *ledger.Ledger, path DerivationPath) (pub tcrypto.PubKey, err error) { - key, err := device.GetPublicKeySECP256K1(path) - if err != nil { - return nil, fmt.Errorf("error fetching public key: %v", err) +var ( + ledgerDevice LedgerSECP256K1 + ledgerDeviceErr error + + // ErrMissingLedgerDevice is used to reflect that a ledger device load has + // not been attempted. + ErrMissingLedgerDevice = errors.New("missing ledger device") +) + +type ( + // DerivationPath represents a Ledger derivation path. + DerivationPath []uint32 + + // LedgerSECP256K1 reflects an interface a Ledger API must implement for + // the SECP256K1 scheme. + LedgerSECP256K1 interface { + GetPublicKeySECP256K1([]uint32) ([]byte, error) + SignSECP256K1([]uint32, []byte) ([]byte, error) } - var p tcrypto.PubKeySecp256k1 - // Reserialize in the 33-byte compressed format - cmp, err := secp256k1.ParsePubKey(key[:], secp256k1.S256()) - copy(p[:], cmp.SerializeCompressed()) - pub = p - return -} -func signLedgerSecp256k1(device *ledger.Ledger, path DerivationPath, msg []byte) (sig tcrypto.Signature, err error) { - bsig, err := device.SignSECP256K1(path, msg) - if err != nil { - return sig, err + // PrivKeyLedgerSecp256k1 implements PrivKey, calling the ledger nano we + // cache the PubKey from the first call to use it later. + PrivKeyLedgerSecp256k1 struct { + // CachedPubKey should be private, but we want to encode it via + // go-amino so we can view the address later, even without having the + // ledger attached. + CachedPubKey tmcrypto.PubKey + Path DerivationPath + ledger LedgerSECP256K1 } - sig = tcrypto.SignatureSecp256k1FromBytes(bsig) - return -} +) -// PrivKeyLedgerSecp256k1 implements PrivKey, calling the ledger nano -// we cache the PubKey from the first call to use it later -type PrivKeyLedgerSecp256k1 struct { - // PubKey should be private, but we want to encode it via go-amino - // so we can view the address later, even without having the ledger - // attached - CachedPubKey tcrypto.PubKey - Path DerivationPath -} +// NewPrivKeyLedgerSecp256k1 will generate a new key and store the public key +// for later use. +// +// CONTRACT: The ledger device, ledgerDevice, must be loaded and set prior to +// any creation of a PrivKeyLedgerSecp256k1. +func NewPrivKeyLedgerSecp256k1(path DerivationPath) (tmcrypto.PrivKey, error) { + if ledgerDevice == nil { + err := ErrMissingLedgerDevice + if ledgerDeviceErr != nil { + err = ledgerDeviceErr + } + + return nil, fmt.Errorf("failed to create PrivKeyLedgerSecp256k1: %v", err) + } + + pkl := &PrivKeyLedgerSecp256k1{Path: path, ledger: ledgerDevice} -// NewPrivKeyLedgerSecp256k1 will generate a new key and store the -// public key for later use. -func NewPrivKeyLedgerSecp256k1(path DerivationPath) (tcrypto.PrivKey, error) { - var pk PrivKeyLedgerSecp256k1 - pk.Path = path // cache the pubkey for later use - pubKey, err := pk.getPubKey() + pubKey, err := pkl.getPubKey() if err != nil { return nil, err } - pk.CachedPubKey = pubKey - return &pk, err + + pkl.CachedPubKey = pubKey + return pkl, err } -// ValidateKey allows us to verify the sanity of a key -// after loading it from disk -func (pk PrivKeyLedgerSecp256k1) ValidateKey() error { +// PubKey returns the cached public key. +func (pkl PrivKeyLedgerSecp256k1) PubKey() tmcrypto.PubKey { + return pkl.CachedPubKey +} + +// ValidateKey allows us to verify the sanity of a public key after loading it +// from disk. +func (pkl PrivKeyLedgerSecp256k1) ValidateKey() error { // getPubKey will return an error if the ledger is not - pub, err := pk.getPubKey() + pub, err := pkl.getPubKey() if err != nil { return err } + // verify this matches cached address - if !pub.Equals(pk.CachedPubKey) { + if !pub.Equals(pkl.CachedPubKey) { return fmt.Errorf("cached key does not match retrieved key") } + return nil } -// AssertIsPrivKeyInner fulfils PrivKey Interface -func (pk *PrivKeyLedgerSecp256k1) AssertIsPrivKeyInner() {} +// AssertIsPrivKeyInner implements the PrivKey interface. It performs a no-op. +func (pkl *PrivKeyLedgerSecp256k1) AssertIsPrivKeyInner() {} -// Bytes fulfils PrivKey Interface - but it stores the cached pubkey so we can verify -// the same key when we reconnect to a ledger -func (pk PrivKeyLedgerSecp256k1) Bytes() []byte { - return cdc.MustMarshalBinaryBare(pk) +// Bytes implements the PrivKey interface. It stores the cached public key so +// we can verify the same key when we reconnect to a ledger. +func (pkl PrivKeyLedgerSecp256k1) Bytes() []byte { + return cdc.MustMarshalBinaryBare(pkl) } -// Sign calls the ledger and stores the PubKey for future use +// Equals implements the PrivKey interface. It makes sure two private keys +// refer to the same public key. +func (pkl PrivKeyLedgerSecp256k1) Equals(other tmcrypto.PrivKey) bool { + if ledger, ok := other.(*PrivKeyLedgerSecp256k1); ok { + return pkl.CachedPubKey.Equals(ledger.CachedPubKey) + } + + return false +} + +// Sign calls the ledger and stores the PubKey for future use. // -// Communication is checked on NewPrivKeyLedger and PrivKeyFromBytes, -// returning an error, so this should only trigger if the privkey is held -// in memory for a while before use. -func (pk PrivKeyLedgerSecp256k1) Sign(msg []byte) (tcrypto.Signature, error) { - dev, err := getLedger() +// Communication is checked on NewPrivKeyLedger and PrivKeyFromBytes, returning +// an error, so this should only trigger if the private key is held in memory +// for a while before use. +func (pkl PrivKeyLedgerSecp256k1) Sign(msg []byte) (tmcrypto.Signature, error) { + sig, err := pkl.signLedgerSecp256k1(msg) if err != nil { return nil, err } - sig, err := signLedgerSecp256k1(dev, pk.Path, msg) - if err != nil { - return nil, err - } - return sig, nil -} -// PubKey returns the stored PubKey -func (pk PrivKeyLedgerSecp256k1) PubKey() tcrypto.PubKey { - return pk.CachedPubKey + return sig, nil } // getPubKey reads the pubkey the ledger itself // since this involves IO, it may return an error, which is not exposed // in the PubKey interface, so this function allows better error handling -func (pk PrivKeyLedgerSecp256k1) getPubKey() (key tcrypto.PubKey, err error) { - dev, err := getLedger() - if err != nil { - return key, fmt.Errorf("cannot connect to Ledger device - error: %v", err) - } - key, err = pubkeyLedgerSecp256k1(dev, pk.Path) +func (pkl PrivKeyLedgerSecp256k1) getPubKey() (key tmcrypto.PubKey, err error) { + key, err = pkl.pubkeyLedgerSecp256k1() if err != nil { return key, fmt.Errorf("please open Cosmos app on the Ledger device - error: %v", err) } + return key, err } -// Equals fulfils PrivKey Interface - makes sure both keys refer to the -// same -func (pk PrivKeyLedgerSecp256k1) Equals(other tcrypto.PrivKey) bool { - if ledger, ok := other.(*PrivKeyLedgerSecp256k1); ok { - return pk.CachedPubKey.Equals(ledger.CachedPubKey) +func (pkl PrivKeyLedgerSecp256k1) signLedgerSecp256k1(msg []byte) (tmcrypto.Signature, error) { + sigBytes, err := pkl.ledger.SignSECP256K1(pkl.Path, msg) + if err != nil { + return nil, err } - return false + + return tmcrypto.SignatureSecp256k1FromBytes(sigBytes), nil +} + +func (pkl PrivKeyLedgerSecp256k1) pubkeyLedgerSecp256k1() (pub tmcrypto.PubKey, err error) { + key, err := pkl.ledger.GetPublicKeySECP256K1(pkl.Path) + if err != nil { + return nil, fmt.Errorf("error fetching public key: %v", err) + } + + var pk tmcrypto.PubKeySecp256k1 + + // re-serialize in the 33-byte compressed format + cmp, err := secp256k1.ParsePubKey(key[:], secp256k1.S256()) + if err != nil { + return nil, fmt.Errorf("error parsing public key: %v", err) + } + copy(pk[:], cmp.SerializeCompressed()) + + return pk, nil } diff --git a/crypto/ledger_test.go b/crypto/ledger_test.go index 997dfbc3b..8e1a2ed65 100644 --- a/crypto/ledger_test.go +++ b/crypto/ledger_test.go @@ -1,25 +1,26 @@ package crypto import ( + "fmt" "os" "testing" "github.com/stretchr/testify/require" - - tcrypto "github.com/tendermint/tendermint/crypto" + tmcrypto "github.com/tendermint/tendermint/crypto" ) +var ledgerEnabledEnv = "TEST_WITH_LEDGER" + func TestRealLedgerSecp256k1(t *testing.T) { - - if os.Getenv("WITH_LEDGER") == "" { - t.Skip("Set WITH_LEDGER to run code on real ledger") + if os.Getenv(ledgerEnabledEnv) == "" { + t.Skip(fmt.Sprintf("Set '%s' to run code on a real ledger", ledgerEnabledEnv)) } - msg := []byte("kuhehfeohg") - + msg := []byte("{\"account_number\":\"3\",\"chain_id\":\"1234\",\"fee\":{\"amount\":[{\"amount\":\"150\",\"denom\":\"atom\"}],\"gas\":\"5000\"},\"memo\":\"memo\",\"msgs\":[[\"%s\"]],\"sequence\":\"6\"}") path := DerivationPath{44, 60, 0, 0, 0} priv, err := NewPrivKeyLedgerSecp256k1(path) - require.Nil(t, err, "%+v", err) + require.Nil(t, err, "%s", err) + pub := priv.PubKey() sig, err := priv.Sign(msg) require.Nil(t, err) @@ -27,24 +28,23 @@ func TestRealLedgerSecp256k1(t *testing.T) { valid := pub.VerifyBytes(msg, sig) require.True(t, valid) - // now, let's serialize the key and make sure it still works - bs := priv.Bytes() - priv2, err := tcrypto.PrivKeyFromBytes(bs) + // now, let's serialize the public key and make sure it still works + bs := priv.PubKey().Bytes() + pub2, err := tmcrypto.PubKeyFromBytes(bs) require.Nil(t, err, "%+v", err) // make sure we get the same pubkey when we load from disk - pub2 := priv2.PubKey() require.Equal(t, pub, pub2) // signing with the loaded key should match the original pubkey - sig, err = priv2.Sign(msg) + sig, err = priv.Sign(msg) require.Nil(t, err) valid = pub.VerifyBytes(msg, sig) require.True(t, valid) // make sure pubkeys serialize properly as well bs = pub.Bytes() - bpub, err := tcrypto.PubKeyFromBytes(bs) + bpub, err := tmcrypto.PubKeyFromBytes(bs) require.NoError(t, err) require.Equal(t, pub, bpub) } @@ -52,8 +52,8 @@ func TestRealLedgerSecp256k1(t *testing.T) { // TestRealLedgerErrorHandling calls. These tests assume // the ledger is not plugged in.... func TestRealLedgerErrorHandling(t *testing.T) { - if os.Getenv("WITH_LEDGER") != "" { - t.Skip("Skipping on WITH_LEDGER as it tests unplugged cases") + if os.Getenv(ledgerEnabledEnv) != "" { + t.Skip(fmt.Sprintf("Unset '%s' to run code as if without a real Ledger", ledgerEnabledEnv)) } // first, try to generate a key, must return an error diff --git a/docs/DOCS_README.md b/docs/DOCS_README.md new file mode 100644 index 000000000..564a7e955 --- /dev/null +++ b/docs/DOCS_README.md @@ -0,0 +1,17 @@ +# Documentation Maintenance Overview + +The documentation found in this directory is hosted at: + +- https://cosmos.network/docs/ + +and built using [VuePress](https://vuepress.vuejs.org/) from the Cosmos website repo: + +- https://github.com/cosmos/cosmos.network + +which has a [configuration file](https://github.com/cosmos/cosmos.network/blob/develop/docs/.vuepress/config.js) for displaying +the Table of Contents that lists all the documentation. + +Under the hood, Jenkins listens for changes in ./docs then pushes a `docs-staging` branch to the cosmos.network repo with the latest documentation. That branch must be manually PR'd to `develop` then `master` for staging then production. This process should happen in synchrony with a release. + +The `README.md` in this directory is the landing page for +website documentation. diff --git a/examples/democoin/x/cool/handler.go b/examples/democoin/x/cool/handler.go index 82247677c..f8c32be81 100644 --- a/examples/democoin/x/cool/handler.go +++ b/examples/democoin/x/cool/handler.go @@ -47,10 +47,6 @@ func handleMsgQuiz(ctx sdk.Context, k Keeper, msg MsgQuiz) sdk.Result { return ErrIncorrectCoolAnswer(k.codespace, msg.CoolAnswer).Result() } - if ctx.IsCheckTx() { - return sdk.Result{} // TODO - } - bonusCoins := sdk.Coins{sdk.NewCoin(msg.CoolAnswer, 69)} _, _, err := k.ck.AddCoins(ctx, msg.Sender, bonusCoins) diff --git a/examples/democoin/x/pow/handler.go b/examples/democoin/x/pow/handler.go index 2dd549bde..e4fa39d1d 100644 --- a/examples/democoin/x/pow/handler.go +++ b/examples/democoin/x/pow/handler.go @@ -26,14 +26,6 @@ func handleMsgMine(ctx sdk.Context, pk Keeper, msg MsgMine) sdk.Result { return err.Result() } - // commented for now, makes testing difficult - // TODO figure out a better test method that allows early CheckTx return - /* - if ctx.IsCheckTx() { - return sdk.Result{} // TODO - } - */ - err = pk.ApplyValid(ctx, msg.Sender, newDiff, newCount) if err != nil { return err.Result() diff --git a/server/export.go b/server/export.go index 5982e7b47..fa1c1907a 100644 --- a/server/export.go +++ b/server/export.go @@ -30,7 +30,7 @@ func ExportCmd(ctx *Context, cdc *wire.Codec, appExporter AppExporter) *cobra.Co return err } - doc.AppStateJSON = appState + doc.AppState = appState doc.Validators = validators encoded, err := wire.MarshalJSONIndent(cdc, doc) diff --git a/server/init.go b/server/init.go index 7cf857c20..39f3d0b7f 100644 --- a/server/init.go +++ b/server/init.go @@ -346,9 +346,9 @@ func readOrCreatePrivValidator(tmConfig *cfg.Config) crypto.PubKey { // error is returned if building or writing the configuration to file fails. func writeGenesisFile(cdc *wire.Codec, genesisFile, chainID string, validators []tmtypes.GenesisValidator, appState json.RawMessage) error { genDoc := tmtypes.GenesisDoc{ - ChainID: chainID, - Validators: validators, - AppStateJSON: appState, + ChainID: chainID, + Validators: validators, + AppState: appState, } if err := genDoc.ValidateAndComplete(); err != nil { diff --git a/server/util.go b/server/util.go index 1e6ed06c9..51547d116 100644 --- a/server/util.go +++ b/server/util.go @@ -77,16 +77,21 @@ func interceptLoadConfig() (conf *cfg.Config, err error) { rootDir := tmpConf.RootDir configFilePath := filepath.Join(rootDir, "config/config.toml") // Intercept only if the file doesn't already exist + if _, err := os.Stat(configFilePath); os.IsNotExist(err) { // the following parse config is needed to create directories - sdkDefaultConfig, _ := tcmd.ParseConfig() - sdkDefaultConfig.ProfListenAddress = "prof_laddr=localhost:6060" - sdkDefaultConfig.P2P.RecvRate = 5120000 - sdkDefaultConfig.P2P.SendRate = 5120000 - cfg.WriteConfigFile(configFilePath, sdkDefaultConfig) + conf, _ = tcmd.ParseConfig() + conf.ProfListenAddress = "localhost:6060" + conf.P2P.RecvRate = 5120000 + conf.P2P.SendRate = 5120000 + conf.Consensus.TimeoutCommit = 5000 + cfg.WriteConfigFile(configFilePath, conf) // Fall through, just so that its parsed into memory. } - conf, err = tcmd.ParseConfig() + + if conf == nil { + conf, err = tcmd.ParseConfig() + } return } diff --git a/tools/Makefile b/tools/Makefile index d58f52d1b..66ad10f6e 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -30,6 +30,9 @@ ifndef DEP_CHECK else @echo "Found dep in path." endif + +check_dev_tools: + $(MAKE) check_tools ifndef GOLINT_CHECK @echo "No golint in path. Install with 'make get_tools'." else @@ -78,6 +81,9 @@ else @echo "Installing dep" go get -v $(DEP) endif + +get_dev_tools: + $(MAKE) get_tools ifdef GOLINT_CHECK @echo "Golint is already installed. Run 'make update_tools' to update." else @@ -130,6 +136,9 @@ endif update_tools: @echo "Updating dep" go get -u -v $(DEP) + +update_dev_tools: + $(MAKE) update_tools @echo "Updating tendermint/golint" go get -u -v $(GOLINT) @echo "Updating gometalinter.v2" @@ -150,4 +159,4 @@ update_tools: # To avoid unintended conflicts with file names, always add to .PHONY # unless there is a reason not to. # https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html -.PHONY: check_tools get_tools update_tools +.PHONY: check_tools get_tools update_tools check_dev_tools get_dev_tools update_dev_tools diff --git a/types/coin_test.go b/types/coin_test.go index c7ccc5746..da52b4849 100644 --- a/types/coin_test.go +++ b/types/coin_test.go @@ -17,9 +17,9 @@ func TestIsPositiveCoin(t *testing.T) { {NewCoin("a", -1), false}, } - for _, tc := range cases { + for tcIndex, tc := range cases { res := tc.inputOne.IsPositive() - require.Equal(t, tc.expected, res) + require.Equal(t, tc.expected, res, "%s positivity is incorrect, tc #%d", tc.inputOne.String(), tcIndex) } } @@ -33,9 +33,9 @@ func TestIsNotNegativeCoin(t *testing.T) { {NewCoin("a", -1), false}, } - for _, tc := range cases { + for tcIndex, tc := range cases { res := tc.inputOne.IsNotNegative() - require.Equal(t, tc.expected, res) + require.Equal(t, tc.expected, res, "%s not-negativity is incorrect, tc #%d", tc.inputOne.String(), tcIndex) } } @@ -52,9 +52,9 @@ func TestSameDenomAsCoin(t *testing.T) { {NewCoin("steak", -11), NewCoin("steak", 10), true}, } - for _, tc := range cases { + for tcIndex, tc := range cases { res := tc.inputOne.SameDenomAs(tc.inputTwo) - require.Equal(t, tc.expected, res) + require.Equal(t, tc.expected, res, "coin denominations didn't match, tc #%d", tcIndex) } } @@ -70,9 +70,9 @@ func TestIsGTECoin(t *testing.T) { {NewCoin("a", 1), NewCoin("b", 1), false}, } - for _, tc := range cases { + for tcIndex, tc := range cases { res := tc.inputOne.IsGTE(tc.inputTwo) - require.Equal(t, tc.expected, res) + require.Equal(t, tc.expected, res, "coin GTE relation is incorrect, tc #%d", tcIndex) } } @@ -89,9 +89,9 @@ func TestIsEqualCoin(t *testing.T) { {NewCoin("steak", -11), NewCoin("steak", 10), false}, } - for _, tc := range cases { + for tcIndex, tc := range cases { res := tc.inputOne.IsEqual(tc.inputTwo) - require.Equal(t, tc.expected, res) + require.Equal(t, tc.expected, res, "coin equality relation is incorrect, tc #%d", tcIndex) } } @@ -106,9 +106,9 @@ func TestPlusCoin(t *testing.T) { {NewCoin("asdf", -4), NewCoin("asdf", 5), NewCoin("asdf", 1)}, } - for _, tc := range cases { + for tcIndex, tc := range cases { res := tc.inputOne.Plus(tc.inputTwo) - require.Equal(t, tc.expected, res) + require.Equal(t, tc.expected, res, "sum of coins is incorrect, tc #%d", tcIndex) } tc := struct { @@ -132,9 +132,9 @@ func TestMinusCoin(t *testing.T) { {NewCoin("asdf", 10), NewCoin("asdf", 1), NewCoin("asdf", 9)}, } - for _, tc := range cases { + for tcIndex, tc := range cases { res := tc.inputOne.Minus(tc.inputTwo) - require.Equal(t, tc.expected, res) + require.Equal(t, tc.expected, res, "difference of coins is incorrect, tc #%d", tcIndex) } tc := struct { @@ -212,10 +212,10 @@ func TestPlusCoins(t *testing.T) { {Coins{{"A", negone}, {"B", zero}}, Coins{{"A", zero}, {"B", zero}}, Coins{{"A", negone}}}, } - for _, tc := range cases { + for tcIndex, tc := range cases { res := tc.inputOne.Plus(tc.inputTwo) assert.True(t, res.IsValid()) - require.Equal(t, tc.expected, res) + require.Equal(t, tc.expected, res, "sum of coins is incorrect, tc #%d", tcIndex) } } @@ -242,12 +242,12 @@ func TestParse(t *testing.T) { {"5foo-bar", false, nil}, // once more, only letters in coin name } - for _, tc := range cases { + for tcIndex, tc := range cases { res, err := ParseCoins(tc.input) if !tc.valid { - require.NotNil(t, err, "%s: %#v", tc.input, res) + require.NotNil(t, err, "%s: %#v. tc #%d", tc.input, res, tcIndex) } else if assert.Nil(t, err, "%s: %+v", tc.input, err) { - require.Equal(t, tc.expected, res) + require.Equal(t, tc.expected, res, "coin parsing was incorrect, tc #%d", tcIndex) } } @@ -296,10 +296,10 @@ func TestSortCoins(t *testing.T) { {dup, false, false}, } - for _, tc := range cases { - require.Equal(t, tc.before, tc.coins.IsValid()) + for tcIndex, tc := range cases { + require.Equal(t, tc.before, tc.coins.IsValid(), "coin validity is incorrect before sorting, tc #%d", tcIndex) tc.coins.Sort() - require.Equal(t, tc.after, tc.coins.IsValid()) + require.Equal(t, tc.after, tc.coins.IsValid(), "coin validity is incorrect after sorting, tc #%d", tcIndex) } } diff --git a/types/context.go b/types/context.go index e55eff1ab..064625028 100644 --- a/types/context.go +++ b/types/context.go @@ -41,7 +41,6 @@ func NewContext(ms MultiStore, header abci.Header, isCheckTx bool, logger log.Lo c = c.WithBlockHeader(header) c = c.WithBlockHeight(header.Height) c = c.WithChainID(header.ChainID) - c = c.WithIsCheckTx(isCheckTx) c = c.WithTxBytes(nil) c = c.WithLogger(logger) c = c.WithSigningValidators(nil) @@ -127,7 +126,6 @@ const ( contextKeyBlockHeader contextKeyBlockHeight contextKeyChainID - contextKeyIsCheckTx contextKeyTxBytes contextKeyLogger contextKeySigningValidators @@ -151,9 +149,6 @@ func (c Context) BlockHeight() int64 { func (c Context) ChainID() string { return c.Value(contextKeyChainID).(string) } -func (c Context) IsCheckTx() bool { - return c.Value(contextKeyIsCheckTx).(bool) -} func (c Context) TxBytes() []byte { return c.Value(contextKeyTxBytes).([]byte) } @@ -179,9 +174,6 @@ func (c Context) WithBlockHeight(height int64) Context { func (c Context) WithChainID(chainID string) Context { return c.withValue(contextKeyChainID, chainID) } -func (c Context) WithIsCheckTx(isCheckTx bool) Context { - return c.withValue(contextKeyIsCheckTx, isCheckTx) -} func (c Context) WithTxBytes(txBytes []byte) Context { return c.withValue(contextKeyTxBytes, txBytes) } diff --git a/types/rational.go b/types/rational.go index cb07bf543..89cc76968 100644 --- a/types/rational.go +++ b/types/rational.go @@ -234,7 +234,7 @@ func (r *Rat) UnmarshalAmino(text string) (err error) { //___________________________________________________________________________________ // helpers -// test if two rat arrays are the equal +// test if two rat arrays are equal func RatsEqual(r1s, r2s []Rat) bool { if len(r1s) != len(r2s) { return false diff --git a/types/rational_test.go b/types/rational_test.go index ecbc09e88..5ca1ac9c6 100644 --- a/types/rational_test.go +++ b/types/rational_test.go @@ -48,22 +48,22 @@ func TestNewFromDecimal(t *testing.T) { {"0.foobar.", true, Rat{}}, } - for _, tc := range tests { + for tcIndex, tc := range tests { res, err := NewRatFromDecimal(tc.decimalStr, 4) if tc.expErr { - require.NotNil(t, err, tc.decimalStr) + require.NotNil(t, err, tc.decimalStr, "error expected, tc #%d", tcIndex) } else { - require.Nil(t, err, tc.decimalStr) - require.True(t, res.Equal(tc.exp), tc.decimalStr) + require.Nil(t, err, tc.decimalStr, "unexpected error, tc #%d", tcIndex) + require.True(t, res.Equal(tc.exp), tc.decimalStr, "equality was incorrect, tc #%d", tcIndex) } // negative tc res, err = NewRatFromDecimal("-"+tc.decimalStr, 4) if tc.expErr { - require.NotNil(t, err, tc.decimalStr) + require.NotNil(t, err, tc.decimalStr, "error expected (negative case), tc #%d", tcIndex) } else { - require.Nil(t, err, tc.decimalStr) - require.True(t, res.Equal(tc.exp.Mul(NewRat(-1))), tc.decimalStr) + require.Nil(t, err, tc.decimalStr, "unexpected error (negative case), tc #%d", tcIndex) + require.True(t, res.Equal(tc.exp.Mul(NewRat(-1))), tc.decimalStr, "equality was incorrect (negative case), tc #%d", tcIndex) } } } @@ -99,10 +99,10 @@ func TestEqualities(t *testing.T) { {NewRat(-1, 7), NewRat(-3, 7), true, false, false}, } - for _, tc := range tests { - require.Equal(t, tc.gt, tc.r1.GT(tc.r2)) - require.Equal(t, tc.lt, tc.r1.LT(tc.r2)) - require.Equal(t, tc.eq, tc.r1.Equal(tc.r2)) + for tcIndex, tc := range tests { + require.Equal(t, tc.gt, tc.r1.GT(tc.r2), "GT result is incorrect, tc #%d", tcIndex) + require.Equal(t, tc.lt, tc.r1.LT(tc.r2), "LT result is incorrect, tc #%d", tcIndex) + require.Equal(t, tc.eq, tc.r1.Equal(tc.r2), "equality result is incorrect, tc #%d", tcIndex) } } @@ -135,15 +135,15 @@ func TestArithmetic(t *testing.T) { {NewRat(100), NewRat(1, 7), NewRat(100, 7), NewRat(700), NewRat(701, 7), NewRat(699, 7)}, } - for _, tc := range tests { - require.True(t, tc.resMul.Equal(tc.r1.Mul(tc.r2)), "r1 %v, r2 %v", tc.r1.Rat, tc.r2.Rat) - require.True(t, tc.resAdd.Equal(tc.r1.Add(tc.r2)), "r1 %v, r2 %v", tc.r1.Rat, tc.r2.Rat) - require.True(t, tc.resSub.Equal(tc.r1.Sub(tc.r2)), "r1 %v, r2 %v", tc.r1.Rat, tc.r2.Rat) + for tcIndex, tc := range tests { + require.True(t, tc.resMul.Equal(tc.r1.Mul(tc.r2)), "r1 %v, r2 %v. tc #%d", tc.r1.Rat, tc.r2.Rat, tcIndex) + require.True(t, tc.resAdd.Equal(tc.r1.Add(tc.r2)), "r1 %v, r2 %v. tc #%d", tc.r1.Rat, tc.r2.Rat, tcIndex) + require.True(t, tc.resSub.Equal(tc.r1.Sub(tc.r2)), "r1 %v, r2 %v. tc #%d", tc.r1.Rat, tc.r2.Rat, tcIndex) if tc.r2.Num().IsZero() { // panic for divide by zero require.Panics(t, func() { tc.r1.Quo(tc.r2) }) } else { - require.True(t, tc.resDiv.Equal(tc.r1.Quo(tc.r2)), "r1 %v, r2 %v", tc.r1.Rat, tc.r2.Rat) + require.True(t, tc.resDiv.Equal(tc.r1.Quo(tc.r2)), "r1 %v, r2 %v. tc #%d", tc.r1.Rat, tc.r2.Rat, tcIndex) } } } @@ -168,9 +168,9 @@ func TestEvaluate(t *testing.T) { {NewRat(113, 12), 9}, } - for _, tc := range tests { - require.Equal(t, tc.res, tc.r1.RoundInt64(), "%v", tc.r1) - require.Equal(t, tc.res*-1, tc.r1.Mul(NewRat(-1)).RoundInt64(), "%v", tc.r1.Mul(NewRat(-1))) + for tcIndex, tc := range tests { + require.Equal(t, tc.res, tc.r1.RoundInt64(), "%v. tc #%d", tc.r1, tcIndex) + require.Equal(t, tc.res*-1, tc.r1.Mul(NewRat(-1)).RoundInt64(), "%v. tc #%d", tc.r1.Mul(NewRat(-1)), tcIndex) } } @@ -192,10 +192,10 @@ func TestRound(t *testing.T) { {NewRat(1, 2), NewRat(1, 2), 1000}, } - for _, tc := range tests { - require.Equal(t, tc.res, tc.r.Round(tc.precFactor), "%v", tc.r) + for tcIndex, tc := range tests { + require.Equal(t, tc.res, tc.r.Round(tc.precFactor), "%v", tc.r, "incorrect rounding, tc #%d", tcIndex) negR1, negRes := tc.r.Mul(NewRat(-1)), tc.res.Mul(NewRat(-1)) - require.Equal(t, negRes, negR1.Round(tc.precFactor), "%v", negR1) + require.Equal(t, negRes, negR1.Round(tc.precFactor), "%v", negR1, "incorrect rounding (negative case), tc #%d", tcIndex) } } @@ -211,8 +211,8 @@ func TestToLeftPadded(t *testing.T) { {NewRat(1000, 3), 8, "00000333"}, {NewRat(1000, 3), 12, "000000000333"}, } - for _, tc := range tests { - require.Equal(t, tc.res, tc.rat.ToLeftPadded(tc.digits)) + for tcIndex, tc := range tests { + require.Equal(t, tc.res, tc.rat.ToLeftPadded(tc.digits), "incorrect left padding, tc #%d", tcIndex) } } @@ -296,11 +296,13 @@ func TestRatsEqual(t *testing.T) { {[]Rat{NewRat(1), NewRat(0)}, []Rat{NewRat(1), NewRat(0)}, true}, {[]Rat{NewRat(1), NewRat(0)}, []Rat{NewRat(0), NewRat(1)}, false}, {[]Rat{NewRat(1), NewRat(0)}, []Rat{NewRat(1)}, false}, + {[]Rat{NewRat(1), NewRat(2)}, []Rat{NewRat(2), NewRat(4)}, false}, + {[]Rat{NewRat(3), NewRat(18)}, []Rat{NewRat(1), NewRat(6)}, false}, } - for _, tc := range tests { - require.Equal(t, tc.eq, RatsEqual(tc.r1s, tc.r2s)) - require.Equal(t, tc.eq, RatsEqual(tc.r2s, tc.r1s)) + for tcIndex, tc := range tests { + require.Equal(t, tc.eq, RatsEqual(tc.r1s, tc.r2s), "equality of rational arrays is incorrect, tc #%d", tcIndex) + require.Equal(t, tc.eq, RatsEqual(tc.r2s, tc.r1s), "equality of rational arrays is incorrect (converse), tc #%d", tcIndex) } } diff --git a/types/utils_test.go b/types/utils_test.go index 8c84e2ace..af22f2db6 100644 --- a/types/utils_test.go +++ b/types/utils_test.go @@ -29,10 +29,10 @@ func TestSortJSON(t *testing.T) { wantErr: false}, } - for _, tc := range cases { + for tcIndex, tc := range cases { got, err := SortJSON([]byte(tc.unsortedJSON)) if tc.wantErr != (err != nil) { - t.Fatalf("got %t, want: %t, err=%s", err != nil, tc.wantErr, err) + t.Fatalf("got %t, want: %t, tc #%d, err=%s", err != nil, tc.wantErr, tcIndex, err) } require.Equal(t, string(got), tc.want) } diff --git a/version/version.go b/version/version.go index 617972e69..c6361dd50 100644 --- a/version/version.go +++ b/version/version.go @@ -2,10 +2,10 @@ package version const Maj = "0" -const Min = "21" +const Min = "22" const Fix = "0" -const Version = "0.21.0" +const Version = "0.22.0" // GitCommit set by build flags var GitCommit = "" diff --git a/x/gov/client/cli/tx.go b/x/gov/client/cli/tx.go index 8369c9927..88c4b7d17 100644 --- a/x/gov/client/cli/tx.go +++ b/x/gov/client/cli/tx.go @@ -158,7 +158,7 @@ func GetCmdVote(cdc *wire.Codec) *cobra.Command { return err } - fmt.Printf("Vote[Voter:%s,ProposalID:%d,Option:%s]", bechVoter, msg.ProposalID, msg.Option) + fmt.Printf("Vote[Voter:%s,ProposalID:%d,Option:%s]", bechVoter, msg.ProposalID, msg.Option.String()) // build and sign the transaction, then broadcast to Tendermint ctx := context.NewCoreContextFromViper().WithDecoder(authcmd.GetAccountDecoder(cdc)) diff --git a/x/gov/client/rest/rest.go b/x/gov/client/rest/rest.go index 147304587..ffaf42749 100644 --- a/x/gov/client/rest/rest.go +++ b/x/gov/client/rest/rest.go @@ -16,10 +16,11 @@ import ( // REST Variable names // nolint const ( - RestProposalID = "proposalID" - RestDepositer = "depositer" - RestVoter = "voter" - storeName = "gov" + RestProposalID = "proposalID" + RestDepositer = "depositer" + RestVoter = "voter" + RestProposalStatus = "status" + storeName = "gov" ) // RegisterRoutes - Central function to define routes that get registered by the main application @@ -340,10 +341,12 @@ func queryProposalsWithParameterFn(cdc *wire.Codec) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { bechVoterAddr := r.URL.Query().Get(RestVoter) bechDepositerAddr := r.URL.Query().Get(RestDepositer) + strProposalStatus := r.URL.Query().Get(RestProposalStatus) var err error var voterAddr sdk.AccAddress var depositerAddr sdk.AccAddress + var proposalStatus gov.ProposalStatus if len(bechVoterAddr) != 0 { voterAddr, err = sdk.AccAddressFromBech32(bechVoterAddr) @@ -365,6 +368,16 @@ func queryProposalsWithParameterFn(cdc *wire.Codec) http.HandlerFunc { } } + if len(strProposalStatus) != 0 { + proposalStatus, err = gov.ProposalStatusFromString(strProposalStatus) + if err != nil { + w.WriteHeader(http.StatusBadRequest) + err := errors.Errorf("'%s' is not a valid Proposal Status", strProposalStatus) + w.Write([]byte(err.Error())) + return + } + } + ctx := context.NewCoreContextFromViper() res, err := ctx.QueryStore(gov.KeyNextProposalID, storeName) @@ -397,9 +410,16 @@ func queryProposalsWithParameterFn(cdc *wire.Codec) http.HandlerFunc { if err != nil || len(res) == 0 { continue } + var proposal gov.Proposal cdc.MustUnmarshalBinary(res, &proposal) + if len(strProposalStatus) != 0 { + if proposal.GetStatus() != proposalStatus { + continue + } + } + matchingProposals = append(matchingProposals, proposal) } diff --git a/x/gov/keeper.go b/x/gov/keeper.go index b60404b8c..572c5388e 100644 --- a/x/gov/keeper.go +++ b/x/gov/keeper.go @@ -128,18 +128,24 @@ func (keeper Keeper) activateVotingPeriod(ctx sdk.Context, proposal Proposal) { // ===================================================== // Procedures +var ( + defaultMinDeposit int64 = 10 + defaultMaxDepositPeriod int64 = 10000 + defaultVotingPeriod int64 = 10000 +) + // Gets procedure from store. TODO: move to global param store and allow for updating of this func (keeper Keeper) GetDepositProcedure() DepositProcedure { return DepositProcedure{ - MinDeposit: sdk.Coins{sdk.NewCoin("steak", 10)}, - MaxDepositPeriod: 200, + MinDeposit: sdk.Coins{sdk.NewCoin("steak", defaultMinDeposit)}, + MaxDepositPeriod: defaultMaxDepositPeriod, } } // Gets procedure from store. TODO: move to global param store and allow for updating of this func (keeper Keeper) GetVotingProcedure() VotingProcedure { return VotingProcedure{ - VotingPeriod: 200, + VotingPeriod: defaultVotingPeriod, } } diff --git a/x/gov/keeper_test.go b/x/gov/keeper_test.go index 786953fd3..988a8a6a7 100644 --- a/x/gov/keeper_test.go +++ b/x/gov/keeper_test.go @@ -10,6 +10,13 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) +// overwrite defaults for testing +func init() { + defaultMinDeposit = 10 + defaultMaxDepositPeriod = 200 + defaultVotingPeriod = 200 +} + func TestGetSetProposal(t *testing.T) { mapp, keeper, _, _, _, _ := getMockApp(t, 0) mapp.BeginBlock(abci.RequestBeginBlock{}) diff --git a/x/gov/proposals.go b/x/gov/proposals.go index 64ffe6bfa..bb6b0aed4 100644 --- a/x/gov/proposals.go +++ b/x/gov/proposals.go @@ -60,7 +60,7 @@ type TextProposal struct { Description string `json:"description"` // Description of the proposal ProposalType ProposalKind `json:"proposal_type"` // Type of proposal. Initial set {PlainTextProposal, SoftwareUpgradeProposal} - Status ProposalStatus `json:"string"` // Status of the Proposal {Pending, Active, Passed, Rejected} + Status ProposalStatus `json:"proposal_status"` // Status of the Proposal {Pending, Active, Passed, Rejected} SubmitBlock int64 `json:"submit_block"` // Height of the block where TxGovSubmitProposal was included TotalDeposit sdk.Coins `json:"total_deposit"` // Current deposit on this proposal. Initial value is set at InitialDeposit @@ -184,7 +184,7 @@ func (pt ProposalKind) Format(s fmt.State, verb rune) { case 's': s.Write([]byte(fmt.Sprintf("%s", pt.String()))) default: - s.Write([]byte(fmt.Sprintf("%v", pt))) + s.Write([]byte(fmt.Sprintf("%v", byte(pt)))) } } @@ -283,6 +283,6 @@ func (status ProposalStatus) Format(s fmt.State, verb rune) { case 's': s.Write([]byte(fmt.Sprintf("%s", status.String()))) default: - s.Write([]byte(fmt.Sprintf("%v", status))) + s.Write([]byte(fmt.Sprintf("%v", byte(status)))) } } diff --git a/x/mock/test_utils.go b/x/mock/test_utils.go index f9e1e8f5e..c3179849d 100644 --- a/x/mock/test_utils.go +++ b/x/mock/test_utils.go @@ -46,7 +46,8 @@ func SignCheckDeliver( seq []int64, expPass bool, priv ...crypto.PrivKey, ) sdk.Result { tx := GenTx(msgs, accNums, seq, priv...) - res := app.Check(tx) + // Must simulate now as CheckTx doesn't run Msgs anymore + res := app.Simulate(tx) if expPass { require.Equal(t, sdk.ABCICodeOK, res.Code, res.Log) diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index 4531c3882..f5f8c98f8 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -113,6 +113,6 @@ func TestSlashingMsgs(t *testing.T) { checkValidatorSigningInfo(t, mapp, keeper, sdk.ValAddress(addr1), false) // unrevoke should fail with unknown validator - res := mock.CheckGenTx(t, mapp.BaseApp, []sdk.Msg{unrevokeMsg}, []int64{0}, []int64{1}, false, priv1) + res := mock.SignCheckDeliver(t, mapp.BaseApp, []sdk.Msg{unrevokeMsg}, []int64{0}, []int64{1}, false, priv1) require.Equal(t, sdk.ToABCICode(DefaultCodespace, CodeValidatorNotRevoked), res.Code) } diff --git a/x/slashing/handler.go b/x/slashing/handler.go index 3991bc222..19a48b448 100644 --- a/x/slashing/handler.go +++ b/x/slashing/handler.go @@ -43,10 +43,6 @@ func handleMsgUnrevoke(ctx sdk.Context, msg MsgUnrevoke, k Keeper) sdk.Result { return ErrValidatorJailed(k.codespace).Result() } - if ctx.IsCheckTx() { - return sdk.Result{} - } - // Update the starting height (so the validator can't be immediately revoked again) info.StartHeight = ctx.BlockHeight() k.setValidatorSigningInfo(ctx, addr, info) diff --git a/x/slashing/params.go b/x/slashing/params.go index b0c85698c..45d2833ce 100644 --- a/x/slashing/params.go +++ b/x/slashing/params.go @@ -70,7 +70,7 @@ var ( // TODO Temporarily set to 10 minutes for testnets defaultDowntimeUnbondDuration int64 = 60 * 10 - defaultMinSignedPerWindow sdk.Rat = sdk.NewRat(1, 2) + defaultMinSignedPerWindow = sdk.NewRat(1, 2) defaultSlashFractionDoubleSign = sdk.NewRat(1).Quo(sdk.NewRat(20)) diff --git a/x/slashing/test_common.go b/x/slashing/test_common.go index 5cec7ce78..190932995 100644 --- a/x/slashing/test_common.go +++ b/x/slashing/test_common.go @@ -34,7 +34,7 @@ var ( sdk.AccAddress(pks[1].Address()), sdk.AccAddress(pks[2].Address()), } - initCoins sdk.Int = sdk.NewInt(200) + initCoins = sdk.NewInt(200) ) func createTestCodec() *wire.Codec { diff --git a/x/stake/genesis.go b/x/stake/genesis.go index e54517fa5..b4ed80e51 100644 --- a/x/stake/genesis.go +++ b/x/stake/genesis.go @@ -17,7 +17,7 @@ func InitGenesis(ctx sdk.Context, keeper Keeper, data types.GenesisState) error keeper.SetNewParams(ctx, data.Params) keeper.InitIntraTxCounter(ctx) - for _, validator := range data.Validators { + for i, validator := range data.Validators { keeper.SetValidator(ctx, validator) if validator.Tokens.IsZero() { @@ -29,6 +29,8 @@ func InitGenesis(ctx sdk.Context, keeper Keeper, data types.GenesisState) error // Manually set indexes for the first time keeper.SetValidatorByPubKeyIndex(ctx, validator) + + validator.BondIntraTxCounter = int16(i) // set the intra-tx counter to the order the validators are presented keeper.SetValidatorByPowerIndex(ctx, validator, data.Pool) if validator.Status == sdk.Bonded { diff --git a/x/stake/genesis_test.go b/x/stake/genesis_test.go index 2faff5bc0..e27c7fed2 100644 --- a/x/stake/genesis_test.go +++ b/x/stake/genesis_test.go @@ -14,23 +14,35 @@ func TestInitGenesis(t *testing.T) { ctx, _, keeper := keep.CreateTestInput(t, false, 1000) pool := keeper.GetPool(ctx) - pool.LooseTokens = sdk.OneRat() + pool.LooseTokens = sdk.NewRat(2) params := keeper.GetParams(ctx) var delegations []Delegation validators := []Validator{ NewValidator(keep.Addrs[0], keep.PKs[0], Description{Moniker: "hoop"}), + NewValidator(keep.Addrs[1], keep.PKs[1], Description{Moniker: "bloop"}), } - genesisState := types.NewGenesisState(pool, params, validators, delegations) err := InitGenesis(ctx, keeper, genesisState) require.Error(t, err) + // initialize the validators validators[0].Tokens = sdk.OneRat() validators[0].DelegatorShares = sdk.OneRat() + validators[1].Tokens = sdk.OneRat() + validators[1].DelegatorShares = sdk.OneRat() genesisState = types.NewGenesisState(pool, params, validators, delegations) err = InitGenesis(ctx, keeper, genesisState) require.NoError(t, err) + + // now make sure the validators are bonded + resVal, found := keeper.GetValidator(ctx, keep.Addrs[0]) + require.True(t, found) + require.Equal(t, sdk.Bonded, resVal.Status) + + resVal, found = keeper.GetValidator(ctx, keep.Addrs[1]) + require.True(t, found) + require.Equal(t, sdk.Bonded, resVal.Status) } diff --git a/x/stake/handler.go b/x/stake/handler.go index b39298ede..14fb4f7bf 100644 --- a/x/stake/handler.go +++ b/x/stake/handler.go @@ -39,7 +39,7 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) (ValidatorUpdates []abci.Valid // Process types.Validator Provisions blockTime := ctx.BlockHeader().Time - if pool.InflationLastTime+blockTime >= 3600 { + if blockTime-pool.InflationLastTime >= 3600 { pool.InflationLastTime = blockTime pool = pool.ProcessProvisions(params) } diff --git a/x/stake/types/msg.go b/x/stake/types/msg.go index 08fd80128..27edad5dd 100644 --- a/x/stake/types/msg.go +++ b/x/stake/types/msg.go @@ -21,7 +21,7 @@ var _, _ sdk.Msg = &MsgBeginUnbonding{}, &MsgCompleteUnbonding{} var _, _ sdk.Msg = &MsgBeginRedelegate{}, &MsgCompleteRedelegate{} // Initialize Int for the denominator -var maximumBondingRationalDenominator sdk.Int = sdk.NewInt(int64(math.Pow10(MaxBondDenominatorPrecision))) +var maximumBondingRationalDenominator = sdk.NewInt(int64(math.Pow10(MaxBondDenominatorPrecision))) //______________________________________________________________________ diff --git a/x/stake/types/validator.go b/x/stake/types/validator.go index ed109830f..f177c123d 100644 --- a/x/stake/types/validator.go +++ b/x/stake/types/validator.go @@ -147,6 +147,34 @@ func UnmarshalValidator(cdc *wire.Codec, ownerAddr, value []byte) (validator Val }, nil } +// HumanReadableString returns a human readable string representation of a +// validator. An error is returned if the owner or the owner's public key +// cannot be converted to Bech32 format. +func (v Validator) HumanReadableString() (string, error) { + bechVal, err := sdk.Bech32ifyValPub(v.PubKey) + if err != nil { + return "", err + } + + resp := "Validator \n" + resp += fmt.Sprintf("Owner: %s\n", v.Owner) + resp += fmt.Sprintf("Validator: %s\n", bechVal) + resp += fmt.Sprintf("Revoked: %v\n", v.Revoked) + resp += fmt.Sprintf("Status: %s\n", sdk.BondStatusToString(v.Status)) + resp += fmt.Sprintf("Tokens: %s\n", v.Tokens.FloatString()) + resp += fmt.Sprintf("Delegator Shares: %s\n", v.DelegatorShares.FloatString()) + resp += fmt.Sprintf("Description: %s\n", v.Description) + resp += fmt.Sprintf("Bond Height: %d\n", v.BondHeight) + resp += fmt.Sprintf("Proposer Reward Pool: %s\n", v.ProposerRewardPool.String()) + resp += fmt.Sprintf("Commission: %s\n", v.Commission.String()) + resp += fmt.Sprintf("Max Commission Rate: %s\n", v.CommissionMax.String()) + resp += fmt.Sprintf("Commission Change Rate: %s\n", v.CommissionChangeRate.String()) + resp += fmt.Sprintf("Commission Change Today: %s\n", v.CommissionChangeToday.String()) + resp += fmt.Sprintf("Previous Bonded Tokens: %s\n", v.LastBondedTokens.String()) + + return resp, nil +} + //___________________________________________________________________ // validator struct for bech output @@ -408,30 +436,3 @@ func (v Validator) GetPubKey() crypto.PubKey { return v.PubKey } func (v Validator) GetPower() sdk.Rat { return v.BondedTokens() } func (v Validator) GetDelegatorShares() sdk.Rat { return v.DelegatorShares } func (v Validator) GetBondHeight() int64 { return v.BondHeight } - -// HumanReadableString returns a human readable string representation of a -// validator. An error is returned if the owner or the owner's public key -// cannot be converted to Bech32 format. -func (v Validator) HumanReadableString() (string, error) { - bechVal, err := sdk.Bech32ifyValPub(v.PubKey) - if err != nil { - return "", err - } - - resp := "Validator \n" - resp += fmt.Sprintf("Owner: %s\n", v.Owner) - resp += fmt.Sprintf("Validator: %s\n", bechVal) - resp += fmt.Sprintf("Status: %s\n", sdk.BondStatusToString(v.Status)) - resp += fmt.Sprintf("Tokens: %s\n", v.Tokens.FloatString()) - resp += fmt.Sprintf("Delegator Shares: %s\n", v.DelegatorShares.FloatString()) - resp += fmt.Sprintf("Description: %s\n", v.Description) - resp += fmt.Sprintf("Bond Height: %d\n", v.BondHeight) - resp += fmt.Sprintf("Proposer Reward Pool: %s\n", v.ProposerRewardPool.String()) - resp += fmt.Sprintf("Commission: %s\n", v.Commission.String()) - resp += fmt.Sprintf("Max Commission Rate: %s\n", v.CommissionMax.String()) - resp += fmt.Sprintf("Commission Change Rate: %s\n", v.CommissionChangeRate.String()) - resp += fmt.Sprintf("Commission Change Today: %s\n", v.CommissionChangeToday.String()) - resp += fmt.Sprintf("Previous Bonded Tokens: %s\n", v.LastBondedTokens.String()) - - return resp, nil -}